Changeset 9163 for branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO
- Timestamp:
- 2017-12-22T13:26:37+01:00 (6 years ago)
- Location:
- branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO
- Files:
-
- 15 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r8308 r9163 1634 1634 WRITE(cl1,'(i1)') 2 ; CALL iom_set_field_attr('trendT_even' , freq_op=cl1//'ts', freq_offset='0ts') 1635 1635 WRITE(cl1,'(i1)') 2 ; CALL iom_set_field_attr('trendT_odd' , freq_op=cl1//'ts', freq_offset='-1ts') 1636 WRITE(cl1,'(i1)') 2 ; CALL iom_set_field_attr('ptrd_T_even' , freq_op=cl1//'ts', freq_offset='0ts') 1637 WRITE(cl1,'(i1)') 2 ; CALL iom_set_field_attr('ptrd_T_odd' , freq_op=cl1//'ts', freq_offset='-1ts') 1636 1638 WRITE(cl1,'(i1)') nn_fsbc ; CALL iom_set_field_attr('SBC' , freq_op=cl1//'ts', freq_offset='0ts') 1637 1639 WRITE(cl1,'(i1)') nn_fsbc ; CALL iom_set_field_attr('SBC_scalar' , freq_op=cl1//'ts', freq_offset='0ts') … … 1642 1644 f_op%timestep = 2 ; f_of%timestep = 0 ; CALL iom_set_field_attr('trendT_even' , freq_op=f_op, freq_offset=f_of) 1643 1645 f_op%timestep = 2 ; f_of%timestep = -1 ; CALL iom_set_field_attr('trendT_odd' , freq_op=f_op, freq_offset=f_of) 1646 f_op%timestep = 2 ; f_of%timestep = 0 ; CALL iom_set_field_attr('ptrd_T_even' , freq_op=f_op, freq_offset=f_of) 1647 f_op%timestep = 2 ; f_of%timestep = -1 ; CALL iom_set_field_attr('ptrd_T_odd' , freq_op=f_op, freq_offset=f_of) 1644 1648 f_op%timestep = nn_fsbc ; f_of%timestep = 0 ; CALL iom_set_field_attr('SBC' , freq_op=f_op, freq_offset=f_of) 1645 1649 f_op%timestep = nn_fsbc ; f_of%timestep = 0 ; CALL iom_set_field_attr('SBC_scalar' , freq_op=f_op, freq_offset=f_of) -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r8333 r9163 49 49 USE agrif_opa_interp 50 50 #endif 51 51 52 52 53 IMPLICIT NONE … … 340 341 DO jn = 1, kjpt 341 342 DO jk = 1, jpkm1 342 zfact = 1._wp / r2dtra(jk)343 zfact = 0.5_wp / p2dt(jk) 343 344 zfact1 = atfp * p2dt(jk) 344 345 zfact2 = zfact1 / rau0 -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/TRD/trd_oce.F90
r7179 r9163 57 57 ! 58 58 ! !!!* Passive tracers trends indices (use if "key_top" defined) 59 INTEGER, PUBLIC, PARAMETER :: jptra_sms = 19!: sources m. sinks60 INTEGER, PUBLIC, PARAMETER :: jptra_radn = 2 0!: corr. trn<0 in trcrad61 INTEGER, PUBLIC, PARAMETER :: jptra_radb = 2 1!: corr. trb<0 in trcrad (like atf)59 INTEGER, PUBLIC, PARAMETER :: jptra_sms = 21 !: sources m. sinks 60 INTEGER, PUBLIC, PARAMETER :: jptra_radn = 22 !: corr. trn<0 in trcrad 61 INTEGER, PUBLIC, PARAMETER :: jptra_radb = 23 !: corr. trb<0 in trcrad (like atf) 62 62 ! 63 63 ! !!!* Momentum trends indices -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90
r8104 r9163 20 20 USE trd_oce ! trends: ocean variables 21 21 USE trdtrc ! ocean passive mixed layer tracers trends 22 # if defined key_top 23 USE trc, ONLY: tra ! tracer definitions (trn, trb, tra, etc.) 24 # endif 22 25 USE trdglo ! trends: global domain averaged 23 26 USE trdpen ! trends: Potential ENergy … … 163 166 ENDIF 164 167 168 # if defined key_top 165 169 IF( ctype == 'TRC' ) THEN !== passive tracer trend ==! 166 170 ! … … 170 174 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Y', ztrds ) 171 175 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds ) 176 CASE( jptra_zdfp ) ! diagnose the "PURE" Kz trend (here: just before the swap) 177 ! ! iso-neutral diffusion case otherwise 178 ! jptra_zdf is "PURE" 179 CALL wrk_alloc( jpi, jpj, jpk, zws ) 180 ! 181 zws(:,:, 1 ) = 0._wp ! vertical diffusive fluxes 182 zws(:,:,jpk) = 0._wp 183 DO jk = 2, jpk 184 zws(:,:,jk) = avt(:,:,jk) * (tra(:,:,jk-1,ktra) - tra(:,:,jk,ktra) ) / fse3w(:,:,jk) * tmask(:,:,jk) 185 END DO 186 ! 187 ztrds(:,:,jpk) = 0._wp 188 DO jk = 1, jpkm1 189 ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk) 190 END DO 191 CALL wrk_dealloc( jpi, jpj, jpk, zws ) 192 ! 172 193 CASE DEFAULT ! other trends: just masked 173 194 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) … … 177 198 ! 178 199 ENDIF 200 # endif 179 201 ! 180 202 CALL wrk_dealloc( jpi, jpj, jpk, ztrds ) -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/CFC/trcsms_cfc.F90
r8442 r9163 24 24 USE trdtrc 25 25 USE iom ! I/O library 26 USE wrk_nemo 26 27 27 28 IMPLICIT NONE … … 54 55 REAL(wp) :: xconv3 = 1.0e+3 ! conversion from mol/l/atm to mol/m3/atm 55 56 REAL(wp) :: xconv4 = 1.0e-12 ! conversion from mol/m3/atm to mol/m3/pptv 57 58 !! trend temporary array: 59 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrcfc 56 60 57 61 !! * Substitutions … … 265 269 ! 266 270 IF( l_trdtrc ) THEN 271 CALL wrk_alloc( jpi, jpj, jpk, ztrcfc ) 267 272 DO jn = jp_cfc0, jp_cfc1 268 CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 273 ztrcfc(:,:,:) = tra(:,:,:,jn) 274 CALL trd_trc( ztrcfc, jn, jptra_sms, kt ) ! save trends 269 275 END DO 276 CALL wrk_dealloc( jpi, jpj, jpk, ztrcfc ) 270 277 END IF 271 278 ! -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_update.F90
r8521 r9163 75 75 USE lib_mpp, ONLY: ctl_stop 76 76 USE par_kind, ONLY: wp 77 USE par_medusa, ONLY: jp_medusa, 77 USE par_medusa, ONLY: jp_medusa, jp_msa0, jp_msa1, & 78 78 jpalk, jpchd, jpchn, jpdet, jpdic, & 79 79 jpdin, jpdtc, jpfer, jpoxy, jppds, & … … 83 83 jpoxy_lc, jppds_lc, jpphd_lc, jpphn_lc, & 84 84 jpsil_lc, jpzme_lc, jpzmi_lc 85 USE par_oce, ONLY: jpi, jpim1, jpj, jpjm1 85 USE par_oce, ONLY: jpi, jpim1, jpj, jpjm1, jpk 86 86 USE par_trc, ONLY: jptra 87 87 USE sms_medusa, ONLY: friver_dep, & -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcsms_medusa.F90
r8521 r9163 23 23 USE trcsed_medusa 24 24 USE trcavg_medusa 25 !! for SMS trends 26 USE par_medusa, ONLY: jp_msa0, jp_msa1, jp_medusa 27 USE par_oce, ONLY: jpi, jpj, jpk 28 USE trd_oce, ONLY: jptra_sms, l_trdtrc 29 USE trdtrc 25 30 26 31 … … 47 52 !!---------------------------------------------------------------------- 48 53 INTEGER, INTENT(in) :: kt ! ocean time-step index 54 !! Loop variables 55 INTEGER :: jn 56 !! trend temporary array: 57 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrmed 58 49 59 50 60 # if defined key_debug_medusa … … 58 68 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 59 69 ENDIF 70 71 !! MEDUSA SMS trends: 72 IF( l_trdtrc ) THEN 73 CALL wrk_alloc( jpi, jpj, jpk, jp_medusa, ztrmed ) 74 ztrmed(:,:,:,:)=0.0 75 DO jn = 1, jp_medusa 76 ztrmed(:,:,:,jn) = tra(:,:,:,jp_msa0 + jn - 1) 77 END DO 78 END IF 60 79 61 80 CALL trc_avg_medusa( kt ) ! rolling average module … … 97 116 # endif 98 117 118 !! MEDUSA SMS trends: 119 IF( l_trdtrc ) THEN 120 DO jn = 1, jp_medusa 121 ztrmed(:,:,:,jn) = tra(:,:,:,jp_msa0 + jn - 1)-ztrmed(:,:,:,jn) 122 CALL trd_trc( ztrmed(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 123 END DO 124 CALL wrk_dealloc( jpi, jpj, jpk, jp_medusa, ztrmed ) 125 END IF 126 127 99 128 END SUBROUTINE trc_sms_medusa 100 129 -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r6487 r9163 27 27 !!---------------------------------------------------------------------- 28 28 USE oce_trc ! ocean dynamics and tracers variables 29 USE domvvl ! variable volume 29 30 USE trc ! ocean passive tracers variables 30 31 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 31 32 USE prtctl_trc ! Print control for debbuging 33 USE trcnam_trp ! passive tracers transport namelist variables 32 34 USE trd_oce 33 35 USE trdtra … … 45 47 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt 46 48 49 !! * Substitutions 50 # include "domzgr_substitute.h90" 47 51 !!---------------------------------------------------------------------- 48 52 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 124 128 IF( l_trdtrc ) THEN 125 129 CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrdt ) !* store now fields before applying the Asselin filter 126 ztrdt(:,:,:,:) = trn(:,:,:,:) 130 ztrdt(:,:,jpk,:) = 0._wp 131 IF( ln_trcldf_iso ) THEN ! diagnose the "pure" Kz diffusive trend 132 DO jn = 1, jptra 133 CALL trd_tra( kt, 'TRC', jn, jptra_zdfp, ztrdt(:,:,:,jn) ) 134 ENDDO 135 ENDIF 136 ! total trend for the non-time-filtered variables. 137 ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn 138 ! cancel from tsn terms 139 IF( lk_vvl ) THEN 140 DO jn = 1, jptra 141 DO jk = 1, jpkm1 142 zfact = 1.0 / rdttrc(jk) 143 ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn)*fse3t_a(:,:,jk) / fse3t_n(:,:,jk) - & 144 trn(:,:,jk,jn) ) * zfact 145 END DO 146 END DO 147 ELSE 148 DO jn = 1, jptra 149 DO jk = 1, jpkm1 150 zfact = 1.0 / rdttrc(jk) 151 ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn) - trn(:,:,jk,jn) ) * zfact 152 END DO 153 END DO 154 END IF 155 DO jn = 1, jptra 156 CALL trd_tra( kt, 'TRC', jn, jptra_tot, ztrdt(:,:,:,jn) ) 157 ENDDO 158 IF( .NOT.lk_vvl ) THEN 159 ! Store now fields before applying the Asselin filter 160 ! in order to calculate Asselin filter trend later. 161 ztrdt(:,:,:,:) = trn(:,:,:,:) 162 ENDIF 127 163 ENDIF 128 164 ! Leap-Frog + Asselin filter time stepping … … 134 170 END DO 135 171 END DO 172 IF (l_trdtrc.AND.lk_vvl) THEN ! Zero Asselin filter contribution 173 ! must be explicitly written out since for vvl 174 ! Asselin filter is output by 175 ! tra_nxt_vvl that is not called on 176 ! this time step 177 ztrdt(:,:,:,:) = 0._wp 178 DO jn = 1, jptra 179 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 180 ENDDO 181 END IF 182 136 183 ! 137 184 ELSE … … 144 191 145 192 ! trends computation 146 IF( l_trdtrc 193 IF( l_trdtrc.AND..NOT.lk_vvl) THEN ! trends 147 194 DO jn = 1, jptra 148 195 DO jk = 1, jpkm1 149 196 zfact = 1.e0 / r2dt(jk) 150 197 ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact 151 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt )152 END DO198 END DO 199 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 153 200 END DO 154 CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt )155 201 END IF 202 ! 203 IF( l_trdtrc) CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrdt ) 156 204 ! 157 205 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90
r8356 r9163 140 140 DO jn = 1, jptra 141 141 ! 142 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends 143 ! ! add the trend to the general tracer trend 142 IF( l_trdtrc ) THEN 143 ztrtrd(:,:,:) = 0.0 144 ztrtrd(:,:,1) = tra(:,:,1,jn) ! save surface trends 145 ! ! add the trend to the general tracer trend 146 ENDIF 144 147 145 148 IF ( nn_ice_tr == -1 ) THEN ! No tracers in sea ice (null concentration in sea ice) … … 184 187 ! 185 188 IF( l_trdtrc ) THEN 186 ztrtrd(:,:, :) = tra(:,:,:,jn) - ztrtrd(:,:,:)189 ztrtrd(:,:,1) = tra(:,:,1,jn) - ztrtrd(:,:,1) 187 190 CALL trd_tra( kt, 'TRC', jn, jptra_nsr, ztrtrd ) 188 191 END IF -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90
r8442 r9163 28 28 USE zpshde ! partial step: hor. derivative (zps_hde routine) 29 29 # if defined key_debug_medusa 30 USE trc rst30 USE trcstat 31 31 # endif 32 32 -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
r6486 r9163 15 15 !!---------------------------------------------------------------------- 16 16 USE oce_trc ! ocean dynamics and active tracers 17 USE domvvl ! variable volume 17 18 USE trc ! ocean passive tracers variables 18 19 USE trcnam_trp ! passive tracers transport namelist variables … … 98 99 99 100 IF( l_trdtrc ) THEN ! save the vertical diffusive trends for further diagnostics 101 !! JPALM -- 18-08-2017 -- vvl case, do as done by G Nurser in trazdf 102 IF( lk_vvl ) THEN 103 DO jn = 1, jptra 104 DO jk = 1, jpkm1 105 ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn)*fse3t_a(:,:,jk) - & 106 trb(:,:,jk,jn)*fse3t_b(:,:,jk) ) & 107 / (fse3t_n(:,:,jk)*r2dt(jk)) ) - ztrtrd(:,:,jk,jn) 108 END DO 109 END DO 110 ELSE 111 DO jn = 1, jptra 112 DO jk = 1, jpkm1 113 ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn) - trb(:,:,jk,jn) ) / r2dt(jk) ) - ztrtrd(:,:,jk,jn) 114 END DO 115 END DO 116 ENDIF 100 117 DO jn = 1, jptra 101 DO jk = 1, jpkm1102 ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn) - trb(:,:,jk,jn) ) / r2dt(jk) ) - ztrtrd(:,:,jk,jn)103 END DO104 118 CALL trd_tra( kt, 'TRC', jn, jptra_zdf, ztrtrd(:,:,:,jn) ) 105 119 END DO -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/TRP/trdtrc.F90
r6486 r9163 19 19 USE trdmxl_trc ! Mixed layer trends diag. 20 20 USE iom ! I/O library 21 # if defined key_debug_medusa 22 USE trcstat, ONLY: trc_rst_dia_stat 23 # endif 21 24 22 25 IMPLICIT NONE … … 86 89 87 90 IF( lk_trdtrc .AND. ln_trdtrc( kjn ) ) THEN 88 ! 91 !! JPALM -- 17-08-2017 -- modif following trd_tra_iom as suggested by Georges 92 !! -- add jptra_tot; jptra_totad; jptra_zdfp 93 !! -- shange to output trends every 2 time-step, except tot. 94 !! -- move cltra and iomput inside the select case 95 !! So if an non-wanted case arrives here it will not go 96 !! through cltra (without value) and break iomput. 97 !! -- Add iom_use in prevision of not using All trends 98 !! for All passive tracers (will create a HUGE 3D file otherwise -- 99 !! might be interested in very few of them : SMS and TOT probably) 100 ! 101 SELECT CASE( ktrd ) 102 !! tot - output every time-step: 103 CASE( jptra_tot ) ; WRITE (cltra,'("TOT_",4a)') 104 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 105 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 106 END SELECT 107 ! 108 IF( MOD( kt, 2 ) == 0 ) THEN 89 109 SELECT CASE( ktrd ) 90 110 CASE( jptra_xad ) ; WRITE (cltra,'("XAD_",4a)') 111 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 112 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 91 113 CASE( jptra_yad ) ; WRITE (cltra,'("YAD_",4a)') 92 CASE( jptra_zad ) ; WRITE (cltra,'("ZAD_",4a)') 114 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 115 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 116 CASE( jptra_zad ) ; WRITE (cltra,'("ZAD_",4a)') !! care vvl case 117 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 118 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 119 CASE( jptra_totad ) ; WRITE (cltra,'("TAD_",4a)') !! total adv 120 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 121 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 93 122 CASE( jptra_ldf ) ; WRITE (cltra,'("LDF_",4a)') 123 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 124 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 94 125 CASE( jptra_bbl ) ; WRITE (cltra,'("BBL_",4a)') 126 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 127 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 95 128 CASE( jptra_nsr ) ; WRITE (cltra,'("FOR_",4a)') 129 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 130 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 96 131 CASE( jptra_zdf ) ; WRITE (cltra,'("ZDF_",4a)') 132 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 133 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 134 CASE( jptra_zdfp ) ; WRITE (cltra,'("ZDP_",4a)') 135 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 136 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 97 137 CASE( jptra_dmp ) ; WRITE (cltra,'("DMP_",4a)') 138 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 139 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 98 140 CASE( jptra_sms ) ; WRITE (cltra,'("SMS_",4a)') 141 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 142 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 143 CASE( jptra_radb ) ; WRITE (cltra,'("RDB_",4a)') 144 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 145 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 146 CASE( jptra_radn ) ; WRITE (cltra,'("RDN_",4a)') 147 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 148 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 149 END SELECT 150 ELSE IF( MOD( kt, 2 ) == 1 ) THEN 151 SELECT CASE( ktrd ) 99 152 CASE( jptra_atf ) ; WRITE (cltra,'("ATF_",4a)') 100 CASE( jptra_radb ) ; WRITE (cltra,'("RDB_",4a)') 101 CASE( jptra_radn ) ; WRITE (cltra,'("RDN_",4a)') 102 END SELECT 103 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 104 CALL iom_put( cltra, ptrtrd(:,:,:) ) 153 cltra = TRIM(cltra)//TRIM(ctrcnm(kjn)) 154 CALL trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 155 END SELECT 156 END IF 105 157 ! 106 158 END IF … … 123 175 124 176 END SUBROUTINE trd_trc_bio 177 178 SUBROUTINE trd_trc_iomput( cltra, ptrtrd, kjn, kt ) 179 !!---------------------------------------------------------------------- 180 !! *** ROUTINE trd_trc_iomput *** 181 !!---------------------------------------------------------------------- 182 INTEGER, INTENT( in ) :: kt ! timestep 183 INTEGER, INTENT( in ) :: kjn ! biotrend index 184 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( inout ) :: ptrtrd ! var trend 185 CHARACTER (len=*),INTENT( in ) :: cltra ! trend name 186 !!---------------------------------------------------------------------- 187 188 189 IF (iom_use(cltra)) THEN 190 # if defined key_debug_medusa 191 IF(lwp) WRITE(numout,*) ' TREND stats (min, max,sum) kt = ',kt ,' jn = ',kjn 192 CALL trc_rst_dia_stat( ptrtrd(:,:,1), cltra) 193 # endif 194 CALL iom_put( cltra, ptrtrd(:,:,:) ) 195 # if defined key_debug_medusa 196 ELSE 197 IF(lwp) WRITE(numout,*) & 198 ' TREND -- No output asked for ',cltra,' kt = ',kt,' jn = ',kjn 199 CALL trc_rst_dia_stat( ptrtrd(:,:,1), cltra) 200 # endif 201 ENDIF 202 203 END SUBROUTINE trd_trc_iomput 204 205 125 206 #else 126 207 !!---------------------------------------------------------------------- -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
r8442 r9163 60 60 !! ( (PISCES, CFC, MY_TRC, MEDUSA, IDTRA, Age ) 61 61 !!--------------------------------------------------------------------- 62 INTEGER :: jn, jk ! dummy loop indice 62 INTEGER :: ierr 63 #if defined key_trdmxl_trc || defined key_trdtrc 64 NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 65 & ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, & 66 & cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 67 #endif 68 69 INTEGER :: jn, jk ! dummy loop indice 70 INTEGER :: ios ! Local integer output status for namelist read 71 !!--------------------------------------------------------------------- 72 73 63 74 ! ! Parameters of the run 64 75 IF( .NOT. lk_offline ) CALL trc_nam_run … … 68 79 69 80 ! ! Parameters of additional diagnostics 70 CALL trc_nam_dia81 IF( .NOT. lk_iomput ) CALL trc_nam_dia 71 82 72 83 ! ! namelist of transport … … 171 182 ENDIF 172 183 173 IF( lk_c14b ) THEN; CALL trc_nam_c14b ! C14 bomb tracers174 ELSE 184 IF( lk_c14b ) THEN ; CALL trc_nam_c14b ! C14 bomb tracers 185 ELSE ; IF(lwp) WRITE(numout,*) ' C14 not used' 175 186 ENDIF 176 187 -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/trcrst.F90
r9114 r9163 43 43 USE sbc_oce, ONLY: lk_oasis 44 44 USE oce, ONLY: CO2Flux_out_cpl, DMS_out_cpl, chloro_out_cpl !! Coupling variable 45 USE trcstat 45 46 46 47 IMPLICIT NONE … … 52 53 PUBLIC trc_rst_cal 53 54 PUBLIC trc_rst_stat 54 PUBLIC trc_rst_dia_stat55 PUBLIC trc_rst_tra_stat56 55 57 56 !! * Substitutions … … 706 705 707 706 708 SUBROUTINE trc_rst_tra_stat709 !!----------------------------------------------------------------------710 !! *** trc_rst_tra_stat ***711 !!712 !! ** purpose : Compute tracers statistics - check where crazy values appears713 !!----------------------------------------------------------------------714 INTEGER :: jk, jn715 REAL(wp) :: ztraf, zmin, zmax, zmean, zdrift, areasf716 REAL(wp), DIMENSION(jpi,jpj) :: zvol717 !!----------------------------------------------------------------------718 719 IF( lwp ) THEN720 WRITE(numout,*)721 WRITE(numout,*) ' ----SURFACE TRA STAT---- '722 WRITE(numout,*)723 ENDIF724 !725 zvol(:,:) = e1e2t(:,:) * fse3t_a(:,:,1) * tmask(:,:,1)726 areasf = glob_sum(zvol(:,:))727 DO jn = 1, jptra728 ztraf = glob_sum( tra(:,:,1,jn) * zvol(:,:) )729 zmin = MINVAL( tra(:,:,1,jn), mask= ((tmask(:,:,1).NE.0.)) )730 zmax = MAXVAL( tra(:,:,1,jn), mask= ((tmask(:,:,1).NE.0.)) )731 IF( lk_mpp ) THEN732 CALL mpp_min( zmin ) ! min over the global domain733 CALL mpp_max( zmax ) ! max over the global domain734 END IF735 zmean = ztraf / areasf736 IF(lwp) WRITE(numout,9001) jn, TRIM( ctrcnm(jn) ), zmean, zmin, zmax737 END DO738 IF(lwp) WRITE(numout,*)739 9001 FORMAT(' tracer nb :',i2,' name :',a10,' mean :',e18.10,' min :',e18.10, &740 & ' max :',e18.10)741 !742 END SUBROUTINE trc_rst_tra_stat743 744 745 746 SUBROUTINE trc_rst_dia_stat( dgtr, names)747 !!----------------------------------------------------------------------748 !! *** trc_rst_dia_stat ***749 !!750 !! ** purpose : Compute tracers statistics751 !!----------------------------------------------------------------------752 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: dgtr ! 2D diag var753 CHARACTER(len=*) , INTENT(in) :: names ! 2D diag name754 !!---------------------------------------------------------------------755 INTEGER :: jk, jn756 CHARACTER (LEN=18) :: text_zmean757 REAL(wp) :: ztraf, zmin, zmax, zmean, areasf758 REAL(wp), DIMENSION(jpi,jpj) :: zvol759 !!----------------------------------------------------------------------760 761 IF( lwp ) WRITE(numout,*) 'STAT- ', names762 763 ! fse3t_a will be undefined at the start of a run, but this routine764 ! may be called at any stage! Hence we MUST make sure it is765 ! initialised to zero when allocated to enable us to test for766 ! zero content here and avoid potentially dangerous and non-portable767 ! operations (e.g. divide by zero, global sums of junk values etc.)768 zvol(:,:) = e1e2t(:,:) * fse3t_a(:,:,1) * tmask(:,:,1)769 ztraf = glob_sum( dgtr(:,:) * zvol(:,:) )770 !! areasf = glob_sum(e1e2t(:,:) * tmask(:,:,1) )771 areasf = glob_sum(zvol(:,:))772 zmin = MINVAL( dgtr(:,:), mask= ((tmask(:,:,1).NE.0.)) )773 zmax = MAXVAL( dgtr(:,:), mask= ((tmask(:,:,1).NE.0.)) )774 IF( lk_mpp ) THEN775 CALL mpp_min( zmin ) ! min over the global domain776 CALL mpp_max( zmax ) ! max over the global domain777 END IF778 779 text_zmean = "N/A"780 ! Avoid divide by zero. areasf must be positive.781 IF (areasf > 0.0) THEN782 zmean = ztraf / areasf783 WRITE(text_zmean,'(e18.10)') zmean784 ENDIF785 786 IF(lwp) WRITE(numout,9002) TRIM( names ), text_zmean, zmin, zmax787 788 9002 FORMAT(' tracer name :',A,' mean :',A,' min :',e18.10, &789 & ' max :',e18.10 )790 !791 END SUBROUTINE trc_rst_dia_stat792 793 794 707 #else 795 708 !!---------------------------------------------------------------------- -
branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/trcstp.F90
r8442 r9163 19 19 USE trcwri 20 20 USE trcrst 21 USE trcstat 21 22 USE trdtrc_oce 22 23 USE trdmxl_trc
Note: See TracChangeset
for help on using the changeset viewer.