- Timestamp:
- 2015-11-20T09:39:06+01:00 (8 years ago)
- Location:
- branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC
- Files:
-
- 2 deleted
- 75 edited
- 5 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/C14b/trcsms_c14b.F90
r5038 r5901 50 50 51 51 !! * Substitutions 52 # include "top_substitute.h90" 53 52 # include "domzgr_substitute.h90" 54 53 !!---------------------------------------------------------------------- 55 54 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 56 !! $ Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/trcc14bomb.F90,v 1.2 2005/11/14 16:42:43 opalod Exp$55 !! $Id$ 57 56 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 58 57 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/C14b/trcwri_c14b.F90
r5038 r5901 6 6 !! History : 1.0 ! 2009-05 (C. Ethe) Original code 7 7 !!---------------------------------------------------------------------- 8 #if defined key_top && key_c14b && defined key_iomput8 #if defined key_top && defined key_c14b && defined key_iomput 9 9 !!---------------------------------------------------------------------- 10 10 !! 'key_c14b' c14b model … … 20 20 PUBLIC trc_wri_c14b 21 21 22 # include "top_substitute.h90"23 22 CONTAINS 24 23 -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/CFC/trcsms_cfc.F90
r5038 r5901 51 51 52 52 !! * Substitutions 53 # include " top_substitute.h90"53 # include "domzgr_substitute.h90" 54 54 !!---------------------------------------------------------------------- 55 55 !! NEMO/TOP 3.3 , NEMO Consortium (2010) -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/CFC/trcwri_cfc.F90
r5038 r5901 6 6 !! History : 1.0 ! 2009-05 (C. Ethe) Original code 7 7 !!---------------------------------------------------------------------- 8 #if defined key_top && key_cfc && defined key_iomput8 #if defined key_top && defined key_cfc && defined key_iomput 9 9 !!---------------------------------------------------------------------- 10 10 !! 'key_cfc' cfc model … … 20 20 PUBLIC trc_wri_cfc 21 21 22 # include "top_substitute.h90"23 22 CONTAINS 24 23 -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcini_my_trc.F90
r2787 r5901 42 42 43 43 IF(lwp) WRITE(numout,*) 44 IF(lwp) WRITE(numout,*) ' trc_ini_my_trc: initialisation of MY_TRC model' 44 IF(lwp) WRITE(numout,*) ' trc_ini_my_trc: passive tracer unit vector' 45 IF(lwp) WRITE(numout,*) ' To check conservation : ' 46 IF(lwp) WRITE(numout,*) ' 1 - No sea-ice model ' 47 IF(lwp) WRITE(numout,*) ' 2 - No runoff ' 48 IF(lwp) WRITE(numout,*) ' 3 - precipitation and evaporation equal to 1 : E=P=1 ' 45 49 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 46 50 47 IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 0.51 IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 1. 48 52 ! 49 53 END SUBROUTINE trc_ini_my_trc -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcsms_my_trc.F90
r5038 r5901 46 46 INTEGER :: jn ! dummy loop index 47 47 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrmyt 48 !!----------------------------------------------------------------------48 !!---------------------------------------------------------------------- 49 49 ! 50 50 IF( nn_timing == 1 ) CALL timing_start('trc_sms_my_trc') … … 55 55 56 56 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrmyt ) 57 58 WHERE( (glamt <= 170) .AND. (glamt >= 160) .AND. (gphit <= -74) .AND. (gphit >=-75.6) )59 trn(:,:,1,jpmyt1) = 1._wp60 trb(:,:,1,jpmyt1) = 1._wp61 tra(:,:,1,jpmyt1) = 0._wp62 END WHERE63 57 64 58 IF( l_trdtrc ) THEN ! Save the trends in the ixed layer -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcwri_my_trc.F90
r5038 r5901 6 6 !! History : 1.0 ! 2009-05 (C. Ethe) Original code 7 7 !!---------------------------------------------------------------------- 8 #if defined key_top && key_my_trc && defined key_iomput8 #if defined key_top && defined key_my_trc && defined key_iomput 9 9 !!---------------------------------------------------------------------- 10 10 !! 'key_my_trc' my_trc model … … 20 20 PUBLIC trc_wri_my_trc 21 21 22 # include "top_substitute.h90"23 22 CONTAINS 24 23 -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zbio.F90
- Property svn:keywords set to Id
r5038 r5901 59 59 REAL(wp) :: fdbod ! zooplankton mortality fraction that goes to detritus 60 60 61 !!* Substitution 62 # include "top_substitute.h90" 61 !! * Substitutions 62 # include "domzgr_substitute.h90" 63 # include "vectopt_loop_substitute.h90" 63 64 !!---------------------------------------------------------------------- 64 65 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 65 !! $Id : p2zbio.F90 3294 2012-01-28 16:44:18Z rblod$66 !! $Id$ 66 67 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 67 68 !!---------------------------------------------------------------------- … … 599 600 600 601 !!====================================================================== 601 END MODULE 602 END MODULE p2zbio -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zexp.F90
- Property svn:keywords set to Id
r5038 r5901 41 41 REAL(wp) :: areacot !: surface coastal area 42 42 43 !!* Substitution 44 # include "top_substitute.h90" 43 !! * Substitutions 44 # include "domzgr_substitute.h90" 45 # include "vectopt_loop_substitute.h90" 45 46 !!---------------------------------------------------------------------- 46 47 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 47 !! $Id : trcexp.F90 3294 2012-01-28 16:44:18Z rblod$48 !! $Id$ 48 49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 50 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zopt.F90
- Property svn:keywords set to Id
r5038 r5901 40 40 REAL(wp), PUBLIC :: reddom ! redfield ratio (C:N) for DOM 41 41 42 !! * Substitution43 # include " top_substitute.h90"42 !! * Substitutions 43 # include "domzgr_substitute.h90" 44 44 !!---------------------------------------------------------------------- 45 45 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 46 !! $Id : trcopt.F90 3294 2012-01-28 16:44:18Z rblod$46 !! $Id$ 47 47 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 48 48 !!---------------------------------------------------------------------- … … 89 89 90 90 ! ! surface irradiance 91 zpar0m (:,:) = qsr (:,:) * 0.43 ! ------------------ 91 ! ! ------------------ 92 IF( ln_dm2dc ) THEN ; zpar0m(:,:) = qsr_mean(:,:) * 0.43 93 ELSE ; zpar0m(:,:) = qsr (:,:) * 0.43 94 ENDIF 92 95 zpar100(:,:) = zpar0m(:,:) * 0.01 93 96 zparr (:,:,1) = zpar0m(:,:) * 0.5 -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsed.F90
- Property svn:keywords set to Id
r5038 r5901 34 34 REAL(wp), PUBLIC :: xhr ! coeff for martin''s remineralisation profile 35 35 36 !! * Substitution37 # include " top_substitute.h90"36 !! * Substitutions 37 # include "domzgr_substitute.h90" 38 38 !!---------------------------------------------------------------------- 39 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 40 !! $Id : p2z_sed.F90 3294 2012-01-28 16:44:18Z rblod$40 !! $Id$ 41 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 42 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsms.F90
- Property svn:keywords set to Id
r5038 r5901 32 32 !!---------------------------------------------------------------------- 33 33 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 34 !! $Id : p2zsms.F90 3294 2012-01-28 16:44:18Z rblod$34 !! $Id$ 35 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 36 !!---------------------------------------------------------------------- … … 84 84 85 85 !!====================================================================== 86 END MODULE 86 END MODULE p2zsms -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90
r4529 r5901 34 34 PUBLIC p4z_bio 35 35 36 !! * Substitution37 # include " top_substitute.h90"36 !! * Substitutions 37 # include "domzgr_substitute.h90" 38 38 !!---------------------------------------------------------------------- 39 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 44 44 CONTAINS 45 45 46 SUBROUTINE p4z_bio ( kt, jnt )46 SUBROUTINE p4z_bio ( kt, knt ) 47 47 !!--------------------------------------------------------------------- 48 48 !! *** ROUTINE p4z_bio *** … … 54 54 !! ** Method : - ??? 55 55 !!--------------------------------------------------------------------- 56 INTEGER, INTENT(in) :: kt, jnt 57 INTEGER :: ji, jj, jk, jn 58 REAL(wp) :: ztra 59 #if defined key_kriest 60 REAL(wp) :: zcoef1, zcoef2 61 #endif 56 INTEGER, INTENT(in) :: kt, knt 57 INTEGER :: ji, jj, jk, jn 62 58 CHARACTER (len=25) :: charout 63 59 … … 80 76 81 77 82 CALL p4z_opt ( kt, jnt ) ! Optic: PAR in the water column83 CALL p4z_sink ( kt, jnt ) ! vertical flux of particulate organic matter84 CALL p4z_fechem(kt, jnt ) ! Iron chemistry/scavenging85 CALL p4z_lim ( kt, jnt ) ! co-limitations by the various nutrients86 CALL p4z_prod ( kt, jnt ) ! phytoplankton growth rate over the global ocean.78 CALL p4z_opt ( kt, knt ) ! Optic: PAR in the water column 79 CALL p4z_sink ( kt, knt ) ! vertical flux of particulate organic matter 80 CALL p4z_fechem(kt, knt ) ! Iron chemistry/scavenging 81 CALL p4z_lim ( kt, knt ) ! co-limitations by the various nutrients 82 CALL p4z_prod ( kt, knt ) ! phytoplankton growth rate over the global ocean. 87 83 ! ! (for each element : C, Si, Fe, Chl ) 88 84 CALL p4z_mort ( kt ) ! phytoplankton mortality 89 90 CALL p4z_micro( kt, jnt ) ! microzooplankton91 CALL p4z_meso ( kt, jnt ) ! mesozooplankton92 CALL p4z_rem ( kt, jnt ) ! remineralization terms of organic matter+scavenging of Fe85 ! ! zooplankton sources/sinks routines 86 CALL p4z_micro( kt, knt ) ! microzooplankton 87 CALL p4z_meso ( kt, knt ) ! mesozooplankton 88 CALL p4z_rem ( kt, knt ) ! remineralization terms of organic matter+scavenging of Fe 93 89 ! ! test if tracers concentrations fall below 0. 94 xnegtr(:,:,:) = 1.e0 95 DO jn = jp_pcs0, jp_pcs1 96 DO jk = 1, jpk 97 DO jj = 1, jpj 98 DO ji = 1, jpi 99 IF( ( trn(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 100 ztra = ABS( trn(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 101 102 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 103 ENDIF 104 END DO 105 END DO 106 END DO 107 END DO 108 ! ! where at least 1 tracer concentration becomes negative 109 ! ! 110 DO jn = jp_pcs0, jp_pcs1 111 trn(:,:,:,jn) = trn(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 112 END DO 113 114 115 tra(:,:,:,:) = 0.e0 116 117 #if defined key_kriest 118 ! 119 zcoef1 = 1.e0 / xkr_massp 120 zcoef2 = 1.e0 / xkr_massp / 1.1 121 DO jk = 1,jpkm1 122 trn(:,:,jk,jpnum) = MAX( trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef1 / xnumm(jk) ) 123 trn(:,:,jk,jpnum) = MIN( trn(:,:,jk,jpnum), trn(:,:,jk,jppoc) * zcoef2 ) 124 END DO 125 #endif 126 127 ! 90 ! ! 128 91 IF(ln_ctl) THEN ! print mean trends (used for debugging) 129 92 WRITE(charout, FMT="('bio ')") 130 93 CALL prt_ctl_trc_info(charout) 131 CALL prt_ctl_trc(tab4d=tr n, mask=tmask, clinfo=ctrcnm)94 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 132 95 ENDIF 133 96 ! … … 146 109 147 110 !!====================================================================== 148 END MODULE p4zbio 149 111 END MODULE p4zbio -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zche.F90
- Property svn:keywords set to Id
r3557 r5901 164 164 REAL(wp) :: devk55 = 0.3692E-3 165 165 166 !! * Substitution167 # include "top_substitute.h90"166 !! * Substitutions 167 # include "domzgr_substitute.h90" 168 168 !!---------------------------------------------------------------------- 169 169 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 170 !! $Id : p4zche.F90 3294 2012-01-28 16:44:18Z rblod$170 !! $Id$ 171 171 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 172 172 !!---------------------------------------------------------------------- … … 195 195 ! CHEMICAL CONSTANTS - SURFACE LAYER 196 196 ! ---------------------------------- 197 !CDIR NOVERRCHK198 197 DO jj = 1, jpj 199 !CDIR NOVERRCHK200 198 DO ji = 1, jpi 201 199 ! ! SET ABSOLUTE TEMPERATURE … … 227 225 ! OXYGEN SOLUBILITY - DEEP OCEAN 228 226 ! ------------------------------- 229 !CDIR NOVERRCHK230 227 DO jk = 1, jpk 231 !CDIR NOVERRCHK232 228 DO jj = 1, jpj 233 !CDIR NOVERRCHK234 229 DO ji = 1, jpi 235 230 ztkel = tsn(ji,jj,jk,jp_tem) + 273.16 … … 252 247 ! CHEMICAL CONSTANTS - DEEP OCEAN 253 248 ! ------------------------------- 254 !CDIR NOVERRCHK255 249 DO jk = 1, jpk 256 !CDIR NOVERRCHK257 250 DO jj = 1, jpj 258 !CDIR NOVERRCHK259 251 DO ji = 1, jpi 260 252 … … 396 388 397 389 !!====================================================================== 398 END MODULE 390 END MODULE p4zche -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r5038 r5901 39 39 REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth 40 40 41 !! * Substitution42 # include " top_substitute.h90"41 !! * Substitutions 42 # include "domzgr_substitute.h90" 43 43 !!---------------------------------------------------------------------- 44 44 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 48 48 CONTAINS 49 49 50 SUBROUTINE p4z_fechem( kt, jnt )50 SUBROUTINE p4z_fechem( kt, knt ) 51 51 !!--------------------------------------------------------------------- 52 52 !! *** ROUTINE p4z_fechem *** … … 62 62 !!--------------------------------------------------------------------- 63 63 ! 64 INTEGER, INTENT(in) :: kt, jnt ! ocean time step64 INTEGER, INTENT(in) :: kt, knt ! ocean time step 65 65 ! 66 66 INTEGER :: ji, jj, jk, jic … … 101 101 ! ------------------------------------------------- 102 102 IF( ln_ligvar ) THEN 103 ztotlig(:,:,:) = 0.09 * tr n(:,:,:,jpdoc) * 1E6 + ligand * 1E9103 ztotlig(:,:,:) = 0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 104 104 ztotlig(:,:,:) = MIN( ztotlig(:,:,:), 10. ) 105 105 ELSE … … 113 113 ! Chemistry is supposed to be fast enough to be at equilibrium 114 114 ! ------------------------------------------------------------ 115 !CDIR NOVERRCHK116 115 DO jk = 1, jpkm1 117 !CDIR NOVERRCHK118 116 DO jj = 1, jpj 119 !CDIR NOVERRCHK120 117 DO ji = 1, jpi 121 118 ! Calculate ligand concentrations : assume 2/3rd of excess goes to … … 127 124 zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn ) 128 125 zph = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 129 zoxy = tr n(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 )126 zoxy = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 130 127 ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 131 128 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 ) & … … 137 134 zkph1 = zkph2 / 5. 138 135 ! pass the dfe concentration from PISCES 139 ztfe = tr n(ji,jj,jk,jpfer) * 1e9136 ztfe = trb(ji,jj,jk,jpfer) * 1e9 140 137 ! ---------------------------------------------------------- 141 138 ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION … … 195 192 ! Chemistry is supposed to be fast enough to be at equilibrium 196 193 ! ------------------------------------------------------------ 197 !CDIR NOVERRCHK198 194 DO jk = 1, jpkm1 199 !CDIR NOVERRCHK200 195 DO jj = 1, jpj 201 !CDIR NOVERRCHK202 196 DO ji = 1, jpi 203 197 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 204 198 zkeq = fekeq(ji,jj,jk) 205 199 zfesatur = zTL1(ji,jj,jk) * 1E-9 206 ztfe = tr n(ji,jj,jk,jpfer)200 ztfe = trb(ji,jj,jk,jpfer) 207 201 ! Fe' is the root of a 2nd order polynom 208 202 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & … … 210 204 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 211 205 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 212 zFeL1(ji,jj,jk) = MAX( 0., tr n(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) )206 zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 213 207 END DO 214 208 END DO … … 216 210 ! 217 211 ENDIF 218 212 ! 219 213 zdust = 0. ! if no dust available 220 !CDIR NOVERRCHK 214 ! 221 215 DO jk = 1, jpkm1 222 !CDIR NOVERRCHK223 216 DO jj = 1, jpj 224 !CDIR NOVERRCHK225 217 DO ji = 1, jpi 226 218 zstep = xstep … … 240 232 ENDIF 241 233 #if defined key_kriest 242 ztrc = ( tr n(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6234 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 243 235 #else 244 ztrc = ( tr n(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) + trn(ji,jj,jk,jpcal) + trn(ji,jj,jk,jpgsi) ) * 1.e6236 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 245 237 #endif 246 238 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s … … 251 243 ! to later allocate scavenged iron to the different organic pools 252 244 ! --------------------------------------------------------- 253 zdenom1 = xlam1 * tr n(ji,jj,jk,jppoc) / zlam1b245 zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 254 246 #if ! defined key_kriest 255 zdenom2 = xlam1 * tr n(ji,jj,jk,jpgoc) / zlam1b247 zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 256 248 #endif 257 249 … … 262 254 zlamfac = MIN( 1. , zlamfac ) 263 255 zdep = MIN( 1., 1000. / fsdept(ji,jj,jk) ) 264 zlam1b = xlam1 * MAX( 0.e0, ( tr n(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) )265 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * tr n(ji,jj,jk,jpfer)256 zlam1b = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 257 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer) 266 258 267 259 ! Compute the coagulation of colloidal iron. This parameterization … … 269 261 ! It requires certainly some more work as it is very poorly constrained. 270 262 ! ---------------------------------------------------------------- 271 zlam1a = ( 0.369 * 0.3 * tr n(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) &272 & + ( 114. * 0.3 * tr n(ji,jj,jk,jpdoc) + 5.09E3 * trn(ji,jj,jk,jppoc) )263 zlam1a = ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) & 264 & + ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 273 265 zaggdfea = zlam1a * zstep * zfecoll 274 266 #if defined key_kriest … … 278 270 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 279 271 #else 280 zlam1b = 3.53E3 * tr n(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)272 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 281 273 zaggdfeb = zlam1b * zstep * zfecoll 282 274 ! … … 292 284 ! ---------------------------------------- 293 285 IF( ln_fechem ) THEN 294 biron(:,:,:) = MAX( 0., tr n(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 )286 biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 295 287 ELSE 296 biron(:,:,:) = tr n(:,:,:,jpfer)288 biron(:,:,:) = trb(:,:,:,jpfer) 297 289 ENDIF 298 290 299 291 ! Output of some diagnostics variables 300 292 ! --------------------------------- 301 IF( lk_iomput .AND. jnt == nrdttrc ) THEN293 IF( lk_iomput .AND. knt == nrdttrc ) THEN 302 294 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 303 295 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
- Property svn:keywords set to Id
r5038 r5901 59 59 REAL(wp) :: xconv = 0.01_wp / 3600._wp !: coefficients for conversion 60 60 61 !! * Substitution62 # include " top_substitute.h90"61 !! * Substitutions 62 # include "domzgr_substitute.h90" 63 63 !!---------------------------------------------------------------------- 64 64 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 65 !! $Id : p4zflx.F90 3294 2012-01-28 16:44:18Z rblod$65 !! $Id$ 66 66 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 67 67 !!---------------------------------------------------------------------- 68 68 CONTAINS 69 69 70 SUBROUTINE p4z_flx ( kt )70 SUBROUTINE p4z_flx ( kt, knt ) 71 71 !!--------------------------------------------------------------------- 72 72 !! *** ROUTINE p4z_flx *** … … 81 81 !!--------------------------------------------------------------------- 82 82 ! 83 INTEGER, INTENT(in) :: kt !83 INTEGER, INTENT(in) :: kt, knt ! 84 84 ! 85 85 INTEGER :: ji, jj, jm, iind, iindm1 … … 101 101 ! IS USED TO COMPUTE AIR-SEA FLUX OF CO2 102 102 103 IF( kt /= nit000 ) CALL p4z_patm( kt ) ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs103 IF( kt /= nit000 .AND. knt == 1 ) CALL p4z_patm( kt ) ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 104 104 105 105 IF( ln_co2int ) THEN … … 122 122 123 123 DO jm = 1, 10 124 !CDIR NOVERRCHK125 124 DO jj = 1, jpj 126 !CDIR NOVERRCHK127 125 DO ji = 1, jpi 128 126 … … 130 128 zbot = borat(ji,jj,1) 131 129 zfact = rhop(ji,jj,1) / 1000. + rtrn 132 zdic = tr n(ji,jj,1,jpdic) / zfact130 zdic = trb(ji,jj,1,jpdic) / zfact 133 131 zph = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 134 zalka = tr n(ji,jj,1,jptal) / zfact132 zalka = trb(ji,jj,1,jptal) / zfact 135 133 136 134 ! CALCULATE [ALK]([CO3--], [HCO3-]) … … 155 153 ! ------------------------------------------- 156 154 157 !CDIR NOVERRCHK158 155 DO jj = 1, jpj 159 !CDIR NOVERRCHK160 156 DO ji = 1, jpi 161 157 ztc = MIN( 35., tsn(ji,jj,1,jp_tem) ) … … 184 180 zfld = satmco2(ji,jj) * patm(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) * (m/s) 185 181 zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) ! (mol/L) (m/s) ? 186 oce_co2(ji,jj) = ( zfld - zflu ) * rfact * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000.182 oce_co2(ji,jj) = ( zfld - zflu ) * rfact2 * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 187 183 ! compute the trend 188 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1)184 tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) * rfact2 / fse3t(ji,jj,1) 189 185 190 186 ! Compute O2 flux 191 187 zfld16 = atcox * patm(ji,jj) * chemc(ji,jj,2) * tmask(ji,jj,1) * zkgo2(ji,jj) ! (mol/L) * (m/s) 192 zflu16 = tr n(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj)188 zflu16 = trb(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 193 189 zoflx(ji,jj) = zfld16 - zflu16 194 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) / fse3t(ji,jj,1)190 tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + zoflx(ji,jj) * rfact2 / fse3t(ji,jj,1) 195 191 END DO 196 192 END DO … … 207 203 ENDIF 208 204 209 IF( lk_iomput ) THEN205 IF( lk_iomput .AND. knt == nrdttrc ) THEN 210 206 CALL wrk_alloc( jpi, jpj, zw2d ) 211 207 IF( iom_use( "Cflx" ) ) THEN 212 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) / rfact208 zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 213 209 CALL iom_put( "Cflx" , zw2d ) 214 210 ENDIF … … 226 222 ENDIF 227 223 IF( iom_use( "Dpo2" ) ) THEN 228 zw2d(:,:) = ( atcox * patm(:,:) - tr n(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1)224 zw2d(:,:) = ( atcox * patm(:,:) - trb(:,:,1,jpoxy) / ( chemc(:,:,2) + rtrn ) ) * tmask(:,:,1) 229 225 CALL iom_put( "Dpo2" , zw2d ) 230 226 ENDIF … … 235 231 ELSE 236 232 IF( ln_diatrc ) THEN 237 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) / rfact233 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 238 234 trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1) 239 235 trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1) … … 400 396 401 397 !!====================================================================== 402 END MODULE 398 END MODULE p4zflx -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90
- Property svn:keywords set to Id
r3446 r5901 26 26 !!---------------------------------------------------------------------- 27 27 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 28 !! $Id : p4zint.F90 3294 2012-01-28 16:44:18Z rblod$28 !! $Id$ 29 29 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 30 30 !!---------------------------------------------------------------------- … … 56 56 DO ji = 1, jpi 57 57 DO jj = 1, jpj 58 zvar = tr n(ji,jj,1,jpsil) * trn(ji,jj,1,jpsil)58 zvar = trb(ji,jj,1,jpsil) * trb(ji,jj,1,jpsil) 59 59 xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 ) 60 60 END DO … … 81 81 82 82 !!====================================================================== 83 END MODULE 83 END MODULE p4zint -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r5038 r5901 52 52 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 53 53 REAL(wp) :: xcoef3 = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 54 !!* Substitution 55 # include "top_substitute.h90" 54 56 55 !!---------------------------------------------------------------------- 57 56 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 62 61 CONTAINS 63 62 64 SUBROUTINE p4z_lim( kt, jnt )63 SUBROUTINE p4z_lim( kt, knt ) 65 64 !!--------------------------------------------------------------------- 66 65 !! *** ROUTINE p4z_lim *** … … 72 71 !!--------------------------------------------------------------------- 73 72 ! 74 INTEGER, INTENT(in) :: kt, jnt73 INTEGER, INTENT(in) :: kt, knt 75 74 ! 76 75 INTEGER :: ji, jj, jk 77 76 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 78 77 REAL(wp) :: zconcd, zconcd2, zconcn, zconcn2 79 REAL(wp) :: z1_tr ndia, z1_trnphy, ztem1, ztem2, zetot1, zetot278 REAL(wp) :: z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 80 79 REAL(wp) :: zdenom, zratio, zironmin 81 80 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4 … … 90 89 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 91 90 !------------------------------------- 92 zno3 = tr n(ji,jj,jk,jpno3) / 40.e-691 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 93 92 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 94 93 zferlim = MIN( zferlim, 7e-11 ) 95 tr n(ji,jj,jk,jpfer) = MAX( trn(ji,jj,jk,jpfer), zferlim )94 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 96 95 97 96 ! Computation of a variable Ks for iron on diatoms taking into account 98 97 ! that increasing biomass is made of generally bigger cells 99 98 !------------------------------------------------ 100 zconcd = MAX( 0.e0 , tr n(ji,jj,jk,jpdia) - xsizedia )101 zconcd2 = tr n(ji,jj,jk,jpdia) - zconcd102 zconcn = MAX( 0.e0 , tr n(ji,jj,jk,jpphy) - xsizephy )103 zconcn2 = tr n(ji,jj,jk,jpphy) - zconcn104 z1_tr nphy = 1. / ( trn(ji,jj,jk,jpphy) + rtrn )105 z1_tr ndia = 1. / ( trn(ji,jj,jk,jpdia) + rtrn )106 107 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_tr ndia )108 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_tr ndia )109 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_tr ndia )110 111 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_tr nphy )112 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_tr nphy )113 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_tr nphy )99 zconcd = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 100 zconcd2 = trb(ji,jj,jk,jpdia) - zconcd 101 zconcn = MAX( 0.e0 , trb(ji,jj,jk,jpphy) - xsizephy ) 102 zconcn2 = trb(ji,jj,jk,jpphy) - zconcn 103 z1_trbphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 104 z1_trbdia = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 105 106 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 107 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 108 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 109 110 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 111 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 112 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 114 113 115 114 ! Michaelis-Menten Limitation term for nutrients Small bacteria 116 115 ! ------------------------------------------------------------- 117 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * tr n(ji,jj,jk,jpno3) + concbno3 * trn(ji,jj,jk,jpnh4) )118 xnanono3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * concbnh4 * zdenom119 xnanonh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * concbno3 * zdenom116 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 117 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 118 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * concbno3 * zdenom 120 119 ! 121 120 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 122 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concbnh4 )123 zlim3 = tr n(ji,jj,jk,jpfer) / ( concbfe + trn(ji,jj,jk,jpfer) )124 zlim4 = tr n(ji,jj,jk,jpdoc) / ( xkdoc + trn(ji,jj,jk,jpdoc) )121 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbnh4 ) 122 zlim3 = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 123 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 125 124 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 126 125 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 … … 128 127 ! Michaelis-Menten Limitation term for nutrients Small flagellates 129 128 ! ----------------------------------------------- 130 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * tr n(ji,jj,jk,jpno3) + zconc0n * trn(ji,jj,jk,jpnh4) )131 xnanono3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom132 xnanonh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * zconc0n * zdenom129 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 130 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 131 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc0n * zdenom 133 132 ! 134 133 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 135 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc0nnh4 )136 zratio = tr n(ji,jj,jk,jpnfe) * z1_trnphy137 zironmin = xcoef1 * tr n(ji,jj,jk,jpnch) * z1_trnphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk)134 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 135 zratio = trb(ji,jj,jk,jpnfe) * z1_trbphy 136 zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 138 137 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 139 138 xnanopo4(ji,jj,jk) = zlim2 … … 143 142 ! Michaelis-Menten Limitation term for nutrients Diatoms 144 143 ! ---------------------------------------------- 145 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * tr n(ji,jj,jk,jpno3) + zconc1d * trn(ji,jj,jk,jpnh4) )146 xdiatno3(ji,jj,jk) = tr n(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom147 xdiatnh4(ji,jj,jk) = tr n(ji,jj,jk,jpnh4) * zconc1d * zdenom144 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 145 xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 146 xdiatnh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc1d * zdenom 148 147 ! 149 148 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 150 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + zconc1dnh4 )151 zlim3 = tr n(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi(ji,jj) )152 zratio = tr n(ji,jj,jk,jpdfe) * z1_trndia153 zironmin = xcoef1 * tr n(ji,jj,jk,jpdch) * z1_trndia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk)149 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc1dnh4 ) 150 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 151 zratio = trb(ji,jj,jk,jpdfe) * z1_trbdia 152 zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 154 153 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 155 154 xdiatpo4(ji,jj,jk) = zlim2 … … 166 165 DO jj = 1, jpj 167 166 DO ji = 1, jpi 168 zlim1 = ( tr n(ji,jj,jk,jpno3) * concnnh4 + trn(ji,jj,jk,jpnh4) * concnno3 ) &169 & / ( concnno3 * concnnh4 + concnnh4 * tr n(ji,jj,jk,jpno3) + concnno3 * trn(ji,jj,jk,jpnh4) )170 zlim2 = tr n(ji,jj,jk,jppo4) / ( trn(ji,jj,jk,jppo4) + concnnh4 )171 zlim3 = tr n(ji,jj,jk,jpfer) / ( trn(ji,jj,jk,jpfer) + 5.E-11 )167 zlim1 = ( trb(ji,jj,jk,jpno3) * concnnh4 + trb(ji,jj,jk,jpnh4) * concnno3 ) & 168 & / ( concnno3 * concnnh4 + concnnh4 * trb(ji,jj,jk,jpno3) + concnno3 * trb(ji,jj,jk,jpnh4) ) 169 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnnh4 ) 170 zlim3 = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) + 5.E-11 ) 172 171 ztem1 = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 173 172 ztem2 = tsn(ji,jj,jk,jp_tem) - 10. 174 zetot1 = MAX( 0., etot (ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) )175 zetot2 = 30. / ( 30. + etot (ji,jj,jk) )173 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) 174 zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) ) 176 175 177 176 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 178 177 & * ztem1 / ( 0.1 + ztem1 ) & 179 & * MAX( 1., tr n(ji,jj,jk,jpphy) * 1.e6 / 2. ) &178 & * MAX( 1., trb(ji,jj,jk,jpphy) * 1.e6 / 2. ) & 180 179 & * zetot1 * zetot2 & 181 180 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & … … 188 187 ! 189 188 ! 190 IF( lk_iomput .AND. jnt == nrdttrc ) THEN ! save output diagnostics189 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics 191 190 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht 192 191 IF( iom_use( "LNnut" ) ) CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term … … 265 264 266 265 !!====================================================================== 267 END MODULE 266 END MODULE p4zlim -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r5038 r5901 48 48 CONTAINS 49 49 50 SUBROUTINE p4z_lys( kt )50 SUBROUTINE p4z_lys( kt, knt ) 51 51 !!--------------------------------------------------------------------- 52 52 !! *** ROUTINE p4z_lys *** … … 59 59 !!--------------------------------------------------------------------- 60 60 ! 61 INTEGER, INTENT(in) :: kt ! ocean time step61 INTEGER, INTENT(in) :: kt, knt ! ocean time step 62 62 INTEGER :: ji, jj, jk, jn 63 63 REAL(wp) :: zalk, zdic, zph, zah2 64 64 REAL(wp) :: zdispot, zfact, zcalcon, zalka, zaldi 65 65 REAL(wp) :: zomegaca, zexcess, zexcess0 66 REAL(wp) :: zrfact267 66 CHARACTER (len=25) :: charout 68 67 REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss … … 81 80 DO jn = 1, 5 ! BEGIN OF ITERATION 82 81 ! 83 !CDIR NOVERRCHK84 82 DO jk = 1, jpkm1 85 !CDIR NOVERRCHK86 83 DO jj = 1, jpj 87 !CDIR NOVERRCHK88 84 DO ji = 1, jpi 89 85 zfact = rhop(ji,jj,jk) / 1000. + rtrn 90 86 zph = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 91 zdic = tr n(ji,jj,jk,jpdic) / zfact92 zalka = tr n(ji,jj,jk,jptal) / zfact87 zdic = trb(ji,jj,jk,jpdic) / zfact 88 zalka = trb(ji,jj,jk,jptal) / zfact 93 89 ! CALCULATE [ALK]([CO3--], [HCO3-]) 94 90 zalk = zalka - ( akw3(ji,jj,jk) / zph - zph + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) … … 130 126 ! (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 131 127 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 132 zdispot = kdca * zexcess * tr n(ji,jj,jk,jpcal)128 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 133 129 # if defined key_degrad 134 130 zdispot = zdispot * facvol(ji,jj,jk) … … 136 132 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 137 133 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 138 zcaldiss(ji,jj,jk) = zdispot / rmtss! calcite dissolution139 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) * rfact134 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution 135 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 140 136 ! 141 137 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) … … 147 143 ! 148 144 149 IF( lk_iomput ) THEN145 IF( lk_iomput .AND. knt == nrdttrc ) THEN 150 146 IF( iom_use( "PH" ) ) CALL iom_put( "PH" , -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) ) 151 147 IF( iom_use( "CO3" ) ) CALL iom_put( "CO3" , zco3(:,:,:) * 1.e+3 * tmask(:,:,:) ) 152 148 IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", aksp(:,:,:) * 1.e+3 / calcon * tmask(:,:,:) ) 153 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) )149 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 154 150 ELSE 155 151 trc3d(:,:,:,jp_pcs0_3d ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) … … 224 220 #endif 225 221 !!====================================================================== 226 END MODULE 222 END MODULE p4zlys -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r5038 r5901 50 50 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 51 51 52 !!* Substitution53 # include "top_substitute.h90"54 52 !!---------------------------------------------------------------------- 55 53 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 60 58 CONTAINS 61 59 62 SUBROUTINE p4z_meso( kt, jnt )60 SUBROUTINE p4z_meso( kt, knt ) 63 61 !!--------------------------------------------------------------------- 64 62 !! *** ROUTINE p4z_meso *** … … 68 66 !! ** Method : - ??? 69 67 !!--------------------------------------------------------------------- 70 INTEGER, INTENT(in) :: kt, jnt ! ocean time step68 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 69 INTEGER :: ji, jj, jk 72 70 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam … … 97 95 DO jj = 1, jpj 98 96 DO ji = 1, jpi 99 zcompam = MAX( ( tr n(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 )97 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 100 98 # if defined key_degrad 101 99 zstep = xstep * facvol(ji,jj,jk) … … 107 105 ! Respiration rates of both zooplankton 108 106 ! ------------------------------------- 109 zrespz2 = resrat2 * zfact * tr n(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) ) &107 zrespz2 = resrat2 * zfact * trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 110 108 & + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 111 109 … … 113 111 ! no real reason except that it seems to be more stable and may mimic predation 114 112 ! --------------------------------------------------------------- 115 ztortz2 = mzrat2 * 1.e6 * zfact * tr n(ji,jj,jk,jpmes)113 ztortz2 = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 116 114 ! 117 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 )118 zcompaz = MAX( ( tr n(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 )115 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 116 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 119 117 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 120 118 ! it is to predation by mesozooplankton 121 119 ! ------------------------------------------------------------------------------- 122 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) &120 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 123 121 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 124 zcompapoc = MAX( ( tr n(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 )122 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 125 123 126 124 zfood = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc … … 128 126 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 129 127 zdenom2 = zdenom / ( zfood + rtrn ) 130 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpmes)128 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 131 129 132 130 zgrazd = zgraze2 * xprefc * zcompadi * zdenom2 … … 135 133 zgrazpoc = zgraze2 * xprefpoc * zcompapoc * zdenom2 136 134 137 zgraznf = zgrazn * tr n(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn)138 zgrazf = zgrazd * tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn)139 zgrazpof = zgrazpoc * tr n(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn)135 zgraznf = zgrazn * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 136 zgrazf = zgrazd * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 137 zgrazpof = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 140 138 141 139 ! Mesozooplankton flux feeding on GOC … … 144 142 # if ! defined key_kriest 145 143 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 146 & * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)147 zgrazfffg = zgrazffeg * tr n(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)144 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 145 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 148 146 # endif 149 147 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 150 & * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes)151 zgrazfffp = zgrazffep * tr n(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)148 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 149 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 152 150 ! 153 151 # if ! defined key_kriest … … 158 156 ! diatoms based aggregates are more prone to fractionation 159 157 ! since they are more porous (marine snow instead of fecal pellets) 160 zratio = tr n(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn )158 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 161 159 zratio2 = zratio * zratio 162 160 zfrac = zproport * grazflux * zstep * wsbio4(ji,jj,jk) & 163 & * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) &161 & * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 164 162 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 165 zfracfe = zfrac * tr n(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn)163 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 166 164 167 165 zgrazffep = zproport * zgrazffep … … 215 213 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 216 214 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn 217 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * tr n(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpphy) + rtrn )218 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * tr n(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn )219 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )220 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )215 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 216 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 217 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 218 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 221 219 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 222 220 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf … … 231 229 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 232 230 #if defined key_kriest 233 znumpoc = tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )231 znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 234 232 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 235 233 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso & … … 248 246 END DO 249 247 ! 250 IF( lk_iomput .AND. jnt == nrdttrc ) THEN248 IF( lk_iomput .AND. knt == nrdttrc ) THEN 251 249 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 252 250 IF( iom_use( "GRAZ2" ) ) THEN … … 340 338 341 339 !!====================================================================== 342 END MODULE 340 END MODULE p4zmeso -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r5038 r5901 49 49 50 50 51 !!* Substitution52 # include "top_substitute.h90"53 51 !!---------------------------------------------------------------------- 54 52 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 59 57 CONTAINS 60 58 61 SUBROUTINE p4z_micro( kt, jnt )59 SUBROUTINE p4z_micro( kt, knt ) 62 60 !!--------------------------------------------------------------------- 63 61 !! *** ROUTINE p4z_micro *** … … 68 66 !!--------------------------------------------------------------------- 69 67 INTEGER, INTENT(in) :: kt ! ocean time step 70 INTEGER, INTENT(in) :: jnt68 INTEGER, INTENT(in) :: knt 71 69 ! 72 70 INTEGER :: ji, jj, jk … … 90 88 DO jj = 1, jpj 91 89 DO ji = 1, jpi 92 zcompaz = MAX( ( tr n(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 )90 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 93 91 zstep = xstep 94 92 # if defined key_degrad … … 99 97 ! Respiration rates of both zooplankton 100 98 ! ------------------------------------- 101 zrespz = resrat * zfact * tr n(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) ) &99 zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) ) & 102 100 & + resrat * zfact * 3. * nitrfac(ji,jj,jk) 103 101 … … 105 103 ! no real reason except that it seems to be more stable and may mimic predation. 106 104 ! --------------------------------------------------------------- 107 ztortz = mzrat * 1.e6 * zfact * tr n(ji,jj,jk,jpzoo)108 109 zcompadi = MIN( MAX( ( tr n(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia )110 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 )111 zcompapoc = MAX( ( tr n(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 )105 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 106 107 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 108 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 109 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 112 110 113 111 ! Microzooplankton grazing … … 117 115 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 118 116 zdenom2 = zdenom / ( zfood + rtrn ) 119 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpzoo)117 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 120 118 121 119 zgrazp = zgraze * xpref2p * zcompaph * zdenom2 … … 123 121 zgrazsd = zgraze * xpref2d * zcompadi * zdenom2 124 122 125 zgrazpf = zgrazp * tr n(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn)126 zgrazmf = zgrazm * tr n(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn)127 zgrazsf = zgrazsd * tr n(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn)123 zgrazpf = zgrazp * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 124 zgrazmf = zgrazm * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 125 zgrazsf = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 128 126 ! 129 127 zgraztot = zgrazp + zgrazm + zgrazsd … … 165 163 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 166 164 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 167 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * tr n(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn)168 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * tr n(ji,jj,jk,jpdch)/(trn(ji,jj,jk,jpdia)+rtrn)169 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * tr n(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn)170 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * tr n(ji,jj,jk,jpdsi)/(trn(ji,jj,jk,jpdia)+rtrn)165 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 166 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 167 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 168 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 171 169 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 172 170 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf … … 184 182 #if defined key_kriest 185 183 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro & 186 - zgrazm * tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )184 - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 187 185 #endif 188 186 END DO … … 190 188 END DO 191 189 ! 192 IF( lk_iomput .AND. jnt == nrdttrc ) THEN190 IF( lk_iomput .AND. knt == nrdttrc ) THEN 193 191 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 194 192 IF( iom_use( "GRAZ1" ) ) THEN … … 273 271 274 272 !!====================================================================== 275 END MODULE 273 END MODULE p4zmicro -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
- Property svn:keywords set to Id
r5038 r5901 35 35 36 36 37 !!* Substitution38 # include "top_substitute.h90"39 37 !!---------------------------------------------------------------------- 40 38 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 41 !! $Id : p4zmort.F90 3160 2011-11-20 14:27:18Z cetlod$39 !! $Id$ 42 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 43 41 !!---------------------------------------------------------------------- … … 85 83 DO jj = 1, jpj 86 84 DO ji = 1, jpi 87 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 )85 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 88 86 zstep = xstep 89 87 # if defined key_degrad … … 94 92 ! due to turbulence is negligible. Mortality is also set 95 93 ! to 0 96 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * tr n(ji,jj,jk,jpphy)94 zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 97 95 ! Squared mortality of Phyto similar to a sedimentation term during 98 96 ! blooms (Doney et al. 1996) … … 102 100 ! increased when nutrients are limiting phytoplankton growth 103 101 ! as observed for instance in case of iron limitation. 104 ztortp = mprat * xstep * zcompaph / ( xkmort + tr n(ji,jj,jk,jpphy) ) * zsizerat102 ztortp = mprat * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 105 103 106 104 zmortp = zrespp + ztortp … … 108 106 ! Update the arrays TRA which contains the biological sources and sinks 109 107 110 zfactfe = tr n(ji,jj,jk,jpnfe)/(trn(ji,jj,jk,jpphy)+rtrn)111 zfactch = tr n(ji,jj,jk,jpnch)/(trn(ji,jj,jk,jpphy)+rtrn)108 zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn) 109 zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 112 110 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zmortp 113 111 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch … … 172 170 DO ji = 1, jpi 173 171 174 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - 1e-9), 0. )172 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1e-9), 0. ) 175 173 176 174 ! Aggregation term for diatoms is increased in case of nutrient … … 186 184 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 187 185 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 188 zrespp2 = 1.e6 * zstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * tr n(ji,jj,jk,jpdia)186 zrespp2 = 1.e6 * zstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 189 187 190 188 ! Phytoplankton mortality. 191 189 ! ------------------------ 192 ztortp2 = mprat2 * zstep * tr n(ji,jj,jk,jpdia) / ( xkmort + trn(ji,jj,jk,jpdia) ) * zcompadi190 ztortp2 = mprat2 * zstep * trb(ji,jj,jk,jpdia) / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi 193 191 194 192 zmortp2 = zrespp2 + ztortp2 … … 196 194 ! Update the arrays tra which contains the biological sources and sinks 197 195 ! --------------------------------------------------------------------- 198 zfactch = tr n(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn )199 zfactfe = tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )200 zfactsi = tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )196 zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 197 zfactfe = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 198 zfactsi = trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 201 199 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zmortp2 202 200 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zmortp2 * zfactch … … 277 275 278 276 !!====================================================================== 279 END MODULE 277 END MODULE p4zmort -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r5038 r5901 35 35 REAL(wp) :: parlux !: Fraction of shortwave as PAR 36 36 REAL(wp) :: xparsw !: parlux/3 37 REAL(wp) :: xsi0r !: 1. /rn_si0 37 38 38 39 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_par ! structure of input par … … 42 43 43 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat !: PAR for phyto, nano and diat 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy !: PAR over 24h in case of diurnal cycle 44 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr !: wavelength (Red-Green-Blue) 45 48 46 49 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m) … … 48 51 REAL(wp), DIMENSION(3,61), PUBLIC :: xkrgb !: tabulated attenuation coefficients for RGB absorption 49 52 50 !! * Substitution51 # include " top_substitute.h90"53 !! * Substitutions 54 # include "domzgr_substitute.h90" 52 55 !!---------------------------------------------------------------------- 53 56 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 57 60 CONTAINS 58 61 59 SUBROUTINE p4z_opt( kt, jnt )62 SUBROUTINE p4z_opt( kt, knt ) 60 63 !!--------------------------------------------------------------------- 61 64 !! *** ROUTINE p4z_opt *** … … 67 70 !!--------------------------------------------------------------------- 68 71 ! 69 INTEGER, INTENT(in) :: kt, jnt ! ocean time step72 INTEGER, INTENT(in) :: kt, knt ! ocean time step 70 73 ! 71 74 INTEGER :: ji, jj, jk 72 75 INTEGER :: irgb 73 REAL(wp) :: zchl , zxsi0r76 REAL(wp) :: zchl 74 77 REAL(wp) :: zc0 , zc1 , zc2, zc3, z1_dep 75 REAL(wp), POINTER, DIMENSION(:,: ) :: zdepmoy, zetmp , zetmp1, zetmp276 REAL(wp), POINTER, DIMENSION(:,:,:) :: z ekg, zekr, zekb, ze0, ze1, ze2, ze378 REAL(wp), POINTER, DIMENSION(:,: ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4, zqsr100 79 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 77 80 !!--------------------------------------------------------------------- 78 81 ! … … 80 83 ! 81 84 ! Allocate temporary workspace 82 CALL wrk_alloc( jpi, jpj, z depmoy, zetmp, zetmp1, zetmp2 )83 CALL wrk_alloc( jpi, jpj, jpk, z ekg, zekr, zekb, ze0, ze1, ze2, ze3 )84 85 IF( jnt == 1 .AND. ln_varpar ) CALL p4z_optsbc( kt )85 CALL wrk_alloc( jpi, jpj, zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 86 CALL wrk_alloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 87 88 IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 86 89 87 90 ! Initialisation of variables used to compute PAR 88 91 ! ----------------------------------------------- 89 ze1(:,:,jpk) = 0._wp 90 ze2(:,:,jpk) = 0._wp 91 ze3(:,:,jpk) = 0._wp 92 92 ze1(:,:,:) = 0._wp 93 ze2(:,:,:) = 0._wp 94 ze3(:,:,:) = 0._wp 93 95 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 94 96 DO jk = 1, jpkm1 ! -------------------------------------------------------- 95 !CDIR NOVERRCHK96 97 DO jj = 1, jpj 97 !CDIR NOVERRCHK98 98 DO ji = 1, jpi 99 zchl = ( tr n(ji,jj,jk,jpnch) + trn(ji,jj,jk,jpdch) + rtrn ) * 1.e699 zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 100 100 zchl = MIN( 10. , MAX( 0.05, zchl ) ) 101 101 irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 102 102 ! 103 zekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk)104 zekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk)105 zekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk)103 ekb(ji,jj,jk) = xkrgb(1,irgb) * fse3t(ji,jj,jk) 104 ekg(ji,jj,jk) = xkrgb(2,irgb) * fse3t(ji,jj,jk) 105 ekr(ji,jj,jk) = xkrgb(3,irgb) * fse3t(ji,jj,jk) 106 106 END DO 107 107 END DO 108 108 END DO 109 110 111 109 ! !* Photosynthetically Available Radiation (PAR) 112 110 ! ! -------------------------------------- 113 114 IF( ln_varpar ) THEN 115 ze1(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 116 ze2(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 117 ze3(:,:,1) = par_varsw(:,:) * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 111 IF( l_trcdm2dc ) THEN ! diurnal cycle 112 ! 1% of qsr to compute euphotic layer 113 zqsr100(:,:) = 0.01 * qsr_mean(:,:) ! daily mean qsr 114 ! 115 CALL p4z_opt_par( kt, qsr_mean, ze1, ze2, ze3 ) 116 ! 117 DO jk = 1, nksrp 118 etot_ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 119 enano (:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 120 ediat (:,:,jk) = 1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 121 END DO 122 ! 123 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 ) 124 ! 125 DO jk = 1, nksrp 126 etot(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 127 END DO 128 ! 118 129 ELSE 119 ze1(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekb(:,:,1) ) 120 ze2(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekg(:,:,1) ) 121 ze3(:,:,1) = xparsw * qsr(:,:) * EXP( -0.5 * zekr(:,:,1) ) 122 ENDIF 123 124 !CDIR NOVERRCHK 125 DO jj = 1, jpj 126 !CDIR NOVERRCHK 127 DO ji = 1, jpi 128 zc1 = ze1(ji,jj,1) 129 zc2 = ze2(ji,jj,1) 130 zc3 = ze3(ji,jj,1) 131 etot (ji,jj,1) = ( zc1 + zc2 + zc3 ) 132 enano(ji,jj,1) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 133 ediat(ji,jj,1) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 134 END DO 135 END DO 136 137 138 DO jk = 2, nksrp 139 !CDIR NOVERRCHK 140 DO jj = 1, jpj 141 !CDIR NOVERRCHK 142 DO ji = 1, jpi 143 zc1 = ze1(ji,jj,jk-1) * EXP( -0.5 * ( zekb(ji,jj,jk-1) + zekb(ji,jj,jk) ) ) 144 zc2 = ze2(ji,jj,jk-1) * EXP( -0.5 * ( zekg(ji,jj,jk-1) + zekg(ji,jj,jk) ) ) 145 zc3 = ze3(ji,jj,jk-1) * EXP( -0.5 * ( zekr(ji,jj,jk-1) + zekr(ji,jj,jk) ) ) 146 ze1 (ji,jj,jk) = zc1 147 ze2 (ji,jj,jk) = zc2 148 ze3 (ji,jj,jk) = zc3 149 etot (ji,jj,jk) = ( zc1 + zc2 + zc3 ) 150 enano(ji,jj,jk) = ( 2.1 * zc1 + 0.42 * zc2 + 0.4 * zc3 ) 151 ediat(ji,jj,jk) = ( 1.6 * zc1 + 0.69 * zc2 + 0.7 * zc3 ) 152 END DO 153 END DO 154 END DO 130 ! 1% of qsr to compute euphotic layer 131 zqsr100(:,:) = 0.01 * qsr(:,:) 132 ! 133 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3 ) 134 ! 135 DO jk = 1, nksrp 136 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 137 enano(:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 138 ediat(:,:,jk) = 1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 139 END DO 140 etot_ndcy(:,:,:) = etot(:,:,:) 141 ENDIF 142 155 143 156 144 IF( ln_qsr_bio ) THEN !* heat flux accros w-level (used in the dynamics) 157 145 ! ! ------------------------ 158 zxsi0r = 1.e0 / rn_si0 159 ! 160 ze0(:,:,1) = rn_abs * qsr(:,:) 161 ! ! surface value : separation in R-G-B + near surface 162 IF( ln_varpar ) THEN 163 ze0(:,:,1) = ( 1. - 3. * par_varsw(:,:) ) * qsr(:,:) 164 ze1(:,:,1) = par_varsw(:,:) * qsr(:,:) 165 ze2(:,:,1) = par_varsw(:,:) * qsr(:,:) 166 ze3(:,:,1) = par_varsw(:,:) * qsr(:,:) 167 ELSE 168 ze0(:,:,1) = ( 1. - 3. * xparsw ) * qsr(:,:) 169 ze1(:,:,1) = xparsw * qsr(:,:) 170 ze2(:,:,1) = xparsw * qsr(:,:) 171 ze3(:,:,1) = xparsw * qsr(:,:) 172 ENDIF 146 CALL p4z_opt_par( kt, qsr, ze1, ze2, ze3, pe0=ze0 ) 147 ! 173 148 etot3(:,:,1) = qsr(:,:) * tmask(:,:,1) 174 !175 !176 149 DO jk = 2, nksrp + 1 177 !CDIR NOVERRCHK 178 DO jj = 1, jpj 179 !CDIR NOVERRCHK 180 DO ji = 1, jpi 181 zc0 = ze0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * zxsi0r ) 182 zc1 = ze1(ji,jj,jk-1) * EXP( -zekb(ji,jj,jk-1 ) ) 183 zc2 = ze2(ji,jj,jk-1) * EXP( -zekg(ji,jj,jk-1 ) ) 184 zc3 = ze3(ji,jj,jk-1) * EXP( -zekr(ji,jj,jk-1 ) ) 185 ze0(ji,jj,jk) = zc0 186 ze1(ji,jj,jk) = zc1 187 ze2(ji,jj,jk) = zc2 188 ze3(ji,jj,jk) = zc3 189 etot3(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * tmask(ji,jj,jk) 190 END DO 191 ! 192 END DO 193 ! 194 END DO 195 ! 196 ENDIF 197 150 etot3(:,:,jk) = ( ze0(:,:,jk) + ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) ) * tmask(:,:,jk) 151 END DO 152 ! ! ------------------------ 153 ENDIF 198 154 ! !* Euphotic depth and level 199 155 neln(:,:) = 1 ! ------------------------ … … 203 159 DO jj = 1, jpj 204 160 DO ji = 1, jpi 205 IF( etot (ji,jj,jk) * tmask(ji,jj,jk) >= 0.0043 * qsr(ji,jj) ) THEN161 IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.43 * zqsr100(ji,jj) ) THEN 206 162 neln(ji,jj) = jk+1 ! Euphotic level : 1rst T-level strictly below Euphotic layer 207 ! ! nb: ensure the compatibility with nmld_trc definition in trd_m xl_trc_zint163 ! ! nb: ensure the compatibility with nmld_trc definition in trd_mld_trc_zint 208 164 heup(ji,jj) = fsdepw(ji,jj,jk+1) ! Euphotic layer depth 209 165 ENDIF … … 211 167 END DO 212 168 END DO 213 169 ! 214 170 heup(:,:) = MIN( 300., heup(:,:) ) 215 216 171 ! !* mean light over the mixed layer 217 172 zdepmoy(:,:) = 0.e0 ! ------------------------------- 218 zetmp (:,:) = 0.e0219 173 zetmp1 (:,:) = 0.e0 220 174 zetmp2 (:,:) = 0.e0 175 zetmp3 (:,:) = 0.e0 176 zetmp4 (:,:) = 0.e0 221 177 222 178 DO jk = 1, nksrp 223 !CDIR NOVERRCHK224 179 DO jj = 1, jpj 225 !CDIR NOVERRCHK226 180 DO ji = 1, jpi 227 181 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 228 zetmp (ji,jj) = zetmp (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) 229 zetmp1 (ji,jj) = zetmp1 (ji,jj) + enano(ji,jj,jk) * fse3t(ji,jj,jk) 230 zetmp2 (ji,jj) = zetmp2 (ji,jj) + ediat(ji,jj,jk) * fse3t(ji,jj,jk) 182 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * fse3t(ji,jj,jk) ! remineralisation 183 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * fse3t(ji,jj,jk) ! production 184 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * fse3t(ji,jj,jk) ! production 185 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * fse3t(ji,jj,jk) ! production 231 186 zdepmoy(ji,jj) = zdepmoy(ji,jj) + fse3t(ji,jj,jk) 232 187 ENDIF … … 235 190 END DO 236 191 ! 237 emoy(:,:,:) = etot(:,:,:) 192 emoy(:,:,:) = etot(:,:,:) ! remineralisation 193 zpar(:,:,:) = etot_ndcy(:,:,:) ! diagnostic : PAR with no diurnal cycle 238 194 ! 239 195 DO jk = 1, nksrp 240 !CDIR NOVERRCHK241 196 DO jj = 1, jpj 242 !CDIR NOVERRCHK243 197 DO ji = 1, jpi 244 198 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 245 199 z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 246 emoy (ji,jj,jk) = zetmp (ji,jj) * z1_dep 247 enano(ji,jj,jk) = zetmp1(ji,jj) * z1_dep 248 ediat(ji,jj,jk) = zetmp2(ji,jj) * z1_dep 200 emoy (ji,jj,jk) = zetmp1(ji,jj) * z1_dep 201 zpar (ji,jj,jk) = zetmp2(ji,jj) * z1_dep 202 enano(ji,jj,jk) = zetmp3(ji,jj) * z1_dep 203 ediat(ji,jj,jk) = zetmp4(ji,jj) * z1_dep 249 204 ENDIF 250 205 END DO 251 206 END DO 252 207 END DO 253 208 ! 254 209 IF( lk_iomput ) THEN 255 IF( jnt == nrdttrc ) THEN 256 IF( iom_use( "Heup" ) ) CALL iom_put( "Heup", heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht 257 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 210 IF( knt == nrdttrc ) THEN 211 IF( iom_use( "Heup" ) ) CALL iom_put( "Heup" , heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht 212 IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", zpar(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 213 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 258 214 ENDIF 259 215 ELSE 260 216 IF( ln_diatrc ) THEN ! save output diagnostics 261 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1) 217 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1) 262 218 trc3d(:,:,:,jp_pcs0_3d + 3) = etot(:,:,:) * tmask(:,:,:) 263 219 ENDIF 264 220 ENDIF 265 221 ! 266 CALL wrk_dealloc( jpi, jpj, z depmoy, zetmp, zetmp1, zetmp2)267 CALL wrk_dealloc( jpi, jpj, jpk, z ekg, zekr, zekb,ze0, ze1, ze2, ze3 )222 CALL wrk_dealloc( jpi, jpj, zqsr100, zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 223 CALL wrk_dealloc( jpi, jpj, jpk, zpar, ze0, ze1, ze2, ze3 ) 268 224 ! 269 225 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt') … … 271 227 END SUBROUTINE p4z_opt 272 228 273 SUBROUTINE p4z_optsbc( kt ) 274 !!---------------------------------------------------------------------- 275 !! *** routine p4z_optsbc *** 229 SUBROUTINE p4z_opt_par( kt, pqsr, pe1, pe2, pe3, pe0 ) 230 !!---------------------------------------------------------------------- 231 !! *** routine p4z_opt_par *** 232 !! 233 !! ** purpose : compute PAR of each wavelength (Red-Green-Blue) 234 !! for a given shortwave radiation 235 !! 236 !!---------------------------------------------------------------------- 237 !! * arguments 238 INTEGER, INTENT(in) :: kt ! ocean time-step 239 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: pqsr ! shortwave 240 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe1 , pe2 , pe3 ! PAR ( R-G-B) 241 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL :: pe0 242 !! * local variables 243 INTEGER :: ji, jj, jk ! dummy loop indices 244 REAL(wp), DIMENSION(jpi,jpj) :: zqsr ! shortwave 245 !!---------------------------------------------------------------------- 246 247 ! Real shortwave 248 IF( ln_varpar ) THEN ; zqsr(:,:) = par_varsw(:,:) * pqsr(:,:) 249 ELSE ; zqsr(:,:) = xparsw * pqsr(:,:) 250 ENDIF 251 ! 252 IF( PRESENT( pe0 ) ) THEN ! W-level 253 ! 254 pe0(:,:,1) = pqsr(:,:) - 3. * zqsr(:,:) ! ( 1 - 3 * alpha ) * q 255 pe1(:,:,1) = zqsr(:,:) 256 pe2(:,:,1) = zqsr(:,:) 257 pe3(:,:,1) = zqsr(:,:) 258 ! 259 DO jk = 2, nksrp + 1 260 DO jj = 1, jpj 261 DO ji = 1, jpi 262 pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -fse3t(ji,jj,jk-1) * xsi0r ) 263 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb(ji,jj,jk-1 ) ) 264 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg(ji,jj,jk-1 ) ) 265 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr(ji,jj,jk-1 ) ) 266 END DO 267 ! 268 END DO 269 ! 270 END DO 271 ! 272 ELSE ! T- level 273 ! 274 pe1(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekb(:,:,1) ) 275 pe2(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekg(:,:,1) ) 276 pe3(:,:,1) = zqsr(:,:) * EXP( -0.5 * ekr(:,:,1) ) 277 ! 278 DO jk = 2, nksrp 279 DO jj = 1, jpj 280 DO ji = 1, jpi 281 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -0.5 * ( ekb(ji,jj,jk-1) + ekb(ji,jj,jk) ) ) 282 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -0.5 * ( ekg(ji,jj,jk-1) + ekg(ji,jj,jk) ) ) 283 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -0.5 * ( ekr(ji,jj,jk-1) + ekr(ji,jj,jk) ) ) 284 END DO 285 END DO 286 END DO 287 ! 288 ENDIF 289 ! 290 END SUBROUTINE p4z_opt_par 291 292 293 SUBROUTINE p4z_opt_sbc( kt ) 294 !!---------------------------------------------------------------------- 295 !! *** routine p4z_opt_sbc *** 276 296 !! 277 297 !! ** purpose : read and interpolate the variable PAR fraction … … 284 304 !!---------------------------------------------------------------------- 285 305 !! * arguments 286 INTEGER , INTENT( in ) :: kt! ocean time step306 INTEGER , INTENT(in) :: kt ! ocean time step 287 307 288 308 !! * local declarations … … 297 317 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_par > 1 ) ) THEN 298 318 CALL fld_read( kt, 1, sf_par ) 299 par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) /3.0319 par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) / 3.0 300 320 ENDIF 301 321 ENDIF … … 303 323 IF( nn_timing == 1 ) CALL timing_stop('p4z_optsbc') 304 324 ! 305 END SUBROUTINE p4z_opt sbc325 END SUBROUTINE p4z_opt_sbc 306 326 307 327 SUBROUTINE p4z_opt_init … … 347 367 ! 348 368 xparsw = parlux / 3.0 369 xsi0r = 1.e0 / rn_si0 349 370 ! 350 371 ! Variable PAR at the surface of the ocean … … 372 393 IF(lwp) WRITE(numout,*) ' level of light extinction = ', nksrp, ' ref depth = ', gdepw_1d(nksrp+1), ' m' 373 394 ! 374 etot (:,:,:) = 0._wp 375 enano(:,:,:) = 0._wp 376 ediat(:,:,:) = 0._wp 377 IF( ln_qsr_bio ) etot3(:,:,:) = 0._wp 395 ekr (:,:,:) = 0._wp 396 ekb (:,:,:) = 0._wp 397 ekg (:,:,:) = 0._wp 398 etot (:,:,:) = 0._wp 399 etot_ndcy(:,:,:) = 0._wp 400 enano (:,:,:) = 0._wp 401 ediat (:,:,:) = 0._wp 402 IF( ln_qsr_bio ) etot3 (:,:,:) = 0._wp 378 403 ! 379 404 IF( nn_timing == 1 ) CALL timing_stop('p4z_opt_init') … … 386 411 !! *** ROUTINE p4z_opt_alloc *** 387 412 !!---------------------------------------------------------------------- 388 ALLOCATE( enano(jpi,jpj,jpk), ediat(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 413 ALLOCATE( ekb(jpi,jpj,jpk) , ekr(jpi,jpj,jpk), ekg(jpi,jpj,jpk), & 414 & enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk), & 415 & etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 389 416 ! 390 417 IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') … … 402 429 403 430 !!====================================================================== 404 END MODULE 431 END MODULE p4zopt -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r5038 r5901 54 54 REAL(wp) :: texcret2 !: 1 - excret2 55 55 56 57 !!* Substitution 58 # include "top_substitute.h90" 56 !! * Substitutions 57 # include "domzgr_substitute.h90" 59 58 !!---------------------------------------------------------------------- 60 59 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 64 63 CONTAINS 65 64 66 SUBROUTINE p4z_prod( kt , jnt )65 SUBROUTINE p4z_prod( kt , knt ) 67 66 !!--------------------------------------------------------------------- 68 67 !! *** ROUTINE p4z_prod *** … … 74 73 !!--------------------------------------------------------------------- 75 74 ! 76 INTEGER, INTENT(in) :: kt, jnt75 INTEGER, INTENT(in) :: kt, knt 77 76 ! 78 77 INTEGER :: ji, jj, jk … … 129 128 END DO 130 129 131 IF( ln_newprod ) THEN 132 ! Impact of the day duration on phytoplankton growth 133 DO jk = 1, jpkm1 134 DO jj = 1 ,jpj 135 DO ji = 1, jpi 136 IF( etot(ji,jj,jk) > 1.E-3 ) THEN 137 zval = MAX( 1., zstrn(ji,jj) ) 138 zval = 1.5 * zval / ( 12. + zval ) 139 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 140 zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 141 ENDIF 142 END DO 143 END DO 144 END DO 145 ENDIF 130 ! Impact of the day duration on phytoplankton growth 131 DO jk = 1, jpkm1 132 DO jj = 1 ,jpj 133 DO ji = 1, jpi 134 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 135 zval = MAX( 1., zstrn(ji,jj) ) 136 zval = 1.5 * zval / ( 12. + zval ) 137 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval 138 zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 139 ENDIF 140 END DO 141 END DO 142 END DO 146 143 147 144 ! Maximum light intensity … … 150 147 151 148 IF( ln_newprod ) THEN 152 !CDIR NOVERRCHK153 149 DO jk = 1, jpkm1 154 !CDIR NOVERRCHK155 150 DO jj = 1, jpj 156 !CDIR NOVERRCHK157 151 DO ji = 1, jpi 158 152 ! Computation of the P-I slope for nanos and diatoms 159 IF( etot (ji,jj,jk) > 1.E-3 ) THEN153 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 160 154 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 161 155 zadap = xadap * ztn / ( 2.+ ztn ) 162 zconctemp = MAX( 0.e0 , tr n(ji,jj,jk,jpdia) - xsizedia )163 zconctemp2 = tr n(ji,jj,jk,jpdia) - zconctemp156 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 157 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 164 158 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 165 159 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 166 160 ! 167 161 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( -znanotot ) ) & 168 & * tr n(ji,jj,jk,jpnch) /( trn(ji,jj,jk,jpphy) * 12. + rtrn)162 & * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 169 163 ! 170 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( tr n(ji,jj,jk,jpdia) + rtrn ) &171 & * tr n(ji,jj,jk,jpdch) /( trn(ji,jj,jk,jpdia) * 12. + rtrn)164 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) & 165 & * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 172 166 173 167 ! Computation of production function for Carbon … … 188 182 END DO 189 183 ELSE 190 !CDIR NOVERRCHK191 184 DO jk = 1, jpkm1 192 !CDIR NOVERRCHK193 185 DO jj = 1, jpj 194 !CDIR NOVERRCHK195 186 DO ji = 1, jpi 196 187 197 188 ! Computation of the P-I slope for nanos and diatoms 198 IF( etot (ji,jj,jk) > 1.E-3 ) THEN189 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 199 190 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 200 191 zadap = ztn / ( 2.+ ztn ) 201 zconctemp = MAX( 0.e0 , trn(ji,jj,jk,jpdia) - xsizedia ) 202 zconctemp2 = trn(ji,jj,jk,jpdia) - zconctemp 192 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 193 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 194 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 195 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 203 196 ! 204 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( - 0.21 * enano(ji,jj,jk)) )205 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( tr n(ji,jj,jk,jpdia) + rtrn )206 207 zpislopen = zpislopead(ji,jj,jk) * tr n(ji,jj,jk,jpnch) &208 & / ( tr n(ji,jj,jk,jpphy) * 12. + rtrn ) &197 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( -znanotot ) ) 198 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) 199 200 zpislopen = zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) & 201 & / ( trb(ji,jj,jk,jpphy) * 12. + rtrn ) & 209 202 & / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 210 203 211 zpislope2n = zpislopead2(ji,jj,jk) * tr n(ji,jj,jk,jpdch) &212 & / ( tr n(ji,jj,jk,jpdia) * 12. + rtrn ) &204 zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) & 205 & / ( trb(ji,jj,jk,jpdia) * 12. + rtrn ) & 213 206 & / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 214 207 215 208 ! Computation of production function for Carbon 216 209 ! --------------------------------------------- 217 zprbio(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk)) )218 zprdia(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk)) )210 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * znanotot ) ) 211 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 219 212 220 213 ! Computation of production function for Chlorophyll 221 214 !-------------------------------------------------- 222 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) * zstrn(ji,jj)) )223 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) * zstrn(ji,jj)) )215 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 216 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 224 217 ENDIF 225 218 END DO … … 231 224 ! Computation of a proxy of the N/C ratio 232 225 ! --------------------------------------- 233 !CDIR NOVERRCHK234 226 DO jk = 1, jpkm1 235 !CDIR NOVERRCHK236 227 DO jj = 1, jpj 237 !CDIR NOVERRCHK238 228 DO ji = 1, jpi 239 229 zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) ) & … … 252 242 DO ji = 1, jpi 253 243 254 IF( etot (ji,jj,jk) > 1.E-3 ) THEN244 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 255 245 ! Si/C of diatoms 256 246 ! ------------------------ … … 258 248 ! Si/C is arbitrariliy increased for very high Si concentrations 259 249 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 260 zlim = tr n(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 )250 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 261 251 zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 262 252 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 263 zsiborn = tr n(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil) * trn(ji,jj,jk,jpsil)253 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 264 254 IF (gphit(ji,jj) < -30 ) THEN 265 255 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) … … 296 286 297 287 ! Computation of the various production terms 298 !CDIR NOVERRCHK299 288 DO jk = 1, jpkm1 300 !CDIR NOVERRCHK301 289 DO jj = 1, jpj 302 !CDIR NOVERRCHK303 290 DO ji = 1, jpi 304 IF( etot (ji,jj,jk) > 1.E-3 ) THEN291 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 305 292 ! production terms for nanophyto. 306 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr n(ji,jj,jk,jpphy) * rfact2293 zprorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 307 294 zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 308 295 ! 309 zratio = tr n(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn )296 zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 310 297 zratio = zratio / fecnm 311 298 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 313 300 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 314 301 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & 315 & * zmax * tr n(ji,jj,jk,jpphy) * rfact2302 & * zmax * trb(ji,jj,jk,jpphy) * rfact2 316 303 ! production terms for diatomees 317 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr n(ji,jj,jk,jpdia) * rfact2304 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 318 305 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 319 306 ! 320 zratio = tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn )307 zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 321 308 zratio = zratio / fecdm 322 309 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) … … 324 311 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 325 312 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & 326 & * zmax * tr n(ji,jj,jk,jpdia) * rfact2313 & * zmax * trb(ji,jj,jk,jpdia) * rfact2 327 314 ENDIF 328 315 END DO … … 331 318 332 319 IF( ln_newprod ) THEN 333 !CDIR NOVERRCHK334 320 DO jk = 1, jpkm1 335 !CDIR NOVERRCHK336 321 DO jj = 1, jpj 337 !CDIR NOVERRCHK338 322 DO ji = 1, jpi 339 323 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN … … 341 325 zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 342 326 ENDIF 343 IF( etot (ji,jj,jk) > 1.E-3 ) THEN327 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 344 328 ! production terms for nanophyto. ( chlorophyll ) 345 329 znanotot = enano(ji,jj,jk) * zstrn(ji,jj) … … 359 343 END DO 360 344 ELSE 361 !CDIR NOVERRCHK362 345 DO jk = 1, jpkm1 363 !CDIR NOVERRCHK364 346 DO jj = 1, jpj 365 !CDIR NOVERRCHK366 347 DO ji = 1, jpi 367 IF( etot (ji,jj,jk) > 1.E-3 ) THEN348 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 368 349 ! production terms for nanophyto. ( chlorophyll ) 369 znanotot = enano(ji,jj,jk) * zstrn(ji,jj)370 zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * tr n(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk)350 znanotot = enano(ji,jj,jk) 351 zprod = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * trb(ji,jj,jk,jpphy) * xlimphy(ji,jj,jk) 371 352 zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 372 353 zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 144. * zprod & 373 & / ( zpislopead(ji,jj,jk) * tr n(ji,jj,jk,jpnch) * znanotot +rtrn )354 & / ( zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch) * znanotot +rtrn ) 374 355 ! production terms for diatomees ( chlorophyll ) 375 zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj)376 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * tr n(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk)356 zdiattot = ediat(ji,jj,jk) 357 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * trb(ji,jj,jk,jpdia) * xlimdia(ji,jj,jk) 377 358 zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 378 359 zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 144. * zprod & 379 & / ( zpislopead2(ji,jj,jk) * tr n(ji,jj,jk,jpdch) * zdiattot +rtrn )360 & / ( zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch) * zdiattot +rtrn ) 380 361 ENDIF 381 362 END DO … … 414 395 415 396 ! Total primary production per year 416 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc ) ) &397 IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & 417 398 & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 418 399 419 400 IF( lk_iomput ) THEN 420 IF( jnt == nrdttrc ) THEN401 IF( knt == nrdttrc ) THEN 421 402 CALL wrk_alloc( jpi, jpj, zw2d ) 422 403 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 629 610 630 611 !!====================================================================== 631 END MODULE 612 END MODULE p4zprod -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r5038 r5901 50 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitnh4 !: - - - - - 51 51 52 !! * Substitution53 # include " top_substitute.h90"52 !! * Substitutions 53 # include "domzgr_substitute.h90" 54 54 !!---------------------------------------------------------------------- 55 55 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 59 59 CONTAINS 60 60 61 SUBROUTINE p4z_rem( kt, jnt )61 SUBROUTINE p4z_rem( kt, knt ) 62 62 !!--------------------------------------------------------------------- 63 63 !! *** ROUTINE p4z_rem *** … … 68 68 !!--------------------------------------------------------------------- 69 69 ! 70 INTEGER, INTENT(in) :: kt, jnt ! ocean time step70 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 71 ! 72 72 INTEGER :: ji, jj, jk … … 104 104 zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 105 105 IF( fsdept(ji,jj,jk) < zdep ) THEN 106 zdepbac(ji,jj,jk) = MIN( 0.7 * ( tr n(ji,jj,jk,jpzoo) + 2.* trn(ji,jj,jk,jpmes) ), 4.e-6 )106 zdepbac(ji,jj,jk) = MIN( 0.7 * ( trb(ji,jj,jk,jpzoo) + 2.* trb(ji,jj,jk,jpmes) ), 4.e-6 ) 107 107 ztempbac(ji,jj) = zdepbac(ji,jj,jk) 108 108 ELSE … … 119 119 DO ji = 1, jpi 120 120 ! denitrification factor computed from O2 levels 121 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr n(ji,jj,jk,jpoxy) ) &122 & / ( oxymin + tr n(ji,jj,jk,jpoxy) ) )121 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 122 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 123 123 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 124 124 END DO … … 140 140 ! Ammonification in oxic waters with oxygen consumption 141 141 ! ----------------------------------------------------- 142 zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * tr n(ji,jj,jk,jpdoc)143 zolimi(ji,jj,jk) = MIN( ( tr n(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )142 zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc) 143 zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) 144 144 ! Ammonification in suboxic waters with denitrification 145 145 ! ------------------------------------------------------- 146 denitr(ji,jj,jk) = MIN( ( tr n(ji,jj,jk,jpno3) - rtrn ) / rdenit, &147 & zremik * nitrfac(ji,jj,jk) * tr n(ji,jj,jk,jpdoc) )146 denitr(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, & 147 & zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) ) 148 148 ! 149 149 zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) … … 165 165 ! below 2 umol/L. Inhibited at strong light 166 166 ! ---------------------------------------------------------- 167 zonitr =nitrif * zstep * tr n(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )168 denitnh4(ji,jj,jk) = nitrif * zstep * tr n(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)167 zonitr =nitrif * zstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) ) 168 denitnh4(ji,jj,jk) = nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 169 169 ! Update of the tracers trends 170 170 ! ---------------------------- … … 192 192 ! ---------------------------------------------------------- 193 193 zbactfer = 10.e-6 * rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk) & 194 & * tr n(ji,jj,jk,jpfer) / ( 2.5E-10 + trn(ji,jj,jk,jpfer) ) &194 & * trb(ji,jj,jk,jpfer) / ( 2.5E-10 + trb(ji,jj,jk,jpfer) ) & 195 195 & * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 196 196 #if defined key_kriest … … 228 228 ! means a disaggregation constant about 0.5 the value in oxic zones 229 229 ! ----------------------------------------------------------------- 230 zorem = zremip * tr n(ji,jj,jk,jppoc)231 zofer = zremip * tr n(ji,jj,jk,jpsfe)230 zorem = zremip * trb(ji,jj,jk,jppoc) 231 zofer = zremip * trb(ji,jj,jk,jpsfe) 232 232 #if ! defined key_kriest 233 zorem2 = zremip * tr n(ji,jj,jk,jpgoc)234 zofer2 = zremip * tr n(ji,jj,jk,jpbfe)233 zorem2 = zremip * trb(ji,jj,jk,jpgoc) 234 zofer2 = zremip * trb(ji,jj,jk,jpbfe) 235 235 #else 236 zorem2 = zremip * tr n(ji,jj,jk,jpnum)236 zorem2 = zremip * trb(ji,jj,jk,jpnum) 237 237 #endif 238 238 … … 272 272 ! Remineralization rate of BSi depedant on T and saturation 273 273 ! --------------------------------------------------------- 274 zsatur = ( sio3eq(ji,jj,jk) - tr n(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn )274 zsatur = ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 275 275 zsatur = MAX( rtrn, zsatur ) 276 276 zsatur2 = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 … … 287 287 zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 288 288 zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil 289 zosil = zsiremin * tr n(ji,jj,jk,jpgsi)289 zosil = zsiremin * trb(ji,jj,jk,jpgsi) 290 290 ! 291 291 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil … … 315 315 END DO 316 316 317 IF( jnt == nrdttrc ) THEN317 IF( knt == nrdttrc ) THEN 318 318 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 319 319 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
- Property svn:keywords set to Id
r5038 r5901 81 81 82 82 83 !!* Substitution 84 # include "top_substitute.h90" 83 !! * Substitutions 84 # include "domzgr_substitute.h90" 85 # include "vectopt_loop_substitute.h90" 85 86 !!---------------------------------------------------------------------- 86 87 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 87 !! $ Header:$88 !! $Id$ 88 89 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 89 90 !!---------------------------------------------------------------------- … … 117 118 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN 118 119 CALL fld_read( kt, 1, sf_dust ) 119 dust(:,:) = sf_dust(1)%fnow(:,:,1) 120 IF( nn_ice_tr == -1 .AND. .NOT. ln_ironice ) THEN 121 dust(:,:) = sf_dust(1)%fnow(:,:,1) 122 ELSE 123 dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.0 - fr_i(:,:) ) 124 ENDIF 120 125 ENDIF 121 126 ENDIF … … 136 141 DO jj = 1, jpj 137 142 DO ji = 1, jpi 138 zcoef = ryyss * cvol(ji,jj,1)143 zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj) 139 144 rivalk(ji,jj) = sf_river(jr_dic)%fnow(ji,jj,1) & 140 145 & * 1.E3 / ( 12. * zcoef + rtrn ) … … 187 192 INTEGER :: ierr, ierr1, ierr2, ierr3 188 193 INTEGER :: ios ! Local integer output status for namelist read 194 INTEGER :: ik50 ! last level where depth less than 50 m 195 INTEGER :: isrow ! index for ORCA1 starting row 189 196 REAL(wp) :: zexpide, zdenitide, zmaskt 190 197 REAL(wp) :: ztimes_dust, ztimes_riv, ztimes_ndep … … 216 223 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp ) 217 224 IF(lwm) WRITE ( numonp, nampissbc ) 225 226 IF ( ( nn_ice_tr >= 0 ) .AND. ln_ironice ) THEN 227 IF(lwp) THEN 228 WRITE(numout,*) ' ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 229 WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 230 WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 231 ln_ironice = .FALSE. 232 ENDIF 233 ENDIF 218 234 219 235 IF(lwp) THEN … … 247 263 ENDIF 248 264 265 ! set the number of level over which river runoffs are applied 266 ! online configuration : computed in sbcrnf 267 IF( lk_offline ) THEN 268 nk_rnf(:,:) = 1 269 h_rnf (:,:) = fsdept(:,:,1) 270 ENDIF 271 249 272 ! dust input from the atmosphere 250 273 ! ------------------------------ … … 358 381 rivalkinput = 0._wp 359 382 END IF 360 361 383 ! nutrient input from dust 362 384 ! ------------------------ … … 410 432 CALL iom_close( numiron ) 411 433 ! 412 DO jk = 1, 5 434 ik50 = 5 ! last level where depth less than 50 m 435 DO jk = jpkm1, 1, -1 436 IF( gdept_1d(jk) > 50. ) ik50 = jk - 1 437 END DO 438 IF (lwp) WRITE(numout,*) 439 IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ', ik50,' ', gdept_1d(ik50+1) 440 IF (lwp) WRITE(numout,*) 441 DO jk = 1, ik50 413 442 DO jj = 2, jpjm1 414 443 DO ji = fs_2, fs_jpim1 … … 421 450 END DO 422 451 END DO 423 IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 424 ii0 = 176 ; ii1 = 176 ! Southern Island : Kerguelen 425 ij0 = 37 ; ij1 = 37 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 426 ! 427 ii0 = 119 ; ii1 = 119 ! South Georgia 428 ij0 = 29 ; ij1 = 29 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 429 ! 430 ii0 = 111 ; ii1 = 111 ! Falklands 431 ij0 = 35 ; ij1 = 35 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 432 ! 433 ii0 = 168 ; ii1 = 168 ! Crozet 434 ij0 = 40 ; ij1 = 40 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 435 ! 436 ii0 = 119 ; ii1 = 119 ! South Orkney 437 ij0 = 28 ; ij1 = 28 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 438 ! 439 ii0 = 140 ; ii1 = 140 ! Bouvet Island 440 ij0 = 33 ; ij1 = 33 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 441 ! 442 ii0 = 178 ; ii1 = 178 ! Prince edwards 443 ij0 = 34 ; ij1 = 34 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 444 ! 445 ii0 = 43 ; ii1 = 43 ! Balleny islands 446 ij0 = 21 ; ij1 = 21 ; zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 0.3_wp 447 ENDIF 452 ! 448 453 CALL lbc_lnk( zcmask , 'T', 1. ) ! lateral boundary conditions on cmask (sign unchanged) 454 ! 449 455 DO jk = 1, jpk 450 456 DO jj = 1, jpj … … 514 520 515 521 !!====================================================================== 516 END MODULE 522 END MODULE p4zsbc -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
- Property svn:keywords set to Id
r5038 r5901 21 21 USE p4zopt ! optical model 22 22 USE p4zlim ! Co-limitations of differents nutrients 23 USE p4zrem ! Remineralisation of organic matter24 23 USE p4zsbc ! External source of nutrients 25 24 USE p4zint ! interpolation and computation of various fields … … 30 29 PRIVATE 31 30 32 PUBLIC p4z_sed 31 PUBLIC p4z_sed 32 PUBLIC p4z_sed_alloc 33 33 34 34 35 !! * Module variables 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: nitrpot !: Nitrogen fixation 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,: ) :: sdenit !: Nitrate reduction in the sediments 35 38 REAL(wp) :: r1_rday !: inverse of rday 36 39 37 INTEGER :: numnit 38 39 40 !!* Substitution 41 # include "top_substitute.h90" 40 !! * Substitutions 41 # include "domzgr_substitute.h90" 42 42 !!---------------------------------------------------------------------- 43 43 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 44 !! $ Header:$44 !! $Id$ 45 45 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 46 46 !!---------------------------------------------------------------------- 47 47 CONTAINS 48 48 49 SUBROUTINE p4z_sed( kt, jnt )49 SUBROUTINE p4z_sed( kt, knt ) 50 50 !!--------------------------------------------------------------------- 51 51 !! *** ROUTINE p4z_sed *** … … 58 58 !!--------------------------------------------------------------------- 59 59 ! 60 INTEGER, INTENT(in) :: kt, jnt ! ocean time step60 INTEGER, INTENT(in) :: kt, knt ! ocean time step 61 61 INTEGER :: ji, jj, jk, ikt 62 62 #if ! defined key_sed … … 69 69 REAL(wp) :: zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 70 70 REAL(wp) :: ztrfer, ztrpo4, zwdust, zlight 71 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot72 71 ! 73 72 CHARACTER (len=25) :: charout 74 REAL(wp), POINTER, DIMENSION(:,: ) :: zpdep, zsidep, zwork1, zwork2, zwork3 , zwork473 REAL(wp), POINTER, DIMENSION(:,: ) :: zpdep, zsidep, zwork1, zwork2, zwork3 75 74 REAL(wp), POINTER, DIMENSION(:,: ) :: zdenit2d, zironice, zbureff 76 75 REAL(wp), POINTER, DIMENSION(:,: ) :: zwsbio3, zwsbio4, zwscal 77 REAL(wp), POINTER, DIMENSION(:,:,:) :: z nitrpot, zirondep, zsoufer76 REAL(wp), POINTER, DIMENSION(:,:,:) :: zirondep, zsoufer 78 77 !!--------------------------------------------------------------------- 79 78 ! 80 79 IF( nn_timing == 1 ) CALL timing_start('p4z_sed') 81 80 ! 82 IF( kt == nittrc000 .AND. jnt == 1 ) THEN 83 r1_rday = 1. / rday 84 IF( ln_check_mass .AND. lwp) & 85 & CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 86 ENDIF 81 IF( kt == nittrc000 .AND. knt == 1 ) r1_rday = 1. / rday 87 82 ! 88 83 ! Allocate temporary workspace 89 CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, z work4, zbureff )84 CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 90 85 CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 91 CALL wrk_alloc( jpi, jpj, jpk, z nitrpot, zsoufer )86 CALL wrk_alloc( jpi, jpj, jpk, zsoufer ) 92 87 93 88 zdenit2d(:,:) = 0.e0 … … 96 91 zwork2 (:,:) = 0.e0 97 92 zwork3 (:,:) = 0.e0 98 zwork4 (:,:) = 0.e099 93 100 94 ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. … … 108 102 zdep = rfact2 / fse3t(ji,jj,1) 109 103 zwflux = fmmflx(ji,jj) / 1000._wp 110 zfminus = MIN( 0._wp, -zwflux ) * tr n(ji,jj,1,jpfer) * zdep104 zfminus = MIN( 0._wp, -zwflux ) * trb(ji,jj,1,jpfer) * zdep 111 105 zfplus = MAX( 0._wp, -zwflux ) * icefeinput * zdep 112 106 zironice(ji,jj) = zfplus + zfminus … … 114 108 END DO 115 109 ! 116 tr n(:,:,1,jpfer) = trn(:,:,1,jpfer) + zironice(:,:)110 tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:) 117 111 ! 118 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironice" ) ) &112 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironice" ) ) & 119 113 & CALL iom_put( "Ironice", zironice(:,:) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! iron flux from ice 120 114 ! … … 144 138 END DO 145 139 ! ! Iron solubilization of particles in the water column 146 tr n(:,:,1,jppo4) = trn(:,:,1,jppo4) + zpdep (:,:)147 tr n(:,:,1,jpsil) = trn(:,:,1,jpsil) + zsidep (:,:)148 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + zirondep(:,:,:)140 tra(:,:,1,jppo4) = tra(:,:,1,jppo4) + zpdep (:,:) 141 tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep (:,:) 142 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:) 149 143 ! 150 144 IF( lk_iomput ) THEN 151 IF( jnt == nrdttrc ) THEN145 IF( knt == nrdttrc ) THEN 152 146 IF( iom_use( "Irondep" ) ) & 153 147 & CALL iom_put( "Irondep", zirondep(:,:,1) * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) ) ! surface downward dust depo of iron … … 167 161 ! ---------------------------------------------------------- 168 162 IF( ln_river ) THEN 169 trn(:,:,1,jppo4) = trn(:,:,1,jppo4) + rivdip(:,:) * rfact2 170 trn(:,:,1,jpno3) = trn(:,:,1,jpno3) + rivdin(:,:) * rfact2 171 trn(:,:,1,jpfer) = trn(:,:,1,jpfer) + rivdic(:,:) * 5.e-5 * rfact2 172 trn(:,:,1,jpsil) = trn(:,:,1,jpsil) + rivdsi(:,:) * rfact2 173 trn(:,:,1,jpdic) = trn(:,:,1,jpdic) + rivdic(:,:) * rfact2 174 trn(:,:,1,jptal) = trn(:,:,1,jptal) + ( rivalk(:,:) - rno3 * rivdin(:,:) ) * rfact2 163 DO jj = 1, jpj 164 DO ji = 1, jpi 165 DO jk = 1, nk_rnf(ji,jj) 166 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + rivdip(ji,jj) * rfact2 167 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + rivdin(ji,jj) * rfact2 168 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + rivdic(ji,jj) * 5.e-5 * rfact2 169 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + rivdsi(ji,jj) * rfact2 170 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + rivdic(ji,jj) * rfact2 171 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2 172 ENDDO 173 ENDDO 174 ENDDO 175 175 ENDIF 176 176 … … 178 178 ! ---------------------------------------------------------- 179 179 IF( ln_ndepo ) THEN 180 tr n(:,:,1,jpno3) = trn(:,:,1,jpno3) + nitdep(:,:) * rfact2181 tr n(:,:,1,jptal) = trn(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2180 tra(:,:,1,jpno3) = tra(:,:,1,jpno3) + nitdep(:,:) * rfact2 181 tra(:,:,1,jptal) = tra(:,:,1,jptal) - rno3 * nitdep(:,:) * rfact2 182 182 ENDIF 183 183 … … 185 185 ! ------------------------------------------------------ 186 186 IF( ln_ironsed ) THEN 187 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + ironsed(:,:,:) * rfact2187 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 188 188 ! 189 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "Ironsed" ) ) &189 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) ) & 190 190 & CALL iom_put( "Ironsed", ironsed(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! iron inputs from sediments 191 191 ENDIF … … 194 194 ! ------------------------------------------------------ 195 195 IF( ln_hydrofe ) THEN 196 tr n(:,:,:,jpfer) = trn(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2196 tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 197 197 ! 198 IF( lk_iomput .AND. jnt == nrdttrc .AND. iom_use( "HYDR" ) ) &198 IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) ) & 199 199 & CALL iom_put( "HYDR", hydrofe(:,:,:) * 1.e+3 * tmask(:,:,:) ) ! hydrothermal iron input 200 200 ENDIF … … 222 222 ikt = mbkt(ji,jj) 223 223 # if defined key_kriest 224 zflx = tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4224 zflx = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4 225 225 # else 226 zflx = ( tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) &227 & + tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4226 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 227 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4 228 228 #endif 229 229 zflx = LOG10( MAX( 1E-3, zflx ) ) 230 zo2 = LOG10( MAX( 10. , tr n(ji,jj,ikt,jpoxy) * 1E6 ) )231 zno3 = LOG10( MAX( 1. , tr n(ji,jj,ikt,jpno3) * 1E6 * rno3 ) )230 zo2 = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 231 zno3 = LOG10( MAX( 1. , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 232 232 zdep = LOG10( fsdepw(ji,jj,ikt+1) ) 233 233 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3 & … … 235 235 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 236 236 ! 237 zflx = ( tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) &238 & + tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6237 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 238 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 239 239 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 240 240 ENDIF … … 251 251 ikt = mbkt(ji,jj) 252 252 # if defined key_kriest 253 zwork1(ji,jj) = tr n(ji,jj,ikt,jpgsi) * zwscal (ji,jj)254 zwork2(ji,jj) = tr n(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)253 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 254 zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 255 255 # else 256 zwork1(ji,jj) = tr n(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj)257 zwork2(ji,jj) = tr n(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trn(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)256 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 257 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 258 258 # endif 259 259 ! For calcite, burial efficiency is made a function of saturation 260 260 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 261 261 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 262 zwork3(ji,jj) = tr n(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal262 zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 263 263 ENDIF 264 264 END DO … … 279 279 DO ji = 1, jpi 280 280 ikt = mbkt(ji,jj) 281 zdep = xstep / fse3t(ji,jj,ikt) 281 zdep = xstep / fse3t(ji,jj,ikt) 282 282 zws4 = zwsbio4(ji,jj) * zdep 283 283 zwsc = zwscal (ji,jj) * zdep 284 284 # if defined key_kriest 285 zsiloss = tr n(ji,jj,ikt,jpgsi) * zws4285 zsiloss = trb(ji,jj,ikt,jpgsi) * zws4 286 286 # else 287 zsiloss = tr n(ji,jj,ikt,jpgsi) * zwsc287 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 288 288 # endif 289 zcaloss = tr n(ji,jj,ikt,jpcal) * zwsc289 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 290 290 ! 291 tr n(ji,jj,ikt,jpgsi) = trn(ji,jj,ikt,jpgsi) - zsiloss292 tr n(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zcaloss291 tra(ji,jj,ikt,jpgsi) = tra(ji,jj,ikt,jpgsi) - zsiloss 292 tra(ji,jj,ikt,jpcal) = tra(ji,jj,ikt,jpcal) - zcaloss 293 293 #if ! defined key_sed 294 tr n(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zsiloss * zrivsil294 tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil 295 295 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 296 296 zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 297 297 zrivalk = 1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 298 tr n(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0299 tr n(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zcaloss * zrivalk298 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 299 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 300 300 #endif 301 301 END DO … … 304 304 DO jj = 1, jpj 305 305 DO ji = 1, jpi 306 ikt 307 zdep = xstep / fse3t(ji,jj,ikt)306 ikt = mbkt(ji,jj) 307 zdep = xstep / fse3t(ji,jj,ikt) 308 308 zws4 = zwsbio4(ji,jj) * zdep 309 309 zws3 = zwsbio3(ji,jj) * zdep 310 310 zrivno3 = 1. - zbureff(ji,jj) 311 311 # if ! defined key_kriest 312 tr n(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - trn(ji,jj,ikt,jpgoc) * zws4313 tr n(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3314 tr n(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * zws4315 tr n(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3316 zwstpoc = trn(ji,jj,ikt,jpgoc) * zws4 + trn(ji,jj,ikt,jppoc) * zws3312 tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4 313 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 314 tra(ji,jj,ikt,jpbfe) = tra(ji,jj,ikt,jpbfe) - trb(ji,jj,ikt,jpbfe) * zws4 315 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 316 zwstpoc = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 317 317 # else 318 tr n(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - trn(ji,jj,ikt,jpnum) * zws4319 tr n(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - trn(ji,jj,ikt,jppoc) * zws3320 tr n(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * zws3321 zwstpoc = tr n(ji,jj,ikt,jppoc) * zws3318 tra(ji,jj,ikt,jpnum) = tra(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4 319 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 320 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 321 zwstpoc = trb(ji,jj,ikt,jppoc) * zws3 322 322 # endif 323 323 … … 325 325 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 326 326 ! in the sediments and just above the sediments. Not very clever, but simpliest option. 327 zpdenit = MIN( 0.5 * ( tr n(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 )327 zpdenit = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 328 328 z1pdenit = zwstpoc * zrivno3 - zpdenit 329 zolimit = MIN( ( tr n(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )330 zdenitt = MIN( 0.5 * ( tr n(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) )331 tr n(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt332 tr n(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt333 tr n(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt334 tr n(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt)335 tr n(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut336 tr n(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) )337 tr n(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt338 zwork4(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt)329 zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 330 zdenitt = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 331 tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 332 tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 333 tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 334 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 335 tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 336 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 337 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 338 sdenit(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 339 339 #endif 340 340 END DO … … 356 356 #endif 357 357 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 358 ztrpo4 = tr n (ji,jj,jk,jppo4) / ( concnnh4 + trn(ji,jj,jk,jppo4) )359 zlight = ( 1.- EXP( -etot (ji,jj,jk) / diazolight ) )360 znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) &358 ztrpo4 = trb (ji,jj,jk,jppo4) / ( concnnh4 + trb (ji,jj,jk,jppo4) ) 359 zlight = ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) 360 nitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) & 361 361 & * zfact * MIN( ztrfer, ztrpo4 ) * zlight 362 362 zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) … … 370 370 DO jj = 1, jpj 371 371 DO ji = 1, jpi 372 zfact = znitrpot(ji,jj,jk) * nitrfix373 tr n(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) + zfact374 tr n(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3 * zfact375 tr n(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + o2nit * zfact376 tr n(ji,jj,jk,jppo4) = trn(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trn(ji,jj,jk,jppo4) ) &377 & * 0.002 * tr n(ji,jj,jk,jpdoc) * rfact2 / rday378 tr n(ji,jj,jk,jpfer) = trn(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday372 zfact = nitrpot(ji,jj,jk) * nitrfix 373 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact 374 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact 375 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit * zfact 376 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 377 & * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 378 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 379 379 END DO 380 380 END DO 381 381 END DO 382 382 383 ! Global budget of N SMS : denitrification in the water column and in the sediment384 ! nitrogen fixation by the diazotrophs385 ! --------------------------------------------------------------------------------386 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) )387 zsdenittot = glob_sum ( zwork4(:,:) * e1e2t(:,:) )388 znitrpottot = glob_sum ( znitrpot(:,:,:) * nitrfix * cvol(:,:,:) )389 zfact = 1.e+3 * rfact2r * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/kt ----> TgN/m3/year390 !391 IF( ln_check_mass .AND. ( kt == nitend .AND. jnt == nrdttrc ) .AND. ( lwp ) ) &392 & WRITE(numnit,9100) ndastp, znitrpottot * zfact , &393 & zrdenittot * zfact , &394 & zsdenittot * zfact395 !396 383 IF( lk_iomput ) THEN 397 IF( jnt == nrdttrc ) THEN384 IF( knt == nrdttrc ) THEN 398 385 zfact = 1.e+3 * rfact2r * rno3 ! conversion from molC/l/kt to molN/m3/s 399 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix" , znitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation 400 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", zwork4(:,:) * zfact * tmask(:,:,1) ) ! Nitrate reduction in the sediments 401 IF( iom_use("tnfix" ) ) CALL iom_put( "tnfix" , znitrpottot * zfact ) ! Global nitrogen fixation 402 IF( iom_use("tdenit" ) ) CALL iom_put( "tdenit" , zrdenittot * zfact ) ! Total denitrification 386 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation 403 387 IF( iom_use("INTNFIX") ) THEN ! nitrogen fixation rate in ocean ( vertically integrated ) 404 388 zwork1(:,:) = 0. 405 389 DO jk = 1, jpkm1 406 zwork1(:,:) = zwork1(:,:) + znitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk)390 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 407 391 ENDDO 408 392 CALL iom_put( "INTNFIX" , zwork1 ) … … 411 395 ELSE 412 396 IF( ln_diatrc ) & 413 & trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1)397 & trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 414 398 ENDIF 415 399 ! … … 417 401 WRITE(charout, fmt="('sed ')") 418 402 CALL prt_ctl_trc_info(charout) 419 CALL prt_ctl_trc(tab4d=tr n, mask=tmask, clinfo=ctrcnm)420 ENDIF 421 ! 422 CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, z work4, zbureff )403 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 404 ENDIF 405 ! 406 CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 423 407 CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 424 CALL wrk_dealloc( jpi, jpj, jpk, z nitrpot, zsoufer )408 CALL wrk_dealloc( jpi, jpj, jpk, zsoufer ) 425 409 ! 426 410 IF( nn_timing == 1 ) CALL timing_stop('p4z_sed') … … 429 413 ! 430 414 END SUBROUTINE p4z_sed 415 416 417 INTEGER FUNCTION p4z_sed_alloc() 418 !!---------------------------------------------------------------------- 419 !! *** ROUTINE p4z_sed_alloc *** 420 !!---------------------------------------------------------------------- 421 ALLOCATE( nitrpot(jpi,jpj,jpk), sdenit(jpi,jpj), STAT=p4z_sed_alloc ) 422 ! 423 IF( p4z_sed_alloc /= 0 ) CALL ctl_warn('p4z_sed_alloc: failed to allocate arrays') 424 ! 425 END FUNCTION p4z_sed_alloc 426 431 427 432 428 #else … … 440 436 441 437 !!====================================================================== 442 END MODULE 438 END MODULE p4zsed -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90
r5038 r5901 65 65 #endif 66 66 67 !! * Substitution68 # include " top_substitute.h90"67 !! * Substitutions 68 # include "domzgr_substitute.h90" 69 69 !!---------------------------------------------------------------------- 70 70 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 79 79 !!---------------------------------------------------------------------- 80 80 81 SUBROUTINE p4z_sink ( kt, jnt )81 SUBROUTINE p4z_sink ( kt, knt ) 82 82 !!--------------------------------------------------------------------- 83 83 !! *** ROUTINE p4z_sink *** … … 88 88 !! ** Method : - ??? 89 89 !!--------------------------------------------------------------------- 90 INTEGER, INTENT(in) :: kt, jnt90 INTEGER, INTENT(in) :: kt, knt 91 91 INTEGER :: ji, jj, jk, jit 92 92 INTEGER :: iiter1, iiter2 … … 199 199 zfact = zstep * xdiss(ji,jj,jk) 200 200 ! Part I : Coagulation dependent on turbulence 201 zagg1 = 25.9 * zfact * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc)202 zagg2 = 4452. * zfact * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc)201 zagg1 = 25.9 * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 202 zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 203 203 204 204 ! Part II : Differential settling 205 205 206 206 ! Aggregation of small into large particles 207 zagg3 = 47.1 * zstep * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpgoc)208 zagg4 = 3.3 * zstep * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jppoc)207 zagg3 = 47.1 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 208 zagg4 = 3.3 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 209 209 210 210 zagg = zagg1 + zagg2 + zagg3 + zagg4 211 zaggfe = zagg * tr n(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn )211 zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn ) 212 212 213 213 ! Aggregation of DOC to POC : … … 215 215 ! 2nd term is shear aggregation of DOC-POC 216 216 ! 3rd term is differential settling of DOC-POC 217 zaggdoc = ( ( 0.369 * 0.3 * tr n(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * zfact &218 & + 2.4 * zstep * tr n(ji,jj,jk,jppoc) ) * 0.3 * trn(ji,jj,jk,jpdoc)217 zaggdoc = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact & 218 & + 2.4 * zstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 219 219 ! transfer of DOC to GOC : 220 220 ! 1st term is shear aggregation 221 221 ! 2nd term is differential settling 222 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * tr n(ji,jj,jk,jpgoc) * 0.3 * trn(ji,jj,jk,jpdoc)222 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 223 223 ! tranfer of DOC to POC due to brownian motion 224 zaggdoc3 = ( 5095. * tr n(ji,jj,jk,jppoc) + 114. * 0.3 * trn(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trn(ji,jj,jk,jpdoc)224 zaggdoc3 = ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trb(ji,jj,jk,jpdoc) 225 225 226 226 ! Update the trends … … 237 237 238 238 ! Total carbon export per year 239 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. jnt == nrdttrc ) ) &239 IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc ) ) & 240 240 & t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 241 241 ! 242 242 IF( lk_iomput ) THEN 243 IF( jnt == nrdttrc ) THEN243 IF( knt == nrdttrc ) THEN 244 244 CALL wrk_alloc( jpi, jpj, zw2d ) 245 245 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 328 328 !!---------------------------------------------------------------------- 329 329 330 SUBROUTINE p4z_sink ( kt, jnt )330 SUBROUTINE p4z_sink ( kt, knt ) 331 331 !!--------------------------------------------------------------------- 332 332 !! *** ROUTINE p4z_sink *** … … 338 338 !!--------------------------------------------------------------------- 339 339 ! 340 INTEGER, INTENT(in) :: kt, jnt340 INTEGER, INTENT(in) :: kt, knt 341 341 ! 342 342 INTEGER :: ji, jj, jk, jit, niter1, niter2 … … 373 373 DO ji = 1, jpi 374 374 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 375 znum = tr n(ji,jj,jk,jppoc) / ( trn(ji,jj,jk,jpnum) + rtrn ) / xkr_massp375 znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 376 376 ! -------------- To avoid sinking speed over 50 m/day ------- 377 377 znum = MIN( xnumm(jk), znum ) … … 435 435 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 436 436 437 znum = tr n(ji,jj,jk,jppoc)/(trn(ji,jj,jk,jpnum)+rtrn) / xkr_massp437 znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp 438 438 !-------------- To avoid sinking speed over 50 m/day ------- 439 439 znum = min(xnumm(jk),znum) … … 453 453 ! ---------------------------------------------- 454 454 455 zagg1 = 0.163 * tr n(ji,jj,jk,jpnum)**2 &455 zagg1 = 0.163 * trb(ji,jj,jk,jpnum)**2 & 456 456 & * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3) & 457 457 & * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min) & 458 458 & * (zfm*xkr_mass_max**2-xkr_mass_min**2) & 459 459 & * (zeps-1.)**2/(zdiv2*zdiv3)) 460 zagg2 = 2*0.163*tr n(ji,jj,jk,jpnum)**2*zfm* &460 zagg2 = 2*0.163*trb(ji,jj,jk,jpnum)**2*zfm* & 461 461 & ((xkr_mass_max**3+3.*(xkr_mass_max**2 & 462 462 & *xkr_mass_min*(zeps-1.)/zdiv2 & … … 466 466 & (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1)) 467 467 468 zagg3 = 0.163*tr n(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3468 zagg3 = 0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3 469 469 470 470 ! Aggregation of small into large particles … … 472 472 ! ---------------------------------------------- 473 473 474 zagg4 = 2.*3.141*0.125*tr n(ji,jj,jk,jpnum)**2* &474 zagg4 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2* & 475 475 & xkr_wsbio_min*(zeps-1.)**2 & 476 476 & *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4) & … … 479 479 & *xkr_eta)/(zdiv*zdiv3*zdiv5) ) 480 480 481 zagg5 = 2.*3.141*0.125*tr n(ji,jj,jk,jpnum)**2 &481 zagg5 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2 & 482 482 & *(zeps-1.)*zfm*xkr_wsbio_min & 483 483 & *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2) & … … 489 489 ! ------------------------------------ 490 490 491 zfract = 2.*3.141*0.125*tr n(ji,jj,jk,jpmes)*12./0.12/0.06**3*trn(ji,jj,jk,jpnum) &491 zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum) & 492 492 & * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2 & 493 493 & * 10000.*xstep … … 496 496 ! -------------------------------------- 497 497 498 zaggdoc = 0.83 * tr n(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) &499 & + 0.005 * 231. * tr n(ji,jj,jk,jpdoc) * xstep * trn(ji,jj,jk,jpdoc)500 zaggdoc1 = 271. * tr n(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trn(ji,jj,jk,jpdoc) &501 & + 0.02 * 16706. * tr n(ji,jj,jk,jppoc) * xstep * trn(ji,jj,jk,jpdoc)498 zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) & 499 & + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc) 500 zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) & 501 & + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc) 502 502 503 503 # if defined key_degrad … … 514 514 zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 515 515 ! 516 znumdoc = tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )516 znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 517 517 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1 518 518 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg … … 528 528 ! 529 529 IF( lk_iomput ) THEN 530 IF( jnt == nrdttrc ) THEN530 IF( knt == nrdttrc ) THEN 531 531 CALL wrk_alloc( jpi, jpj, zw2d ) 532 532 CALL wrk_alloc( jpi, jpj, jpk, zw3d ) … … 800 800 ztraz(:,:,:) = 0.e0 801 801 zakz (:,:,:) = 0.e0 802 ztrb (:,:,:) = tr n(:,:,:,jp_tra)802 ztrb (:,:,:) = trb(:,:,:,jp_tra) 803 803 804 804 DO jk = 1, jpkm1 … … 815 815 ! first guess of the slopes interior values 816 816 DO jk = 2, jpkm1 817 ztraz(:,:,jk) = ( tr n(:,:,jk-1,jp_tra) - trn(:,:,jk,jp_tra) ) * tmask(:,:,jk)817 ztraz(:,:,jk) = ( trb(:,:,jk-1,jp_tra) - trb(:,:,jk,jp_tra) ) * tmask(:,:,jk) 818 818 END DO 819 819 ztraz(:,:,1 ) = 0.0 … … 846 846 zigma = zwsink2(ji,jj,jk+1) * zstep / fse3w(ji,jj,jk+1) 847 847 zew = zwsink2(ji,jj,jk+1) 848 psinkflx(ji,jj,jk+1) = -zew * ( tr n(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep848 psinkflx(ji,jj,jk+1) = -zew * ( trb(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 849 849 END DO 850 850 END DO … … 859 859 DO ji = 1, jpi 860 860 zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 861 tr n(ji,jj,jk,jp_tra) = trn(ji,jj,jk,jp_tra) + zflx861 trb(ji,jj,jk,jp_tra) = trb(ji,jj,jk,jp_tra) + zflx 862 862 END DO 863 863 END DO … … 875 875 END DO 876 876 877 tr n(:,:,:,jp_tra) = ztrb(:,:,:)877 trb(:,:,:,jp_tra) = ztrb(:,:,:) 878 878 psinkflx(:,:,:) = 2. * psinkflx(:,:,:) 879 879 ! … … 913 913 914 914 !!====================================================================== 915 END MODULE 915 END MODULE p4zsink -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r5038 r5901 24 24 USE p4zsed ! Sedimentation 25 25 USE p4zint ! time interpolation 26 USE p4zrem ! remineralisation 26 27 USE iom ! I/O manager 27 28 USE trd_oce ! Ocean trends variables … … 36 37 PUBLIC p4z_sms ! called in p4zsms.F90 37 38 38 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget 39 INTEGER :: numco2, numnut !: logical unit for co2 budget 39 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 40 REAL(wp) :: xfact1, xfact2, xfact3 41 INTEGER :: numco2, numnut, numnit !: logical unit for co2 budget 42 43 !!* Array used to indicate negative tracer values 44 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr !: ??? 45 40 46 41 47 !!---------------------------------------------------------------------- … … 61 67 INTEGER, INTENT( in ) :: kt ! ocean time-step index 62 68 !! 63 INTEGER :: jnt, jn, jl 69 INTEGER :: ji, jj, jk, jnt, jn, jl 70 REAL(wp) :: ztra 71 #if defined key_kriest 72 REAL(wp) :: zcoef1, zcoef2 73 #endif 64 74 CHARACTER (len=25) :: charout 65 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrdpis66 75 !!--------------------------------------------------------------------- 67 76 ! 68 77 IF( nn_timing == 1 ) CALL timing_start('p4z_sms') 69 78 ! 70 IF( l_trdtrc ) THEN71 CALL wrk_alloc( jpi, jpj, jpk, jp_pisces, ztrdpis )72 DO jn = 1, jp_pisces73 jl = jn + jp_pcs0 - 174 ztrdpis(:,:,:,jn) = trn(:,:,:,jl)75 ENDDO76 ENDIF77 !78 79 IF( kt == nittrc000 ) THEN 80 ! 81 ALLOCATE( xnegtr(jpi,jpj,jpk) ) 79 82 ! 80 83 CALL p4z_che ! initialize the chemical constants … … 88 91 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt ) ! Relaxation of some tracers 89 92 ! 93 ! ! set time step size (Euler/Leapfrog) 94 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ; rfact = rdttrc(1) ! at nittrc000 95 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ; rfact = 2. * rdttrc(1) ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 96 ENDIF 97 ! 98 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 99 rfactr = 1. / rfact 100 rfact2 = rfact / FLOAT( nrdttrc ) 101 rfact2r = 1. / rfact2 102 xstep = rfact2 / rday ! Time step duration for biology 103 IF(lwp) WRITE(numout,*) 104 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rdt = ', rdttra(1) 105 IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2 106 IF(lwp) WRITE(numout,*) 107 ENDIF 108 109 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN 110 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 111 trb(:,:,:,jn) = trn(:,:,:,jn) 112 END DO 113 ENDIF 114 ! 90 115 IF( ndayflxtr /= nday_year ) THEN ! New days 91 116 ! … … 105 130 DO jnt = 1, nrdttrc ! Potential time splitting if requested 106 131 ! 107 CALL p4z_bio (kt, jnt) ! Biology 108 CALL p4z_sed (kt, jnt) ! Sedimentation 109 ! 132 CALL p4z_bio( kt, jnt ) ! Biology 133 CALL p4z_sed( kt, jnt ) ! Sedimentation 134 CALL p4z_lys( kt, jnt ) ! Compute CaCO3 saturation 135 CALL p4z_flx( kt, jnt ) ! Compute surface fluxes 136 ! 137 xnegtr(:,:,:) = 1.e0 110 138 DO jn = jp_pcs0, jp_pcs1 111 trb(:,:,:,jn) = trn(:,:,:,jn) 112 ENDDO 113 ! 139 DO jk = 1, jpk 140 DO jj = 1, jpj 141 DO ji = 1, jpi 142 IF( ( trb(ji,jj,jk,jn) + tra(ji,jj,jk,jn) ) < 0.e0 ) THEN 143 ztra = ABS( trb(ji,jj,jk,jn) ) / ( ABS( tra(ji,jj,jk,jn) ) + rtrn ) 144 xnegtr(ji,jj,jk) = MIN( xnegtr(ji,jj,jk), ztra ) 145 ENDIF 146 END DO 147 END DO 148 END DO 149 END DO 150 ! ! where at least 1 tracer concentration becomes negative 151 ! ! 152 DO jn = jp_pcs0, jp_pcs1 153 trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 154 END DO 155 ! 156 DO jn = jp_pcs0, jp_pcs1 157 tra(:,:,:,jn) = 0._wp 158 END DO 159 ! 160 IF( ln_top_euler ) THEN 161 DO jn = jp_pcs0, jp_pcs1 162 trn(:,:,:,jn) = trb(:,:,:,jn) 163 END DO 164 ENDIF 114 165 END DO 115 166 116 IF( l_trdtrc ) THEN 117 DO jn = 1, jp_pisces 118 jl = jn + jp_pcs0 - 1 119 ztrdpis(:,:,:,jn) = ( ztrdpis(:,:,:,jn) - trn(:,:,:,jl) ) * rfact2r 120 ENDDO 121 ENDIF 122 CALL p4z_lys( kt ) ! Compute CaCO3 saturation 123 CALL p4z_flx( kt ) ! Compute surface fluxes 124 125 DO jn = jp_pcs0, jp_pcs1 126 CALL lbc_lnk( trn(:,:,:,jn), 'T', 1. ) 127 CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 128 CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) 167 #if defined key_kriest 168 ! 169 zcoef1 = 1.e0 / xkr_massp 170 zcoef2 = 1.e0 / xkr_massp / 1.1 171 DO jk = 1,jpkm1 172 trb(:,:,jk,jpnum) = MAX( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk) ) 173 trb(:,:,jk,jpnum) = MIN( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2 ) 129 174 END DO 130 175 ! 176 #endif 177 ! 178 ! 179 IF( l_trdtrc ) THEN 180 DO jn = jp_pcs0, jp_pcs1 181 CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 182 END DO 183 END IF 184 ! 131 185 IF( lk_sed ) THEN 132 186 ! … … 134 188 ! 135 189 DO jn = jp_pcs0, jp_pcs1 136 CALL lbc_lnk( tr n(:,:,:,jn), 'T', 1. )190 CALL lbc_lnk( trb(:,:,:,jn), 'T', 1. ) 137 191 END DO 138 192 ! … … 141 195 IF( lrst_trc ) CALL p4z_rst( kt, 'WRITE' ) !* Write PISCES informations in restart file 142 196 ! 143 IF( l_trdtrc ) THEN 144 DO jn = 1, jp_pisces 145 jl = jn + jp_pcs0 - 1 146 ztrdpis(:,:,:,jn) = ztrdpis(:,:,:,jn) + tra(:,:,:,jl) 147 CALL trd_trc( ztrdpis(:,:,:,jn), jn, jptra_sms, kt ) ! save trends 148 END DO 149 CALL wrk_dealloc( jpi, jpj, jpk, jp_pisces, ztrdpis ) 150 END IF 151 ! 197 152 198 IF( lk_iomput .OR. ln_check_mass ) CALL p4z_chk_mass( kt ) ! Mass conservation checking 153 199 … … 280 326 ztmas = tmask(ji,jj,jk) 281 327 ztmas1 = 1. - tmask(ji,jj,jk) 282 zcaralk = tr n(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) )283 zco3 = ( zcaralk - tr n(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1284 zbicarb = ( 2. * tr n(ji,jj,jk,jpdic) - zcaralk )328 zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 329 zco3 = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 330 zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 285 331 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 286 332 END DO … … 361 407 REAL(wp) :: silmean = 91.51 ! mean value of silicate 362 408 ! 363 REAL(wp) :: zarea, zalksum, zpo4sum, zno3sum, zsilsum 409 REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 410 REAL(wp) :: zalksumb, zpo4sumb, zno3sumb, zsilsumb 364 411 !!--------------------------------------------------------------------- 365 412 … … 374 421 zarea = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6 375 422 376 zalksum = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea377 zpo4sum = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r378 zno3sum = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3379 zsilsum = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea423 zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:) ) * zarea 424 zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 425 zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 426 zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 380 427 381 IF(lwp) WRITE(numout,*) ' TALK mean : ', zalksum 382 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksum 383 384 IF(lwp) WRITE(numout,*) ' PO4 mean : ', zpo4sum 385 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sum 386 387 IF(lwp) WRITE(numout,*) ' NO3 mean : ', zno3sum 388 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sum 389 390 IF(lwp) WRITE(numout,*) ' SiO3 mean : ', zsilsum 391 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsum ) 392 ! 393 ENDIF 394 428 IF(lwp) WRITE(numout,*) ' TALKN mean : ', zalksumn 429 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 430 431 IF(lwp) WRITE(numout,*) ' PO4N mean : ', zpo4sumn 432 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 433 434 IF(lwp) WRITE(numout,*) ' NO3N mean : ', zno3sumn 435 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 436 437 IF(lwp) WRITE(numout,*) ' SiO3N mean : ', zsilsumn 438 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 439 ! 440 ! 441 IF( .NOT. ln_top_euler ) THEN 442 zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:) ) * zarea 443 zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:) ) * zarea * po4r 444 zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:) ) * zarea * rno3 445 zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:) ) * zarea 446 447 IF(lwp) WRITE(numout,*) ' ' 448 IF(lwp) WRITE(numout,*) ' TALKB mean : ', zalksumb 449 trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 450 451 IF(lwp) WRITE(numout,*) ' PO4B mean : ', zpo4sumb 452 trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 453 454 IF(lwp) WRITE(numout,*) ' NO3B mean : ', zno3sumb 455 trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 456 457 IF(lwp) WRITE(numout,*) ' SiO3B mean : ', zsilsumb 458 trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 459 ENDIF 460 ! 461 ENDIF 462 ! 395 463 END SUBROUTINE p4z_dmp 396 464 … … 404 472 !!--------------------------------------------------------------------- 405 473 ! 406 INTEGER , INTENT( in ) :: kt ! ocean time-step index 407 REAL(wp) :: zfact 408 !! 474 INTEGER, INTENT( in ) :: kt ! ocean time-step index 475 REAL(wp) :: zrdenittot, zsdenittot, znitrpottot 476 CHARACTER(LEN=100) :: cltxt 477 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 478 INTEGER :: jk 479 !!---------------------------------------------------------------------- 480 481 ! 409 482 !!--------------------------------------------------------------------- 410 483 … … 413 486 CALL ctl_opn( numco2, 'carbon.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 414 487 CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 488 CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 489 xfact1 = rfact2r * 12. / 1.e15 * ryyss ! conversion molC/kt --> PgC/yr 490 xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/s ----> TgN/m3/yr 491 xfact3 = 1.e+3 * rfact2r * rno3 ! conversion molC/l/kt ----> molN/m3/s 492 cltxt='time-step Alkalinity Nitrate Phosphorus Silicate Iron' 493 IF( lwp ) WRITE(numnut,*) TRIM(cltxt) 494 IF( lwp ) WRITE(numnut,*) 415 495 ENDIF 416 496 ENDIF 417 497 498 ! 418 499 IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 419 500 ! Compute the budget of NO3, ALK, Si, Fer … … 431 512 ENDIF 432 513 ! 433 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 514 IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 515 po4budget = glob_sum( ( trn(:,:,:,jppo4) & 516 & + trn(:,:,:,jpphy) + trn(:,:,:,jpdia) & 517 & + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) & 518 & + trn(:,:,:,jppoc) & 519 #if ! defined key_kriest 520 & + trn(:,:,:,jpgoc) & 521 #endif 522 & + trn(:,:,:,jpdoc) ) * cvol(:,:,:) ) 523 po4budget = po4budget / areatot 524 CALL iom_put( "ppo4tot", po4budget ) 525 ENDIF 526 ! 527 IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 434 528 silbudget = glob_sum( ( trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) & 435 529 & + trn(:,:,:,jpdsi) ) * cvol(:,:,:) ) … … 439 533 ENDIF 440 534 ! 441 IF( iom_use( "palktot" ) .OR. 535 IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 442 536 alkbudget = glob_sum( ( trn(:,:,:,jpno3) * rno3 & 443 537 & + trn(:,:,:,jptal) & … … 448 542 ENDIF 449 543 ! 450 IF( iom_use( "pfertot" ) .OR. 544 IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 451 545 ferbudget = glob_sum( ( trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) & 452 546 & + trn(:,:,:,jpdfe) & … … 462 556 ENDIF 463 557 ! 558 559 ! Global budget of N SMS : denitrification in the water column and in the sediment 560 ! nitrogen fixation by the diazotrophs 561 ! -------------------------------------------------------------------------------- 562 IF( iom_use( "tnfix" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 563 znitrpottot = glob_sum ( nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 564 CALL iom_put( "tnfix" , znitrpottot * 1.e+3 * rno3 ) ! Global nitrogen fixation molC/l to molN/m3 565 ENDIF 566 ! 567 IF( iom_use( "tdenit" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 568 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 569 CALL iom_put( "tdenit" , zrdenittot * 1.e+3 * rno3 ) ! Total denitrification molC/l to molN/m3 570 ENDIF 571 ! 572 IF( iom_use( "Sdenit" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 573 zsdenittot = glob_sum ( sdenit(:,:) * e1e2t(:,:) ) 574 CALL iom_put( "Sdenit", sdenit(:,:) * xfact3 * tmask(:,:,1) ) ! Nitrate reduction in the sediments 575 ENDIF 576 464 577 IF( ln_check_mass .AND. kt == nitend ) THEN ! Compute the budget of NO3, ALK, Si, Fer 465 zfact = rfact2r * 12. / 1.e15 * ryyss ! conversion molC/kt --> PgC/year466 578 t_atm_co2_flx = t_atm_co2_flx / glob_sum( e1e2t(:,:) ) 467 t_oce_co2_flx = t_oce_co2_flx * zfact* (-1 )468 tpp = tpp * 1000. * zfact469 t_oce_co2_exp = t_oce_co2_exp * 1000. * zfact579 t_oce_co2_flx = t_oce_co2_flx * xfact1 * (-1 ) 580 tpp = tpp * 1000. * xfact1 581 t_oce_co2_exp = t_oce_co2_exp * 1000. * xfact1 470 582 IF( lwp ) WRITE(numco2,9000) ndastp, t_atm_co2_flx, t_oce_co2_flx, tpp, t_oce_co2_exp 471 IF( lwp ) WRITE(numnut,9 500) ndastp, alkbudget * 1.e+06, &583 IF( lwp ) WRITE(numnut,9100) ndastp, alkbudget * 1.e+06, & 472 584 & no3budget * rno3 * 1.e+06, & 585 & po4budget * po4r * 1.e+06, & 473 586 & silbudget * 1.e+06, & 474 587 & ferbudget * 1.e+09 588 ! 589 IF( lwp ) WRITE(numnit,9200) ndastp, znitrpottot * xfact2 , & 590 & zrdenittot * xfact2 , & 591 & zsdenittot * xfact2 592 475 593 ENDIF 476 594 ! 477 595 9000 FORMAT(i8,f10.5,e18.10,f10.5,f10.5) 478 9500 FORMAT(i8,4e18.10) 596 9100 FORMAT(i8,5e18.10) 597 9200 FORMAT(i8,3f10.5) 598 479 599 ! 480 600 END SUBROUTINE p4z_chk_mass -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/par_sed.F90
- Property svn:keywords set to Id
r3443 r5901 7 7 !! ! 06-12 (C. Ethe) Orignal 8 8 !!---------------------------------------------------------------------- 9 !! $Id$ 9 10 #if defined key_sed 10 11 !! Domain characteristics -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sed.F90
- Property svn:keywords set to Id
r4292 r5901 160 160 INTEGER, PUBLIC :: numsed = 27 ! units 161 161 162 !! $Id$ 162 163 CONTAINS 163 164 -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedadv.F90
- Property svn:keywords set to Id
r3443 r5901 23 23 REAL(wp) :: eps = 1.e-13 24 24 25 !! $Id$ 25 26 CONTAINS 26 27 … … 438 439 !! MODULE sedbtb : Dummy module 439 440 !!====================================================================== 441 !! $Id$ 440 442 CONTAINS 441 443 SUBROUTINE sed_adv( kt ) ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedarr.F90
- Property svn:keywords set to Id
r3443 r5901 29 29 !!---------------------------------------------------------------------- 30 30 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 31 !! $ Header: /home/opalod/NEMOCVSROOT/NEMO/LIM_SRC/limtab.F90,v 1.2 2005/03/27 18:34:42 opalod Exp$31 !! $Id$ 32 32 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 33 33 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedbtb.F90
- Property svn:keywords set to Id
r3443 r5901 12 12 13 13 14 !! $Id$ 14 15 CONTAINS 15 16 … … 77 78 !! MODULE sedbtb : Dummy module 78 79 !!====================================================================== 80 !! $Id$ 79 81 CONTAINS 80 82 SUBROUTINE sed_btb( kt ) ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedchem.F90
- Property svn:keywords set to Id
r3443 r5901 163 163 DATA Ddsw / 999.842594 , 6.793952E-2 , -9.095290E-3, 1.001685E-4, -1.120083E-6, 6.536332E-9/ 164 164 165 !! $Id$ 165 166 CONTAINS 166 167 … … 559 560 !! MODULE sedchem : Dummy module 560 561 !!====================================================================== 562 !! $Id$ 561 563 CONTAINS 562 564 SUBROUTINE sed_chem( kt ) ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedco3.F90
- Property svn:keywords set to Id
r3443 r5901 23 23 !!---------------------------------------------------------------------- 24 24 25 !! $Id$ 25 26 CONTAINS 26 27 … … 188 189 !! MODULE sedco3 : Dummy module 189 190 !!====================================================================== 191 !! $Id$ 190 192 CONTAINS 191 193 SUBROUTINE sed_co3( kt ) ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/seddsr.F90
- Property svn:keywords set to Id
r3443 r5901 20 20 REAL(wp), DIMENSION(:), ALLOCATABLE, PUBLIC :: dens_mol_wgt ! molecular density 21 21 22 !! $Id$ 22 23 CONTAINS 23 24 … … 530 531 !! MODULE seddsr : Dummy module 531 532 !!====================================================================== 533 !! $Id$ 532 534 CONTAINS 533 535 SUBROUTINE sed_dsr ( kt ) -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/seddta.F90
- Property svn:keywords set to Id
r3443 r5901 28 28 #endif 29 29 30 !! $Id$ 30 31 CONTAINS 31 32 … … 268 269 !! MODULE seddta : Dummy module 269 270 !!====================================================================== 271 !! $Id$ 270 272 CONTAINS 271 273 SUBROUTINE sed_dta ( kt ) -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedini.F90
- Property svn:keywords set to Id
r4292 r5901 55 55 PUBLIC sed_init ! routine called by opa.F90 56 56 57 !! $Id$ 57 58 CONTAINS 58 59 … … 856 857 !! Dummy module : NO Sediment model 857 858 !!---------------------------------------------------------------------- 859 !! $Id$ 858 860 CONTAINS 859 861 SUBROUTINE sed_ini ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedmat.F90
- Property svn:keywords set to Id
r3443 r5901 22 22 23 23 24 !! $Id$ 24 25 CONTAINS 25 26 … … 257 258 !! MODULE sedmat : Dummy module 258 259 !!====================================================================== 260 !! $Id$ 259 261 CONTAINS 260 262 SUBROUTINE sed_mat ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedmbc.F90
- Property svn:keywords set to Id
r3443 r5901 36 36 REAL(wp) :: src13ca 37 37 38 !! $Id$ 38 39 CONTAINS 39 40 … … 311 312 !! MODULE sedmbc : Dummy module 312 313 !!====================================================================== 314 !! $Id$ 313 315 CONTAINS 314 316 SUBROUTINE sed_mbc( kt ) ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedmodel.F90
- Property svn:keywords set to Id
r3443 r5901 17 17 LOGICAL, PUBLIC, PARAMETER :: lk_sed = .TRUE. !: sediment flag 18 18 19 !! $Id$ 19 20 CONTAINS 20 21 … … 47 48 !!====================================================================== 48 49 LOGICAL, PUBLIC, PARAMETER :: lk_sed = .FALSE. !: sediment flag 50 !! $Id$ 49 51 CONTAINS 50 52 SUBROUTINE sed_model( kt ) ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedrst.F90
- Property svn:keywords set to Id
r3443 r5901 25 25 26 26 27 !! $Id$ 27 28 CONTAINS 28 29 … … 270 271 !! MODULE sedrst : Dummy module 271 272 !!====================================================================== 273 !! $Id$ 272 274 CONTAINS 273 275 SUBROUTINE sed_rst_read ! Empty routines -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedsfc.F90
- Property svn:keywords set to Id
r3443 r5901 12 12 PUBLIC sed_sfc 13 13 14 !! $Id$ 14 15 CONTAINS 15 16 … … 67 68 !! MODULE sedsfc : Dummy module 68 69 !!====================================================================== 70 !! $Id$ 69 71 CONTAINS 70 72 SUBROUTINE sed_sfc ( kt ) -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedstp.F90
- Property svn:keywords set to Id
r3443 r5901 23 23 PUBLIC sed_stp ! called by step.F90 24 24 25 !! $Id$ 25 26 CONTAINS 26 27 … … 69 70 !! MODULE sedstp : Dummy module 70 71 !!====================================================================== 72 !! $Id$ 71 73 CONTAINS 72 74 SUBROUTINE sed_stp( kt ) ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedwri.F90
- Property svn:keywords set to Id
r3443 r5901 25 25 INTEGER, ALLOCATABLE, SAVE, DIMENSION(:) :: ndext51 26 26 27 !! $Id$ 27 28 CONTAINS 28 29 … … 264 265 !! MODULE sedwri : Dummy module 265 266 !!====================================================================== 267 !! $Id$ 266 268 CONTAINS 267 269 SUBROUTINE sed_wri( kt ) ! Empty routine -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/par_pisces.F90
r3680 r5901 63 63 INTEGER, PUBLIC, PARAMETER :: jpdia = 11 !: Diatoms Concentration 64 64 INTEGER, PUBLIC, PARAMETER :: jpmes = 12 !: Mesozooplankton Concentration 65 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: (big)Silicate Concentration65 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: Diatoms Silicate Concentration 66 66 INTEGER, PUBLIC, PARAMETER :: jpfer = 14 !: Iron Concentration 67 67 INTEGER, PUBLIC, PARAMETER :: jpnum = 15 !: Big iron particles Concentration 68 68 INTEGER, PUBLIC, PARAMETER :: jpsfe = 16 !: number of particulate organic phosphate concentration 69 69 INTEGER, PUBLIC, PARAMETER :: jpdfe = 17 !: Diatoms iron Concentration 70 INTEGER, PUBLIC, PARAMETER :: jpgsi = 18 !: DiatomsSilicate Concentration70 INTEGER, PUBLIC, PARAMETER :: jpgsi = 18 !: (big) Silicate Concentration 71 71 INTEGER, PUBLIC, PARAMETER :: jpnfe = 19 !: Nano iron Concentration 72 72 INTEGER, PUBLIC, PARAMETER :: jpnch = 20 !: Nano Chlorophyll Concentration … … 102 102 INTEGER, PUBLIC, PARAMETER :: jpdia = 11 !: Diatoms Concentration 103 103 INTEGER, PUBLIC, PARAMETER :: jpmes = 12 !: Mesozooplankton Concentration 104 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: (big)Silicate Concentration104 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: Diatoms Silicate Concentration 105 105 INTEGER, PUBLIC, PARAMETER :: jpfer = 14 !: Iron Concentration 106 106 INTEGER, PUBLIC, PARAMETER :: jpbfe = 15 !: Big iron particles Concentration … … 108 108 INTEGER, PUBLIC, PARAMETER :: jpsfe = 17 !: Small iron particles Concentration 109 109 INTEGER, PUBLIC, PARAMETER :: jpdfe = 18 !: Diatoms iron Concentration 110 INTEGER, PUBLIC, PARAMETER :: jpgsi = 19 !: DiatomsSilicate Concentration110 INTEGER, PUBLIC, PARAMETER :: jpgsi = 19 !: (big) Silicate Concentration 111 111 INTEGER, PUBLIC, PARAMETER :: jpnfe = 20 !: Nano iron Concentration 112 112 INTEGER, PUBLIC, PARAMETER :: jpnch = 21 !: Nano Chlorophyll Concentration -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r5038 r5901 106 106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 107 107 108 !!* Array used to indicate negative tracer values109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr !: ???110 111 108 #if defined key_kriest 112 109 !!* Kriest parameter for aggregation … … 131 128 !!---------------------------------------------------------------------- 132 129 USE lib_mpp , ONLY: ctl_warn 133 INTEGER :: ierr( 6) ! Local variables130 INTEGER :: ierr(5) ! Local variables 134 131 !!---------------------------------------------------------------------- 135 132 ierr(:) = 0 … … 162 159 ALLOCATE( tgfunc(jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk) , STAT=ierr(5) ) 163 160 ! 164 !* Array used to indicate negative tracer values165 ALLOCATE( xnegtr(jpi,jpj,jpk) , STAT=ierr(6) )166 161 #endif 167 162 ! -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90
r5527 r5901 29 29 CONTAINS 30 30 31 31 32 SUBROUTINE trc_ice_ini_pisces 32 33 !!---------------------------------------------------------------------- 33 !! *** ROUTINE trc_ice_ini_pisces *** 34 !! *** ROUTINE trc_ini_pisces *** 35 !! 36 !! ** Purpose : Initialisation of the PISCES biochemical model 37 !!---------------------------------------------------------------------- 38 39 IF( lk_p4z ) THEN ; CALL p4z_ice_ini ! PISCES 40 ELSE ; CALL p2z_ice_ini ! LOBSTER 41 ENDIF 42 43 END SUBROUTINE trc_ice_ini_pisces 44 45 46 SUBROUTINE p4z_ice_ini 47 48 #if defined key_pisces 49 !!---------------------------------------------------------------------- 50 !! *** ROUTINE p4z_ice_ini *** 34 51 !! 35 52 !! ** Purpose : PISCES fake sea ice model setting … … 58 75 59 76 !--- Dummy variables 60 REAL(wp), DIMENSION(jptra,2) & 61 :: zratio ! effective ice-ocean tracer cc ratio 77 REAL(wp), DIMENSION(jp_pisces,2) :: zratio ! effective ice-ocean tracer cc ratio 78 REAL(wp), DIMENSION(jp_pisces,4) :: zpisc ! prescribes concentration 79 ! ! 1:global, 2:Arctic, 3:Antarctic, 4:Baltic 80 62 81 REAL(wp), DIMENSION(2) :: zrs ! ice-ocean salinity ratio, 1 - global, 2- Baltic 63 82 REAL(wp) :: zsice_bal ! prescribed ice salinity in the Baltic … … 80 99 ! fluxes 81 100 82 !--- Global case83 IF ( cn_trc_o(jpdic) == 'GL ' ) trc_o(:,:,jpdic) = 1.99e-3_wp84 IF ( cn_trc_o(jpdoc) == 'GL ' ) trc_o(:,:,jpdoc) = 2.04e-5_wp85 IF ( cn_trc_o(jptal) == 'GL ' ) trc_o(:,:,jptal) = 2.31e-3_wp86 IF ( cn_trc_o(jpoxy) == 'GL ' ) trc_o(:,:,jpoxy) = 2.47e-4_wp87 IF ( cn_trc_o(jpcal) == 'GL ' ) trc_o(:,:,jpcal) = 1.04e-8_wp88 IF ( cn_trc_o(jppo4) == 'GL ' ) trc_o(:,:,jppo4) = 5.77e-7_wp / po4r89 IF ( cn_trc_o(jppoc) == 'GL ' ) trc_o(:,:,jppoc) = 1.27e-6_wp101 !--- Global values 102 zpisc(jpdic,1) = 1.99e-3_wp 103 zpisc(jpdoc,1) = 2.04e-5_wp 104 zpisc(jptal,1) = 2.31e-3_wp 105 zpisc(jpoxy,1) = 2.47e-4_wp 106 zpisc(jpcal,1) = 1.04e-8_wp 107 zpisc(jppo4,1) = 5.77e-7_wp / po4r 108 zpisc(jppoc,1) = 1.27e-6_wp 90 109 # if ! defined key_kriest 91 IF ( cn_trc_o(jpgoc) == 'GL ' ) trc_o(:,:,jpgoc) = 5.23e-8_wp92 IF ( cn_trc_o(jpbfe) == 'GL ' ) trc_o(:,:,jpbfe) = 9.84e-13_wp110 zpisc(jpgoc,1) = 5.23e-8_wp 111 zpisc(jpbfe,1) = 9.84e-13_wp 93 112 # else 94 IF ( cn_trc_o(jpnum) == 'GL ' ) trc_o(:,:,jpnum) = 0. ! could not get this value since did not use it113 zpisc(jpnum,1) = 0. ! could not get this value since did not use it 95 114 # endif 96 IF ( cn_trc_o(jpsil) == 'GL ' ) trc_o(:,:,jpsil) = 7.36e-6_wp97 IF ( cn_trc_o(jpdsi) == 'GL ' ) trc_o(:,:,jpdsi) = 1.07e-7_wp98 IF ( cn_trc_o(jpgsi) == 'GL ' ) trc_o(:,:,jpgsi) = 1.53e-8_wp99 IF ( cn_trc_o(jpphy) == 'GL ' ) trc_o(:,:,jpphy) = 9.57e-8_wp100 IF ( cn_trc_o(jpdia) == 'GL ' ) trc_o(:,:,jpdia) = 4.24e-7_wp101 IF ( cn_trc_o(jpzoo) == 'GL ' ) trc_o(:,:,jpzoo) = 6.07e-7_wp102 IF ( cn_trc_o(jpmes) == 'GL ' ) trc_o(:,:,jpmes) = 3.44e-7_wp103 IF ( cn_trc_o(jpfer) == 'GL ' ) trc_o(:,:,jpfer) = 4.06e-10_wp104 IF ( cn_trc_o(jpsfe) == 'GL ' ) trc_o(:,:,jpsfe) = 2.51e-11_wp105 IF ( cn_trc_o(jpdfe) == 'GL ' ) trc_o(:,:,jpdfe) = 6.57e-12_wp106 IF ( cn_trc_o(jpnfe) == 'GL ' ) trc_o(:,:,jpnfe) = 1.76e-11_wp107 IF ( cn_trc_o(jpnch) == 'GL ' ) trc_o(:,:,jpnch) = 1.67e-7_wp108 IF ( cn_trc_o(jpdch) == 'GL ' ) trc_o(:,:,jpdch) = 1.02e-7_wp109 IF ( cn_trc_o(jpno3) == 'GL ' ) trc_o(:,:,jpno3) = 5.79e-6_wp / rno3110 IF ( cn_trc_o(jpnh4) == 'GL ' ) trc_o(:,:,jpnh4) = 3.22e-7_wp / rno3115 zpisc(jpsil,1) = 7.36e-6_wp 116 zpisc(jpdsi,1) = 1.07e-7_wp 117 zpisc(jpgsi,1) = 1.53e-8_wp 118 zpisc(jpphy,1) = 9.57e-8_wp 119 zpisc(jpdia,1) = 4.24e-7_wp 120 zpisc(jpzoo,1) = 6.07e-7_wp 121 zpisc(jpmes,1) = 3.44e-7_wp 122 zpisc(jpfer,1) = 4.06e-10_wp 123 zpisc(jpsfe,1) = 2.51e-11_wp 124 zpisc(jpdfe,1) = 6.57e-12_wp 125 zpisc(jpnfe,1) = 1.76e-11_wp 126 zpisc(jpnch,1) = 1.67e-7_wp 127 zpisc(jpdch,1) = 1.02e-7_wp 128 zpisc(jpno3,1) = 5.79e-6_wp / rno3 129 zpisc(jpnh4,1) = 3.22e-7_wp / rno3 111 130 112 131 !--- Arctic specificities (dissolved inorganic & DOM) 113 IF ( cn_trc_o(jpdic) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdic) = 1.98e-3_wp ; END WHERE ; ENDIF114 IF ( cn_trc_o(jpdoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdoc) = 6.00e-6_wp ; END WHERE ; ENDIF115 IF ( cn_trc_o(jptal) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jptal) = 2.13e-3_wp ; END WHERE ; ENDIF116 IF ( cn_trc_o(jpoxy) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpoxy) = 3.65e-4_wp ; END WHERE ; ENDIF117 IF ( cn_trc_o(jpcal) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpcal) = 1.50e-9_wp ; END WHERE ; ENDIF118 IF ( cn_trc_o(jppo4) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jppo4) = 4.09e-7_wp / po4r ; END WHERE ; ENDIF119 IF ( cn_trc_o(jppoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jppoc) = 4.05e-7_wp ; END WHERE ; ENDIF132 zpisc(jpdic,2) = 1.98e-3_wp 133 zpisc(jpdoc,2) = 6.00e-6_wp 134 zpisc(jptal,2) = 2.13e-3_wp 135 zpisc(jpoxy,2) = 3.65e-4_wp 136 zpisc(jpcal,2) = 1.50e-9_wp 137 zpisc(jppo4,2) = 4.09e-7_wp / po4r 138 zpisc(jppoc,2) = 4.05e-7_wp 120 139 # if ! defined key_kriest 121 IF ( cn_trc_o(jpgoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpgoc) = 2.84e-8_wp ; END WHERE ; ENDIF122 IF ( cn_trc_o(jpbfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpbfe) = 7.03e-13_wp ; END WHERE ; ENDIF140 zpisc(jpgoc,2) = 2.84e-8_wp 141 zpisc(jpbfe,2) = 7.03e-13_wp 123 142 # else 124 IF ( cn_trc_o(jpnum) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnum) = 0.00e-00_wp ; END WHERE ; ENDIF143 zpisc(jpnum,2) = 0.00e-00_wp 125 144 # endif 126 IF ( cn_trc_o(jpsil) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpsil) = 6.87e-6_wp ; END WHERE ; ENDIF127 IF ( cn_trc_o(jpdsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdsi) = 1.73e-7_wp ; END WHERE ; ENDIF128 IF ( cn_trc_o(jpgsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpgsi) = 7.93e-9_wp ; END WHERE ; ENDIF129 IF ( cn_trc_o(jpphy) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpphy) = 5.25e-7_wp ; END WHERE ; ENDIF130 IF ( cn_trc_o(jpdia) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdia) = 7.75e-7_wp ; END WHERE ; ENDIF131 IF ( cn_trc_o(jpzoo) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpzoo) = 3.34e-7_wp ; END WHERE ; ENDIF132 IF ( cn_trc_o(jpmes) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpmes) = 2.49e-7_wp ; END WHERE ; ENDIF133 IF ( cn_trc_o(jpfer) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpfer) = 1.43e-9_wp ; END WHERE ; ENDIF134 IF ( cn_trc_o(jpsfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpsfe) = 2.21e-11_wp ; END WHERE ; ENDIF135 IF ( cn_trc_o(jpdfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdfe) = 2.04e-11_wp ; END WHERE ; ENDIF136 IF ( cn_trc_o(jpnfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnfe) = 1.75e-11_wp ; END WHERE ; ENDIF137 IF ( cn_trc_o(jpnch) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnch) = 1.46e-07_wp ; END WHERE ; ENDIF138 IF ( cn_trc_o(jpdch) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpdch) = 2.36e-07_wp ; END WHERE ; ENDIF139 IF ( cn_trc_o(jpno3) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpno3) = 3.51e-06_wp / rno3 ; END WHERE ; ENDIF140 IF ( cn_trc_o(jpnh4) == 'AA ' ) THEN ; WHERE( gphit(:,:) >= 00._wp ) ; trc_o(:,:,jpnh4) = 6.15e-08_wp / rno3 ; END WHERE ; ENDIF145 zpisc(jpsil,2) = 6.87e-6_wp 146 zpisc(jpdsi,2) = 1.73e-7_wp 147 zpisc(jpgsi,2) = 7.93e-9_wp 148 zpisc(jpphy,2) = 5.25e-7_wp 149 zpisc(jpdia,2) = 7.75e-7_wp 150 zpisc(jpzoo,2) = 3.34e-7_wp 151 zpisc(jpmes,2) = 2.49e-7_wp 152 zpisc(jpfer,2) = 1.43e-9_wp 153 zpisc(jpsfe,2) = 2.21e-11_wp 154 zpisc(jpdfe,2) = 2.04e-11_wp 155 zpisc(jpnfe,2) = 1.75e-11_wp 156 zpisc(jpnch,2) = 1.46e-07_wp 157 zpisc(jpdch,2) = 2.36e-07_wp 158 zpisc(jpno3,2) = 3.51e-06_wp / rno3 159 zpisc(jpnh4,2) = 6.15e-08_wp / rno3 141 160 142 161 !--- Antarctic specificities (dissolved inorganic & DOM) 143 IF ( cn_trc_o(jpdic) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdic) = 2.20e-3_wp ; END WHERE ; ENDIF144 IF ( cn_trc_o(jpdoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdoc) = 7.02e-6_wp ; END WHERE ; ENDIF145 IF ( cn_trc_o(jptal) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jptal) = 2.37e-3_wp ; END WHERE ; ENDIF146 IF ( cn_trc_o(jpoxy) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpoxy) = 3.42e-4_wp ; END WHERE ; ENDIF147 IF ( cn_trc_o(jpcal) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpcal) = 3.17e-9_wp ; END WHERE ; ENDIF148 IF ( cn_trc_o(jppo4) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jppo4) = 1.88e-6_wp / po4r ; END WHERE ; ENDIF149 IF ( cn_trc_o(jppoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jppoc) = 1.13e-6_wp ; END WHERE ; ENDIF162 zpisc(jpdic,3) = 2.20e-3_wp 163 zpisc(jpdoc,3) = 7.02e-6_wp 164 zpisc(jptal,3) = 2.37e-3_wp 165 zpisc(jpoxy,3) = 3.42e-4_wp 166 zpisc(jpcal,3) = 3.17e-9_wp 167 zpisc(jppo4,3) = 1.88e-6_wp / po4r 168 zpisc(jppoc,3) = 1.13e-6_wp 150 169 # if ! defined key_kriest 151 IF ( cn_trc_o(jpgoc) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpgoc) = 2.89e-8_wp ; END WHERE ; ENDIF152 IF ( cn_trc_o(jpbfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpbfe) = 5.63e-13_wp ; END WHERE ; ENDIF170 zpisc(jpgoc,3) = 2.89e-8_wp 171 zpisc(jpbfe,3) = 5.63e-13_wp 153 172 # else 154 IF ( cn_trc_o(jpnum) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpnum) = 0.00e-00_wp ; END WHERE ; ENDIF173 zpisc(jpnum,3) = 0.00e-00_wp 155 174 # endif 156 IF ( cn_trc_o(jpsil) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpsil) = 4.96e-5_wp ; END WHERE ; ENDIF157 IF ( cn_trc_o(jpdsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdsi) = 5.63e-7_wp ; END WHERE ; ENDIF158 IF ( cn_trc_o(jpgsi) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpgsi) = 5.35e-8_wp ; END WHERE ; ENDIF159 IF ( cn_trc_o(jpphy) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpphy) = 8.10e-7_wp ; END WHERE ; ENDIF160 IF ( cn_trc_o(jpdia) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdia) = 5.77e-7_wp ; END WHERE ; ENDIF161 IF ( cn_trc_o(jpzoo) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpzoo) = 6.68e-7_wp ; END WHERE ; ENDIF162 IF ( cn_trc_o(jpmes) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpmes) = 3.55e-7_wp ; END WHERE ; ENDIF163 IF ( cn_trc_o(jpfer) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpfer) = 1.62e-10_wp ; END WHERE ; ENDIF164 IF ( cn_trc_o(jpsfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpsfe) = 2.29e-11_wp ; END WHERE ; ENDIF165 IF ( cn_trc_o(jpdfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdfe) = 8.75e-12_wp ; END WHERE ; ENDIF166 IF ( cn_trc_o(jpnfe) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpnfe) = 1.48e-11_wp ; END WHERE ; ENDIF167 IF ( cn_trc_o(jpnch) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpnch) = 2.02e-7_wp ; END WHERE ; ENDIF168 IF ( cn_trc_o(jpdch) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpdch) = 1.60e-7_wp ; END WHERE ; ENDIF169 IF ( cn_trc_o(jpno3) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpno3) = 2.64e-5_wp / rno3 ; END WHERE ; ENDIF170 IF ( cn_trc_o(jpnh4) == 'AA ' ) THEN ; WHERE( gphit(:,:) < 00._wp ) ; trc_o(:,:,jpnh4) = 3.39e-7_wp / rno3 ; END WHERE ; ENDIF175 zpisc(jpsil,3) = 4.96e-5_wp 176 zpisc(jpdsi,3) = 5.63e-7_wp 177 zpisc(jpgsi,3) = 5.35e-8_wp 178 zpisc(jpphy,3) = 8.10e-7_wp 179 zpisc(jpdia,3) = 5.77e-7_wp 180 zpisc(jpzoo,3) = 6.68e-7_wp 181 zpisc(jpmes,3) = 3.55e-7_wp 182 zpisc(jpfer,3) = 1.62e-10_wp 183 zpisc(jpsfe,3) = 2.29e-11_wp 184 zpisc(jpdfe,3) = 8.75e-12_wp 185 zpisc(jpnfe,3) = 1.48e-11_wp 186 zpisc(jpnch,3) = 2.02e-7_wp 187 zpisc(jpdch,3) = 1.60e-7_wp 188 zpisc(jpno3,3) = 2.64e-5_wp / rno3 189 zpisc(jpnh4,3) = 3.39e-7_wp / rno3 171 190 172 191 !--- Baltic Sea particular case for ORCA configurations 173 IF( cp_cfg == "orca" ) THEN ! Baltic mask 174 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 175 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 176 trc_o(:,:,jpdic) = 1.14e-3_wp 177 trc_o(:,:,jpdoc) = 1.06e-5_wp 178 trc_o(:,:,jptal) = 1.16e-3_wp 179 trc_o(:,:,jpoxy) = 3.71e-4_wp 180 trc_o(:,:,jpcal) = 1.51e-9_wp 181 trc_o(:,:,jppo4) = 2.85e-9_wp / po4r 182 trc_o(:,:,jppoc) = 4.84e-7_wp 192 zpisc(jpdic,4) = 1.14e-3_wp 193 zpisc(jpdoc,4) = 1.06e-5_wp 194 zpisc(jptal,4) = 1.16e-3_wp 195 zpisc(jpoxy,4) = 3.71e-4_wp 196 zpisc(jpcal,4) = 1.51e-9_wp 197 zpisc(jppo4,4) = 2.85e-9_wp / po4r 198 zpisc(jppoc,4) = 4.84e-7_wp 183 199 # if ! defined key_kriest 184 trc_o(:,:,jpgoc) = 1.05e-8_wp185 trc_o(:,:,jpbfe) = 4.97e-13_wp200 zpisc(jpgoc,4) = 1.05e-8_wp 201 zpisc(jpbfe,4) = 4.97e-13_wp 186 202 # else 187 trc_o(:,:,jpnum) = 0. ! could not get this value203 zpisc(jpnum,4) = 0. ! could not get this value 188 204 # endif 189 trc_o(:,:,jpsil) = 4.91e-5_wp 190 trc_o(:,:,jpdsi) = 3.25e-7_wp 191 trc_o(:,:,jpgsi) = 1.93e-8_wp 192 trc_o(:,:,jpphy) = 6.64e-7_wp 193 trc_o(:,:,jpdia) = 3.41e-7_wp 194 trc_o(:,:,jpzoo) = 3.83e-7_wp 195 trc_o(:,:,jpmes) = 0.225e-6_wp 196 trc_o(:,:,jpfer) = 2.45e-9_wp 197 trc_o(:,:,jpsfe) = 3.89e-11_wp 198 trc_o(:,:,jpdfe) = 1.33e-11_wp 199 trc_o(:,:,jpnfe) = 2.62e-11_wp 200 trc_o(:,:,jpnch) = 1.17e-7_wp 201 trc_o(:,:,jpdch) = 9.69e-8_wp 202 trc_o(:,:,jpno3) = 5.36e-5_wp / rno3 203 trc_o(:,:,jpnh4) = 7.18e-7_wp / rno3 204 END WHERE 205 ENDIF ! cfg 205 zpisc(jpsil,4) = 4.91e-5_wp 206 zpisc(jpdsi,4) = 3.25e-7_wp 207 zpisc(jpgsi,4) = 1.93e-8_wp 208 zpisc(jpphy,4) = 6.64e-7_wp 209 zpisc(jpdia,4) = 3.41e-7_wp 210 zpisc(jpzoo,4) = 3.83e-7_wp 211 zpisc(jpmes,4) = 0.225e-6_wp 212 zpisc(jpfer,4) = 2.45e-9_wp 213 zpisc(jpsfe,4) = 3.89e-11_wp 214 zpisc(jpdfe,4) = 1.33e-11_wp 215 zpisc(jpnfe,4) = 2.62e-11_wp 216 zpisc(jpnch,4) = 1.17e-7_wp 217 zpisc(jpdch,4) = 9.69e-8_wp 218 zpisc(jpno3,4) = 5.36e-5_wp / rno3 219 zpisc(jpnh4,4) = 7.18e-7_wp / rno3 220 221 DO jn = jp_pcs0, jp_pcs1 222 IF( cn_trc_o(jn) == 'GL ' ) trc_o(:,:,jn) = zpisc(jn,1) ! Global case 223 IF( cn_trc_o(jn) == 'AA ' ) THEN 224 WHERE( gphit(:,:) >= 0._wp ) ; trc_o(:,:,jn) = zpisc(jn,2) ; END WHERE ! Arctic 225 WHERE( gphit(:,:) < 0._wp ) ; trc_o(:,:,jn) = zpisc(jn,3) ; END WHERE ! Antarctic 226 ENDIF 227 IF( cp_cfg == "orca" ) THEN ! Baltic Sea particular case for ORCA configurations 228 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 229 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 230 trc_o(:,:,jn) = zpisc(jn,4) 231 END WHERE 232 ENDIF 233 ENDDO 234 235 206 236 207 237 !----------------------------- … … 217 247 218 248 DO jn = jp_pcs0, jp_pcs1 219 IF 220 IF 221 IF 249 IF( trc_ice_ratio(jn) >= 0._wp ) zratio(jn,:) = trc_ice_ratio(jn) 250 IF( trc_ice_ratio(jn) == -1._wp ) zratio(jn,:) = zrs(:) 251 IF( trc_ice_ratio(jn) == -2._wp ) zratio(jn,:) = -9999.99_wp 222 252 END DO 223 253 … … 227 257 DO jn = jp_pcs0, jp_pcs1 228 258 !-- Everywhere but in the Baltic 229 IF ( trc_ice_ratio(jn) >= -1._wp ) THEN !! no prescribed concentration 230 !! (typically everything but iron) 259 IF ( trc_ice_ratio(jn) >= -1._wp ) THEN ! no prescribed conc. ; typically everything but iron) 231 260 trc_i(:,:,jn) = zratio(jn,1) * trc_o(:,:,jn) 232 ELSE !! prescribed concentration261 ELSE ! prescribed concentration 233 262 trc_i(:,:,jn) = trc_ice_prescr(jn) 234 263 ENDIF 235 264 236 265 !-- Baltic 237 IF( cp_cfg == "orca" ) THEN !! Baltic treated seperately for ORCA configs 238 IF ( trc_ice_ratio(jn) >= - 1._wp ) THEN !! no prescribed concentration 239 !! (typically everything but iron) 266 IF( cp_cfg == "orca" ) THEN ! Baltic treated seperately for ORCA configs 267 IF ( trc_ice_ratio(jn) >= - 1._wp ) THEN ! no prescribed conc. ; typically everything but iron) 240 268 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 241 269 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) 242 270 trc_i(:,:,jn) = zratio(jn,2) * trc_o(:,:,jn) 243 271 END WHERE 244 ELSE ! !prescribed tracer concentration in ice272 ELSE ! prescribed tracer concentration in ice 245 273 WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. & 246 274 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp ) … … 251 279 ! 252 280 END DO ! jn 253 254 END SUBROUTINE trc_ice_ini_pisces 281 #endif 282 283 END SUBROUTINE p4z_ice_ini 284 285 SUBROUTINE p2z_ice_ini 286 #if defined key_pisces_reduced 287 !!---------------------------------------------------------------------- 288 !! *** ROUTINE p2z_ice_ini *** 289 !! 290 !! ** Purpose : Initialisation of the LOBSTER biochemical model 291 !!---------------------------------------------------------------------- 292 #endif 293 END SUBROUTINE p2z_ice_ini 294 255 295 256 296 #else -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r5038 r5901 27 27 PUBLIC trc_ini_pisces ! called by trcini.F90 module 28 28 29 30 # include "top_substitute.h90"31 29 !!---------------------------------------------------------------------- 32 30 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 71 69 USE p4zmort ! Mortality terms for phytoplankton 72 70 USE p4zlys ! Calcite saturation 71 USE p4zsed ! Sedimentation & burial 73 72 ! 74 73 REAL(wp), SAVE :: sco2 = 2.312e-3_wp 75 REAL(wp), SAVE :: alka0 = 2.42 3e-3_wp74 REAL(wp), SAVE :: alka0 = 2.426e-3_wp 76 75 REAL(wp), SAVE :: oxyg0 = 177.6e-6_wp 77 REAL(wp), SAVE :: po4 = 2.1 74e-6_wp76 REAL(wp), SAVE :: po4 = 2.165e-6_wp 78 77 REAL(wp), SAVE :: bioma0 = 1.000e-8_wp 79 REAL(wp), SAVE :: silic1 = 91. 65e-6_wp80 REAL(wp), SAVE :: no3 = 3 1.04e-6_wp * 7.625_wp78 REAL(wp), SAVE :: silic1 = 91.51e-6_wp 79 REAL(wp), SAVE :: no3 = 30.9e-6_wp * 7.625_wp 81 80 ! 82 81 INTEGER :: ji, jj, jk, ierr … … 97 96 ierr = ierr + p4z_rem_alloc() 98 97 ierr = ierr + p4z_flx_alloc() 98 ierr = ierr + p4z_sed_alloc() 99 99 ! 100 100 IF( lk_mpp ) CALL mpp_sum( ierr ) … … 107 107 CALL p4z_sms_init ! Maint routine 108 108 ! ! Time-step 109 rfact = rdttrc(1) ! ---------110 rfactr = 1. / rfact111 rfact2 = rfact / FLOAT( nrdttrc )112 rfact2r = 1. / rfact2113 114 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rdt = ', rdttra(1)115 IF(lwp) write(numout,*) ' PISCES Biology time step rfact2 = ', rfact2116 117 118 109 119 110 ! Set biological ratios … … 165 156 END IF 166 157 167 ! Time step duration for biology168 xstep = rfact2 / rday169 158 170 159 CALL p4z_sink_init ! vertical flux of particulate organic matter -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/PISCES/trcwri_pisces.F90
r5038 r5901 21 21 PUBLIC trc_wri_pisces 22 22 23 # include "top_substitute.h90" 23 !! * Substitutions 24 # include "domzgr_substitute.h90" 25 24 26 CONTAINS 25 27 -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90
r4610 r5901 4 4 !! Ocean passive tracers: advection trend 5 5 !!============================================================================== 6 !! History : 2.0 ! 05-11 (G. Madec) Original code 7 !! 3.0 ! 10-06 (C. Ethe) Adapted to passive tracers 6 !! History : 2.0 ! 2005-11 (G. Madec) Original code 7 !! 3.0 ! 2010-06 (C. Ethe) Adapted to passive tracers 8 !! 3.7 ! 2014-05 (G. Madec, C. Ethe) Add 2nd/4th order cases for CEN and FCT schemes 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_top … … 11 12 !! 'key_top' TOP models 12 13 !!---------------------------------------------------------------------- 13 !! trc_adv : compute ocean tracer advection trend 14 !! trc_adv_ctl : control the different options of advection scheme 15 !!---------------------------------------------------------------------- 16 USE oce_trc ! ocean dynamics and active tracers 17 USE trc ! ocean passive tracers variables 18 USE trcnam_trp ! passive tracers transport namelist variables 19 USE traadv_cen2 ! 2nd order centered scheme (tra_adv_cen2 routine) 20 USE traadv_tvd ! TVD scheme (tra_adv_tvd routine) 21 USE traadv_muscl ! MUSCL scheme (tra_adv_muscl routine) 22 USE traadv_muscl2 ! MUSCL2 scheme (tra_adv_muscl2 routine) 23 USE traadv_ubs ! UBS scheme (tra_adv_ubs routine) 24 USE traadv_qck ! QUICKEST scheme (tra_adv_qck routine) 25 USE traadv_eiv ! eddy induced velocity (tra_adv_eiv routine) 26 USE traadv_mle ! ML eddy induced velocity (tra_adv_mle routine) 27 USE ldftra_oce ! lateral diffusion coefficient on tracers 28 USE prtctl_trc ! Print control 14 !! trc_adv : compute ocean tracer advection trend 15 !! trc_adv_ini : control the different options of advection scheme 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! ocean dynamics and active tracers 18 USE trc ! ocean passive tracers variables 19 USE traadv_cen ! centered scheme (tra_adv_cen routine) 20 USE traadv_fct ! FCT scheme (tra_adv_fct routine) 21 USE traadv_mus ! MUSCL scheme (tra_adv_mus routine) 22 USE traadv_ubs ! UBS scheme (tra_adv_ubs routine) 23 USE traadv_qck ! QUICKEST scheme (tra_adv_qck routine) 24 USE traadv_mle ! ML eddy induced velocity (tra_adv_mle routine) 25 USE ldftra ! lateral diffusion coefficient on tracers 26 USE ldfslp ! Lateral diffusion: slopes of neutral surfaces 27 ! 28 USE prtctl_trc ! Print control 29 29 30 30 IMPLICIT NONE 31 31 PRIVATE 32 32 33 PUBLIC trc_adv ! routine called by step module 34 PUBLIC trc_adv_alloc ! routine called by nemogcm module 35 36 INTEGER :: nadv ! choice of the type of advection scheme 33 PUBLIC trc_adv 34 PUBLIC trc_adv_alloc 35 PUBLIC trc_adv_ini 36 37 ! !!* Namelist namtrc_adv * 38 LOGICAL :: ln_trcadv_cen ! centered scheme flag 39 INTEGER :: nn_cen_h, nn_cen_v ! =2/4 : horizontal and vertical choices of the order of CEN scheme 40 LOGICAL :: ln_trcadv_fct ! FCT scheme flag 41 INTEGER :: nn_fct_h, nn_fct_v ! =2/4 : horizontal and vertical choices of the order of FCT scheme 42 INTEGER :: nn_fct_zts ! >=1 : 2nd order FCT with vertical sub-timestepping 43 LOGICAL :: ln_trcadv_mus ! MUSCL scheme flag 44 LOGICAL :: ln_mus_ups ! use upstream scheme in vivcinity of river mouths 45 LOGICAL :: ln_trcadv_ubs ! UBS scheme flag 46 INTEGER :: nn_ubs_v ! =2/4 : vertical choice of the order of UBS scheme 47 LOGICAL :: ln_trcadv_qck ! QUICKEST scheme flag 48 49 ! ! choices of advection scheme: 50 INTEGER, PARAMETER :: np_NO_adv = 0 ! no T-S advection 51 INTEGER, PARAMETER :: np_CEN = 1 ! 2nd/4th order centered scheme 52 INTEGER, PARAMETER :: np_FCT = 2 ! 2nd/4th order Flux Corrected Transport scheme 53 INTEGER, PARAMETER :: np_FCT_zts = 3 ! 2nd order FCT scheme with vertical sub-timestepping 54 INTEGER, PARAMETER :: np_MUS = 4 ! MUSCL scheme 55 INTEGER, PARAMETER :: np_UBS = 5 ! 3rd order Upstream Biased Scheme 56 INTEGER, PARAMETER :: np_QCK = 6 ! QUICK scheme 57 58 INTEGER :: nadv ! chosen advection scheme 59 ! 37 60 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra 38 61 ! ! except at nitrrc000 (=rdttra) if neuler=0 … … 42 65 # include "vectopt_loop_substitute.h90" 43 66 !!---------------------------------------------------------------------- 44 !! NEMO/TOP 3. 3 , NEMO Consortium (2010)67 !! NEMO/TOP 3.7 , NEMO Consortium (2015) 45 68 !! $Id$ 46 69 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 52 75 !! *** ROUTINE trc_adv_alloc *** 53 76 !!---------------------------------------------------------------------- 54 77 ! 55 78 ALLOCATE( r2dt(jpk), STAT=trc_adv_alloc ) 56 79 ! 57 80 IF( trc_adv_alloc /= 0 ) CALL ctl_warn('trc_adv_alloc : failed to allocate array.') 58 81 ! 59 82 END FUNCTION trc_adv_alloc 60 83 … … 68 91 !! ** Method : - Update the tracer with the advection term following nadv 69 92 !!---------------------------------------------------------------------- 70 !!71 93 INTEGER, INTENT(in) :: kt ! ocean time-step index 72 94 ! 73 INTEGER :: jk 95 INTEGER :: jk ! dummy loop index 74 96 CHARACTER (len=22) :: charout 75 97 REAL(wp), POINTER, DIMENSION(:,:,:) :: zun, zvn, zwn ! effective velocity 76 98 !!---------------------------------------------------------------------- 77 99 ! 78 IF( nn_timing == 1 ) CALL timing_start('trc_adv') 79 ! 80 CALL wrk_alloc( jpi, jpj, jpk, zun, zvn, zwn ) 81 ! 82 83 IF( kt == nittrc000 ) CALL trc_adv_ctl ! initialisation & control of options 84 85 IF( ln_top_euler) THEN 86 r2dt(:) = rdttrc(:) ! = rdttrc (use Euler time stepping) 87 ELSE 88 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ! at nittrc000 89 r2dt(:) = rdttrc(:) ! = rdttrc (restarting with Euler time stepping) 90 ELSEIF( kt <= nittrc000 + 1 ) THEN ! at nittrc000 or nittrc000+1 91 r2dt(:) = 2. * rdttrc(:) ! = 2 rdttrc (leapfrog) 92 ENDIF 93 ENDIF 94 95 ! ! effective transport 100 IF( nn_timing == 1 ) CALL timing_start('trc_adv') 101 ! 102 CALL wrk_alloc( jpi,jpj,jpk, zun, zvn, zwn ) 103 ! 104 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ! at nittrc000 105 r2dt(:) = rdttrc(:) ! = rdttrc (use or restarting with Euler time stepping) 106 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+1 107 r2dt(:) = 2. * rdttrc(:) ! = 2 rdttrc (leapfrog) 108 ENDIF 109 ! !== effective transport ==! 96 110 DO jk = 1, jpkm1 97 ! ! eulerian transport only 98 zun(:,:,jk) = e2u (:,:) * fse3u(:,:,jk) * un(:,:,jk) 111 zun(:,:,jk) = e2u (:,:) * fse3u(:,:,jk) * un(:,:,jk) ! eulerian transport 99 112 zvn(:,:,jk) = e1v (:,:) * fse3v(:,:,jk) * vn(:,:,jk) 100 113 zwn(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) 101 !102 114 END DO 103 115 ! 104 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 116 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! add z-tilde and/or vvl corrections 105 117 zun(:,:,:) = zun(:,:,:) + un_td(:,:,:) 106 118 zvn(:,:,:) = zvn(:,:,:) + vn_td(:,:,:) 107 119 ENDIF 108 120 ! 109 zun(:,:,jpk) = 0._wp ! no transport trough the bottom 110 zvn(:,:,jpk) = 0._wp ! no transport trough the bottom 111 zwn(:,:,jpk) = 0._wp ! no transport trough the bottom 112 113 IF( lk_traldf_eiv .AND. .NOT. ln_traldf_grif ) & ! add the eiv transport (if necessary) 114 & CALL tra_adv_eiv( kt, nittrc000, zun, zvn, zwn, 'TRC' ) 115 ! 116 IF( ln_mle ) CALL tra_adv_mle( kt, nittrc000, zun, zvn, zwn, 'TRC' ) ! add the mle transport (if necessary) 117 ! 118 SELECT CASE ( nadv ) !== compute advection trend and add it to general trend ==! 119 CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, nittrc000, 'TRC', zun, zvn, zwn, trb, trn, tra, jptra ) ! 2nd order centered 120 CASE ( 2 ) ; CALL tra_adv_tvd ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) ! TVD 121 CASE ( 3 ) ; CALL tra_adv_muscl ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, tra, jptra, ln_trcadv_msc_ups ) ! MUSCL 122 CASE ( 4 ) ; CALL tra_adv_muscl2( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) ! MUSCL2 123 CASE ( 5 ) ; CALL tra_adv_ubs ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) ! UBS 124 CASE ( 6 ) ; CALL tra_adv_qck ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) ! QUICKEST 125 ! 126 CASE (-1 ) !== esopa: test all possibility with control print ==! 127 CALL tra_adv_cen2 ( kt, nittrc000, 'TRC', zun, zvn, zwn, trb, trn, tra, jptra ) 128 WRITE(charout, FMT="('adv1')") ; CALL prt_ctl_trc_info(charout) 129 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 130 CALL tra_adv_tvd ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) 131 WRITE(charout, FMT="('adv2')") ; CALL prt_ctl_trc_info(charout) 132 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 133 CALL tra_adv_muscl ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, tra, jptra, ln_trcadv_msc_ups ) 134 WRITE(charout, FMT="('adv3')") ; CALL prt_ctl_trc_info(charout) 135 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 136 CALL tra_adv_muscl2( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) 137 WRITE(charout, FMT="('adv4')") ; CALL prt_ctl_trc_info(charout) 138 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 139 CALL tra_adv_ubs ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) 140 WRITE(charout, FMT="('adv5')") ; CALL prt_ctl_trc_info(charout) 141 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 142 CALL tra_adv_qck ( kt, nittrc000, 'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) 143 WRITE(charout, FMT="('adv6')") ; CALL prt_ctl_trc_info(charout) 144 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 145 ! 121 IF( ln_ldfeiv .AND. .NOT. ln_traldf_triad ) & 122 & CALL ldf_eiv_trp( kt, nittrc000, zun, zvn, zwn, 'TRC' ) ! add the eiv transport 123 ! 124 IF( ln_mle ) CALL tra_adv_mle( kt, nittrc000, zun, zvn, zwn, 'TRC' ) ! add the mle transport 125 ! 126 zun(:,:,jpk) = 0._wp ! no transport trough the bottom 127 zvn(:,:,jpk) = 0._wp 128 zwn(:,:,jpk) = 0._wp 129 ! 130 ! 131 SELECT CASE ( nadv ) !== compute advection trend and add it to general trend ==! 132 ! 133 CASE ( np_CEN ) ! Centered : 2nd / 4th order 134 CALL tra_adv_cen ( kt, nittrc000,'TRC', zun, zvn, zwn , trn, tra, jptra, nn_cen_h, nn_cen_v ) 135 CASE ( np_FCT ) ! FCT : 2nd / 4th order 136 CALL tra_adv_fct ( kt, nittrc000,'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra, nn_fct_h, nn_fct_v ) 137 CASE ( np_FCT_zts ) ! 2nd order FCT with vertical time-splitting 138 CALL tra_adv_fct_zts( kt, nittrc000,'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra , nn_fct_zts ) 139 CASE ( np_MUS ) ! MUSCL 140 CALL tra_adv_mus ( kt, nittrc000,'TRC', r2dt, zun, zvn, zwn, trb, tra, jptra , ln_mus_ups ) 141 CASE ( np_UBS ) ! UBS 142 CALL tra_adv_ubs ( kt, nittrc000,'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra , nn_ubs_v ) 143 CASE ( np_QCK ) ! QUICKEST 144 CALL tra_adv_qck ( kt, nittrc000,'TRC', r2dt, zun, zvn, zwn, trb, trn, tra, jptra ) 145 ! 146 146 END SELECT 147 148 ! ! print mean trends (used for debugging) 149 IF( ln_ctl ) THEN 147 ! 148 IF( ln_ctl ) THEN !== print mean trends (used for debugging) 150 149 WRITE(charout, FMT="('adv ')") ; CALL prt_ctl_trc_info(charout) 151 150 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 152 151 END IF 153 152 ! 154 CALL wrk_dealloc( jpi, jpj, jpk,zun, zvn, zwn )153 CALL wrk_dealloc( jpi,jpj,jpk, zun, zvn, zwn ) 155 154 ! 156 155 IF( nn_timing == 1 ) CALL timing_stop('trc_adv') … … 159 158 160 159 161 SUBROUTINE trc_adv_ ctl160 SUBROUTINE trc_adv_ini 162 161 !!--------------------------------------------------------------------- 163 !! *** ROUTINE trc_adv_ ctl***162 !! *** ROUTINE trc_adv_ini *** 164 163 !! 165 164 !! ** Purpose : Control the consistency between namelist options for … … 167 166 !!---------------------------------------------------------------------- 168 167 INTEGER :: ioptio 169 !!---------------------------------------------------------------------- 170 171 ioptio = 0 ! Parameter control 172 IF( ln_trcadv_cen2 ) ioptio = ioptio + 1 173 IF( ln_trcadv_tvd ) ioptio = ioptio + 1 174 IF( ln_trcadv_muscl ) ioptio = ioptio + 1 175 IF( ln_trcadv_muscl2 ) ioptio = ioptio + 1 176 IF( ln_trcadv_ubs ) ioptio = ioptio + 1 177 IF( ln_trcadv_qck ) ioptio = ioptio + 1 178 IF( lk_esopa ) ioptio = 1 179 168 INTEGER :: ios ! Local integer output status for namelist read 169 !! 170 NAMELIST/namtrc_adv/ ln_trcadv_cen, nn_cen_h, nn_cen_v, & ! CEN 171 & ln_trcadv_fct, nn_fct_h, nn_fct_v, nn_fct_zts, & ! FCT 172 & ln_trcadv_mus, ln_mus_ups, & ! MUSCL 173 & ln_trcadv_ubs, nn_ubs_v, & ! UBS 174 & ln_trcadv_qck ! QCK 175 !!---------------------------------------------------------------------- 176 ! 177 REWIND( numnat_ref ) ! namtrc_adv in reference namelist 178 READ ( numnat_ref, namtrc_adv, IOSTAT = ios, ERR = 901) 179 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_adv in reference namelist', lwp ) 180 181 REWIND( numnat_cfg ) ! namtrc_adv in configuration namelist 182 READ ( numnat_cfg, namtrc_adv, IOSTAT = ios, ERR = 902 ) 183 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_adv in configuration namelist', lwp ) 184 IF(lwm) WRITE ( numont, namtrc_adv ) 185 186 IF(lwp) THEN ! Namelist print 187 WRITE(numout,*) 188 WRITE(numout,*) 'trc_adv_ini : choice/control of the tracer advection scheme' 189 WRITE(numout,*) '~~~~~~~~~~~' 190 WRITE(numout,*) ' Namelist namtrc_adv : chose a advection scheme for tracers' 191 WRITE(numout,*) ' centered scheme ln_trcadv_cen = ', ln_trcadv_cen 192 WRITE(numout,*) ' horizontal 2nd/4th order nn_cen_h = ', nn_fct_h 193 WRITE(numout,*) ' vertical 2nd/4th order nn_cen_v = ', nn_fct_v 194 WRITE(numout,*) ' Flux Corrected Transport scheme ln_trcadv_fct = ', ln_trcadv_fct 195 WRITE(numout,*) ' horizontal 2nd/4th order nn_fct_h = ', nn_fct_h 196 WRITE(numout,*) ' vertical 2nd/4th order nn_fct_v = ', nn_fct_v 197 WRITE(numout,*) ' 2nd order + vertical sub-timestepping nn_fct_zts = ', nn_fct_zts 198 WRITE(numout,*) ' MUSCL scheme ln_trcadv_mus = ', ln_trcadv_mus 199 WRITE(numout,*) ' + upstream scheme near river mouths ln_mus_ups = ', ln_mus_ups 200 WRITE(numout,*) ' UBS scheme ln_trcadv_ubs = ', ln_trcadv_ubs 201 WRITE(numout,*) ' vertical 2nd/4th order nn_ubs_v = ', nn_ubs_v 202 WRITE(numout,*) ' QUICKEST scheme ln_trcadv_qck = ', ln_trcadv_qck 203 ENDIF 204 ! 205 206 ioptio = 0 !== Parameter control ==! 207 IF( ln_trcadv_cen ) ioptio = ioptio + 1 208 IF( ln_trcadv_fct ) ioptio = ioptio + 1 209 IF( ln_trcadv_mus ) ioptio = ioptio + 1 210 IF( ln_trcadv_ubs ) ioptio = ioptio + 1 211 IF( ln_trcadv_qck ) ioptio = ioptio + 1 212 213 ! 214 IF( ioptio == 0 ) THEN 215 nadv = np_NO_adv 216 CALL ctl_warn( 'trc_adv_init: You are running without tracer advection.' ) 217 ENDIF 180 218 IF( ioptio /= 1 ) CALL ctl_stop( 'Choose ONE advection scheme in namelist namtrc_adv' ) 181 182 ! ! Set nadv 183 IF( ln_trcadv_cen2 ) nadv = 1 184 IF( ln_trcadv_tvd ) nadv = 2 185 IF( ln_trcadv_muscl ) nadv = 3 186 IF( ln_trcadv_muscl2 ) nadv = 4 187 IF( ln_trcadv_ubs ) nadv = 5 188 IF( ln_trcadv_qck ) nadv = 6 189 IF( lk_esopa ) nadv = -1 190 219 ! 220 IF( ln_trcadv_cen .AND. ( nn_cen_h /= 2 .AND. nn_cen_h /= 4 ) & 221 .AND. ( nn_cen_v /= 2 .AND. nn_cen_v /= 4 ) ) THEN 222 CALL ctl_stop( 'trc_adv_init: CEN scheme, choose 2nd or 4th order' ) 223 ENDIF 224 IF( ln_trcadv_fct .AND. ( nn_fct_h /= 2 .AND. nn_fct_h /= 4 ) & 225 .AND. ( nn_fct_v /= 2 .AND. nn_fct_v /= 4 ) ) THEN 226 CALL ctl_stop( 'trc_adv_init: FCT scheme, choose 2nd or 4th order' ) 227 ENDIF 228 IF( ln_trcadv_fct .AND. nn_fct_zts > 0 ) THEN 229 IF( nn_fct_h == 4 ) THEN 230 nn_fct_h = 2 231 CALL ctl_stop( 'trc_adv_init: force 2nd order FCT scheme, 4th order does not exist with sub-timestepping' ) 232 ENDIF 233 IF( lk_vvl ) THEN 234 CALL ctl_stop( 'trc_adv_init: vertical sub-timestepping not allow in non-linear free surface' ) 235 ENDIF 236 IF( nn_fct_zts == 1 ) CALL ctl_warn( 'trc_adv_init: FCT with ONE sub-timestep = FCT without sub-timestep' ) 237 ENDIF 238 IF( ln_trcadv_ubs .AND. ( nn_ubs_v /= 2 .AND. nn_ubs_v /= 4 ) ) THEN 239 CALL ctl_stop( 'trc_adv_init: UBS scheme, choose 2nd or 4th order' ) 240 ENDIF 241 IF( ln_trcadv_ubs .AND. nn_ubs_v == 4 ) THEN 242 CALL ctl_warn( 'trc_adv_init: UBS scheme, only 2nd FCT scheme available on the vertical. It will be used' ) 243 ENDIF 244 IF( ln_isfcav ) THEN ! ice-shelf cavities 245 IF( ln_trcadv_cen .AND. nn_cen_v /= 4 .OR. & ! NO 4th order with ISF 246 & ln_trcadv_fct .AND. nn_fct_v /= 4 ) CALL ctl_stop( 'tra_adv_init: 4th order COMPACT scheme not allowed with ISF' ) 247 ENDIF 248 ! 249 ! !== used advection scheme ==! 250 ! ! set nadv 251 IF( ln_trcadv_cen ) nadv = np_CEN 252 IF( ln_trcadv_fct ) nadv = np_FCT 253 IF( ln_trcadv_fct .AND. nn_fct_zts > 0 ) nadv = np_FCT_zts 254 IF( ln_trcadv_mus ) nadv = np_MUS 255 IF( ln_trcadv_ubs ) nadv = np_UBS 256 IF( ln_trcadv_qck ) nadv = np_QCK 257 ! 191 258 IF(lwp) THEN ! Print the choice 192 259 WRITE(numout,*) 193 IF( nadv == 1 ) WRITE(numout,*) ' 2nd order scheme is used' 194 IF( nadv == 2 ) WRITE(numout,*) ' TVD scheme is used' 195 IF( nadv == 3 ) WRITE(numout,*) ' MUSCL scheme is used' 196 IF( nadv == 4 ) WRITE(numout,*) ' MUSCL2 scheme is used' 197 IF( nadv == 5 ) WRITE(numout,*) ' UBS scheme is used' 198 IF( nadv == 6 ) WRITE(numout,*) ' QUICKEST scheme is used' 199 IF( nadv == -1 ) WRITE(numout,*) ' esopa test: use all advection scheme' 200 ENDIF 201 ! 202 END SUBROUTINE trc_adv_ctl 260 IF( nadv == np_NO_adv ) WRITE(numout,*) ' NO passive tracer advection' 261 IF( nadv == np_CEN ) WRITE(numout,*) ' CEN scheme is used. Horizontal order: ', nn_cen_h, & 262 & ' Vertical order: ', nn_cen_v 263 IF( nadv == np_FCT ) WRITE(numout,*) ' FCT scheme is used. Horizontal order: ', nn_fct_h, & 264 & ' Vertical order: ', nn_fct_v 265 IF( nadv == np_FCT_zts ) WRITE(numout,*) ' use 2nd order FCT with ', nn_fct_zts,'vertical sub-timestepping' 266 IF( nadv == np_MUS ) WRITE(numout,*) ' MUSCL scheme is used' 267 IF( nadv == np_UBS ) WRITE(numout,*) ' UBS scheme is used' 268 IF( nadv == np_QCK ) WRITE(numout,*) ' QUICKEST scheme is used' 269 ENDIF 270 ! 271 END SUBROUTINE trc_adv_ini 203 272 204 273 #else -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trcbbl.F90
r5038 r5901 22 22 USE oce_trc ! ocean dynamics and active tracers variables 23 23 USE trc ! ocean passive tracers variables 24 USE trcnam_trp ! passive tracers transport namelist variables25 24 USE trabbl ! 26 25 USE prtctl_trc ! Print control for debbuging … … 30 29 PUBLIC trc_bbl ! routine called by step.F90 31 30 32 33 !! * Substitutions34 # include "top_substitute.h90"35 31 !!---------------------------------------------------------------------- 36 32 !! NEMO/TOP 3.3 , NEMO Consortium (2010) -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90
r5038 r5901 18 18 USE oce_trc ! ocean dynamics and tracers variables 19 19 USE trc ! ocean passive tracers variables 20 USE trcnam_trp ! passive tracers transport namelist variables21 20 USE trcdta 22 21 USE tradmp … … 24 23 USE trdtra 25 24 USE trd_oce 25 USE iom 26 26 27 27 IMPLICIT NONE 28 28 PRIVATE 29 29 30 PUBLIC trc_dmp ! routine called by step.F90 31 PUBLIC trc_dmp_clo ! routine called by step.F90 32 PUBLIC trc_dmp_alloc ! routine called by nemogcm.F90 30 PUBLIC trc_dmp 31 PUBLIC trc_dmp_clo 32 PUBLIC trc_dmp_alloc 33 PUBLIC trc_dmp_ini 34 35 INTEGER , PUBLIC :: nn_zdmp_tr ! = 0/1/2 flag for damping in the mixed layer 36 CHARACTER(LEN=200) , PUBLIC :: cn_resto_tr !File containing restoration coefficient 33 37 34 38 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: restotr ! restoring coeff. on tracers (s-1) … … 39 43 40 44 !! * Substitutions 41 # include "top_substitute.h90" 45 # include "domzgr_substitute.h90" 46 # include "vectopt_loop_substitute.h90" 42 47 !!---------------------------------------------------------------------- 43 48 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 44 !! $ Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/TRP/trcdmp.F90,v 1.11 2006/09/01 14:03:49 opalod Exp$49 !! $Id$ 45 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 46 51 !!---------------------------------------------------------------------- … … 89 94 IF( nn_timing == 1 ) CALL timing_start('trc_dmp') 90 95 ! 91 ! 0. Initialization (first time-step only)92 ! --------------93 IF( kt == nittrc000 ) CALL trc_dmp_init94 95 96 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrtrd ) ! temporary save of trends 96 97 ! … … 125 126 DO jj = 2, jpjm1 126 127 DO ji = fs_2, fs_jpim1 ! vector opt. 127 IF( avt(ji,jj,jk) <= 5.e-4 ) THEN128 IF( avt(ji,jj,jk) <= 5.e-4_wp ) THEN 128 129 ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 129 130 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra … … 170 171 END SUBROUTINE trc_dmp 171 172 173 SUBROUTINE trc_dmp_ini 174 !!---------------------------------------------------------------------- 175 !! *** ROUTINE trc_dmp_ini *** 176 !! 177 !! ** Purpose : Initialization for the newtonian damping 178 !! 179 !! ** Method : read the nammbf namelist and check the parameters 180 !! called by trc_dmp at the first timestep (nittrc000) 181 !!---------------------------------------------------------------------- 182 ! 183 INTEGER :: ios ! Local integer output status for namelist read 184 INTEGER :: imask !local file handle 185 ! 186 NAMELIST/namtrc_dmp/ nn_zdmp_tr , cn_resto_tr 187 !!---------------------------------------------------------------------- 188 189 IF( nn_timing == 1 ) CALL timing_start('trc_dmp_init') 190 ! 191 192 REWIND( numnat_ref ) ! Namelist namtrc_dmp in reference namelist : Passive tracers newtonian damping 193 READ ( numnat_ref, namtrc_dmp, IOSTAT = ios, ERR = 909) 194 909 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dmp in reference namelist', lwp ) 195 196 REWIND( numnat_cfg ) ! Namelist namtrc_dmp in configuration namelist : Passive tracers newtonian damping 197 READ ( numnat_cfg, namtrc_dmp, IOSTAT = ios, ERR = 910) 198 910 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dmp in configuration namelist', lwp ) 199 IF(lwm) WRITE ( numont, namtrc_dmp ) 200 201 IF(lwp) THEN ! Namelist print 202 WRITE(numout,*) 203 WRITE(numout,*) 'trc_dmp : Passive tracers newtonian damping' 204 WRITE(numout,*) '~~~~~~~' 205 WRITE(numout,*) ' Namelist namtrc_dmp : set damping parameter' 206 WRITE(numout,*) ' mixed layer damping option nn_zdmp_tr = ', nn_zdmp_tr, '(zoom: forced to 0)' 207 WRITE(numout,*) ' Restoration coeff file cn_resto_tr = ', cn_resto_tr 208 ENDIF 209 ! 210 IF( lzoom .AND. .NOT.lk_c1d ) nn_zdmp_tr = 0 ! restoring to climatology at closed north or south boundaries 211 SELECT CASE ( nn_zdmp_tr ) 212 CASE ( 0 ) ; IF(lwp) WRITE(numout,*) ' tracer damping throughout the water column' 213 CASE ( 1 ) ; IF(lwp) WRITE(numout,*) ' no tracer damping in the turbocline (avt > 5 cm2/s)' 214 CASE ( 2 ) ; IF(lwp) WRITE(numout,*) ' no tracer damping in the mixed layer' 215 CASE DEFAULT 216 WRITE(ctmp1,*) 'bad flag value for nn_zdmp_tr = ', nn_zdmp_tr 217 CALL ctl_stop(ctmp1) 218 END SELECT 219 220 IF( .NOT.lk_c1d ) THEN 221 IF( .NOT. ln_tradmp ) & 222 & CALL ctl_stop( 'passive trace damping need ln_tradmp to compute damping coef.' ) 223 ! 224 ! ! Read damping coefficients from file 225 !Read in mask from file 226 CALL iom_open ( cn_resto_tr, imask) 227 CALL iom_get ( imask, jpdom_autoglo, 'resto', restotr) 228 CALL iom_close( imask ) 229 ! 230 ENDIF 231 IF( nn_timing == 1 ) CALL timing_stop('trc_dmp_init') 232 ! 233 END SUBROUTINE trc_dmp_ini 234 172 235 SUBROUTINE trc_dmp_clo( kt ) 173 236 !!--------------------------------------------------------------------- … … 184 247 INTEGER, INTENT( in ) :: kt ! ocean time-step index 185 248 ! 186 INTEGER :: ji, jj, jk, jn, jl, jc ! dummy loop indicesa 249 INTEGER :: ji , jj, jk, jn, jl, jc ! dummy loop indicesa 250 INTEGER :: isrow ! local index 187 251 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrcdta ! 3D workspace 188 252 … … 200 264 ! 201 265 SELECT CASE ( jp_cfg ) 266 ! ! ======================= 267 CASE ( 1 ) ! eORCA_R1 configuration 268 ! ! ======================= 269 isrow = 332 - jpjglo 270 ! 271 ! Caspian Sea 272 nctsi1(1) = 332 ; nctsj1(1) = 243 - isrow 273 nctsi2(1) = 344 ; nctsj2(1) = 275 - isrow 274 ! 202 275 ! ! ======================= 203 276 CASE ( 2 ) ! ORCA_R2 configuration … … 292 365 293 366 294 SUBROUTINE trc_dmp_init295 !!----------------------------------------------------------------------296 !! *** ROUTINE trc_dmp_init ***297 !!298 !! ** Purpose : Initialization for the newtonian damping299 !!300 !! ** Method : read the nammbf namelist and check the parameters301 !! called by trc_dmp at the first timestep (nittrc000)302 !!----------------------------------------------------------------------303 !304 IF( nn_timing == 1 ) CALL timing_start('trc_dmp_init')305 !306 SELECT CASE ( nn_hdmp_tr )307 CASE ( -1 ) ; IF(lwp) WRITE(numout,*) ' tracer damping in the Med & Red seas only'308 CASE ( 1:90 ) ; IF(lwp) WRITE(numout,*) ' tracer damping poleward of', nn_hdmp_tr, ' degrees'309 CASE DEFAULT310 WRITE(ctmp1,*) ' bad flag value for nn_hdmp_tr = ', nn_hdmp_tr311 CALL ctl_stop(ctmp1)312 END SELECT313 314 IF( lzoom ) nn_zdmp_tr = 0 ! restoring to climatology at closed north or south boundaries315 SELECT CASE ( nn_zdmp_tr )316 CASE ( 0 ) ; IF(lwp) WRITE(numout,*) ' tracer damping throughout the water column'317 CASE ( 1 ) ; IF(lwp) WRITE(numout,*) ' no tracer damping in the turbocline (avt > 5 cm2/s)'318 CASE ( 2 ) ; IF(lwp) WRITE(numout,*) ' no tracer damping in the mixed layer'319 CASE DEFAULT320 WRITE(ctmp1,*) 'bad flag value for nn_zdmp_tr = ', nn_zdmp_tr321 CALL ctl_stop(ctmp1)322 END SELECT323 324 IF( .NOT. ln_tradmp ) &325 & CALL ctl_stop( 'passive trace damping need key_tradmp to compute damping coef.' )326 !327 ! ! Damping coefficients initialization328 IF( lzoom ) THEN ; CALL dtacof_zoom( restotr )329 ELSE ; CALL dtacof( nn_hdmp_tr, rn_surf_tr, rn_bot_tr, rn_dep_tr, &330 & nn_file_tr, 'TRC' , restotr )331 ENDIF332 !333 IF( nn_timing == 1 ) CALL timing_stop('trc_dmp_init')334 !335 END SUBROUTINE trc_dmp_init336 337 367 #else 338 368 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trcldf.F90
r5038 r5901 4 4 !! Ocean Passive tracers : lateral diffusive trends 5 5 !!===================================================================== 6 !! History : 9.0 ! 2005-11 (G. Madec) Original code 7 !! NEMO 3.0 ! 2008-01 (C. Ethe, G. Madec) merge TRC-TRA 6 !! History : 1.0 ! 2005-11 (G. Madec) Original code 7 !! 3.0 ! 2008-01 (C. Ethe, G. Madec) merge TRC-TRA 8 !! 3.7 ! 2014-03 (G. Madec) LDF simplification 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_top … … 11 12 !! 'key_top' TOP models 12 13 !!---------------------------------------------------------------------- 13 !!---------------------------------------------------------------------- 14 !! trc_ldf : update the tracer trend with the lateral diffusion 15 !! ldf_ctl : initialization, namelist read, and parameters control 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! ocean dynamics and active tracers 18 USE trc ! ocean passive tracers variables 19 USE trcnam_trp ! passive tracers transport namelist variables 20 USE ldftra_oce ! lateral diffusion coefficient on tracers 21 USE ldfslp ! ??? 22 USE traldf_bilapg ! lateral mixing (tra_ldf_bilapg routine) 23 USE traldf_bilap ! lateral mixing (tra_ldf_bilap routine) 24 USE traldf_iso ! lateral mixing (tra_ldf_iso routine) 25 USE traldf_iso_grif ! lateral mixing (tra_ldf_iso_grif routine) 26 USE traldf_lap ! lateral mixing (tra_ldf_lap routine) 27 USE trd_oce 28 USE trdtra 14 !! trc_ldf : update the tracer trend with the lateral diffusion 15 !! trc_ldf_ini : initialization, namelist read, and parameters control 16 !!---------------------------------------------------------------------- 17 USE trc ! ocean passive tracers variables 18 USE oce_trc ! ocean dynamics and active tracers 19 USE ldfslp ! lateral diffusion: iso-neutral slope 20 USE traldf_lap ! lateral diffusion: laplacian iso-level operator (tra_ldf_lap routine) 21 USE traldf_iso ! lateral diffusion: laplacian iso-neutral standard operator (tra_ldf_iso routine) 22 USE traldf_triad ! lateral diffusion: laplacian iso-neutral triad operator (tra_ldf_triad routine) 23 USE traldf_blp ! lateral diffusion (iso-level lap/blp) (tra_ldf_lap routine) 24 USE trd_oce ! trends: ocean variables 25 USE trdtra ! trends manager: tracers 26 ! 29 27 USE prtctl_trc ! Print control 30 28 … … 32 30 PRIVATE 33 31 34 PUBLIC trc_ldf ! called by step.F90 35 ! !!: ** lateral mixing namelist (nam_trcldf) ** 36 REAL(wp) :: rldf_rat ! ratio between active and passive tracers diffusive coefficient 32 PUBLIC trc_ldf 33 PUBLIC trc_ldf_ini 34 ! 35 LOGICAL , PUBLIC :: ln_trcldf_lap !: laplacian operator 36 LOGICAL , PUBLIC :: ln_trcldf_blp !: bilaplacian operator 37 LOGICAL , PUBLIC :: ln_trcldf_lev !: iso-level direction 38 LOGICAL , PUBLIC :: ln_trcldf_hor !: horizontal direction (rotation to geopotential) 39 LOGICAL , PUBLIC :: ln_trcldf_iso !: iso-neutral direction (standard) 40 LOGICAL , PUBLIC :: ln_trcldf_triad !: iso-neutral direction (triad) 41 REAL(wp), PUBLIC :: rn_ahtrc_0 !: laplacian diffusivity coefficient for passive tracer [m2/s] 42 REAL(wp), PUBLIC :: rn_bhtrc_0 !: bilaplacian - -- - - [m4/s] 43 ! 44 !!: ** lateral mixing namelist (nam_trcldf) ** 45 REAL(wp) :: rldf ! ratio between active and passive tracers diffusive coefficient 37 46 INTEGER :: nldf = 0 ! type of lateral diffusion used defined from ln_trcldf_... namlist logicals) 47 38 48 !! * Substitutions 39 49 # include "domzgr_substitute.h90" 40 50 # include "vectopt_loop_substitute.h90" 41 51 !!---------------------------------------------------------------------- 42 !! NEMO/TOP 3. 3 , NEMO Consortium (2010)52 !! NEMO/TOP 3.7 , NEMO Consortium (2014) 43 53 !! $Id$ 44 54 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 45 55 !!---------------------------------------------------------------------- 46 47 56 CONTAINS 48 57 … … 58 67 INTEGER :: jn 59 68 CHARACTER (len=22) :: charout 69 REAL(wp), POINTER, DIMENSION(:,:,:) :: zahu, zahv 60 70 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrtrd 61 71 !!---------------------------------------------------------------------- … … 63 73 IF( nn_timing == 1 ) CALL timing_start('trc_ldf') 64 74 ! 65 IF( kt == nittrc000 ) CALL ldf_ctl ! initialisation & control of options66 67 rldf = rldf_rat68 69 75 IF( l_trdtrc ) THEN 70 CALL wrk_alloc( jpi, jpj, jpk, jptra,ztrtrd )76 CALL wrk_alloc( jpi,jpj,jpk,jptra, ztrtrd ) 71 77 ztrtrd(:,:,:,:) = tra(:,:,:,:) 72 78 ENDIF 73 74 SELECT CASE ( nldf ) ! compute lateral mixing trend and add it to the general trend 75 CASE ( 0 ) ; CALL tra_ldf_lap ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra ) ! iso-level laplacian 76 CASE ( 1 ) ! rotated laplacian 77 IF( ln_traldf_grif ) THEN 78 CALL tra_ldf_iso_grif( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra, rn_ahtb_0 ) 79 ELSE 80 CALL tra_ldf_iso ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra, rn_ahtb_0 ) 81 ENDIF 82 CASE ( 2 ) ; CALL tra_ldf_bilap ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra ) ! iso-level bilaplacian 83 CASE ( 3 ) ; CALL tra_ldf_bilapg( kt, nittrc000, 'TRC', trb, tra, jptra ) ! s-coord. horizontal bilaplacian 84 ! 85 CASE ( -1 ) ! esopa: test all possibility with control print 86 CALL tra_ldf_lap ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra ) 87 WRITE(charout, FMT="('ldf0 ')") ; CALL prt_ctl_trc_info(charout) 88 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 89 IF( ln_traldf_grif ) THEN 90 CALL tra_ldf_iso_grif( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra, rn_ahtb_0 ) 91 ELSE 92 CALL tra_ldf_iso ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra, rn_ahtb_0 ) 93 ENDIF 94 WRITE(charout, FMT="('ldf1 ')") ; CALL prt_ctl_trc_info(charout) 95 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 96 CALL tra_ldf_bilap ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra ) 97 WRITE(charout, FMT="('ldf2 ')") ; CALL prt_ctl_trc_info(charout) 98 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 99 CALL tra_ldf_bilapg( kt, nittrc000, 'TRC', trb, tra, jptra ) 100 WRITE(charout, FMT="('ldf3 ')") ; CALL prt_ctl_trc_info(charout) 101 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 79 ! 80 ! !* set the lateral diffusivity coef. for passive tracer 81 CALL wrk_alloc( jpi,jpj,jpk, zahu, zahv ) 82 zahu(:,:,:) = rldf * ahtu(:,:,:) 83 zahv(:,:,:) = rldf * ahtv(:,:,:) 84 85 SELECT CASE ( nldf ) !* compute lateral mixing trend and add it to the general trend 86 ! 87 CASE ( np_lap ) ! iso-level laplacian 88 CALL tra_ldf_lap ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb, tra, jptra, 1 ) 89 ! 90 CASE ( np_lap_i ) ! laplacian : standard iso-neutral operator (Madec) 91 CALL tra_ldf_iso ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb, trb, tra, jptra, 1 ) 92 ! 93 CASE ( np_lap_it ) ! laplacian : triad iso-neutral operator (griffies) 94 CALL tra_ldf_triad( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb, trb, tra, jptra, 1 ) 95 ! 96 CASE ( np_blp , np_blp_i , np_blp_it ) ! bilaplacian: all operator (iso-level, -neutral) 97 CALL tra_ldf_blp ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb , tra, jptra, nldf ) 98 ! 102 99 END SELECT 103 100 ! 104 IF( l_trdtrc ) THEN 101 IF( l_trdtrc ) THEN ! save the horizontal diffusive trends for further diagnostics 105 102 DO jn = 1, jptra 106 103 ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) … … 109 106 CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrtrd ) 110 107 ENDIF 111 ! ! print mean trends (used for debugging) 112 IF( ln_ctl ) THEN 113 WRITE(charout, FMT="('ldf ')") ; CALL prt_ctl_trc_info(charout) 114 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 115 ENDIF 108 ! ! print mean trends (used for debugging) 109 IF( ln_ctl ) THEN 110 WRITE(charout, FMT="('ldf ')") ; CALL prt_ctl_trc_info(charout) 111 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 112 ENDIF 113 ! 114 CALL wrk_dealloc( jpi,jpj,jpk, zahu, zahv ) 116 115 ! 117 116 IF( nn_timing == 1 ) CALL timing_stop('trc_ldf') … … 120 119 121 120 122 SUBROUTINE ldf_ctl121 SUBROUTINE trc_ldf_ini 123 122 !!---------------------------------------------------------------------- 124 123 !! *** ROUTINE ldf_ctl *** 125 124 !! 126 !! ** Purpose : Choice of the operator for the lateral tracerdiffusion125 !! ** Purpose : Define the operator for the lateral diffusion 127 126 !! 128 127 !! ** Method : set nldf from the namtra_ldf logicals 129 !! nldf == -2 No lateral diffusion130 !! nldf == -1 ESOPA test: ALL operators are used131 128 !! nldf == 0 laplacian operator 132 129 !! nldf == 1 Rotated laplacian operator … … 134 131 !! nldf == 3 Rotated bilaplacian 135 132 !!---------------------------------------------------------------------- 136 INTEGER :: ioptio, ierr ! temporary integers 137 !!---------------------------------------------------------------------- 138 139 IF (ABS(rn_aht_0) < 2._wp*TINY(1.e0)) THEN 140 IF (ABS(rn_ahtrc_0) < 2._wp*TINY(1.e0)) THEN 141 rldf_rat = 1.0_wp 142 ELSE 143 CALL ctl_stop( 'STOP', 'ldf_ctl : cannot define rldf_rat, rn_aht_0==0, rn_ahtrc_0 /=0' ) 144 END IF 145 ELSE 146 rldf_rat = rn_ahtrc_0 / rn_aht_0 147 END IF 148 ! Define the lateral mixing oparator for tracers 149 ! =============================================== 150 151 ! ! control the input 133 INTEGER :: ioptio, ierr ! temporary integers 134 INTEGER :: ios ! Local integer output status for namelist read 135 ! 136 NAMELIST/namtrc_ldf/ ln_trcldf_lap, ln_trcldf_blp, & 137 & ln_trcldf_lev, ln_trcldf_hor, ln_trcldf_iso, ln_trcldf_triad, & 138 & rn_ahtrc_0 , rn_bhtrc_0 139 !!---------------------------------------------------------------------- 140 REWIND( numnat_ref ) ! namtrc_ldf in reference namelist 141 READ ( numnat_ref, namtrc_ldf, IOSTAT = ios, ERR = 903) 142 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ldf in reference namelist', lwp ) 143 144 REWIND( numnat_cfg ) ! namtrc_ldf in configuration namelist 145 READ ( numnat_cfg, namtrc_ldf, IOSTAT = ios, ERR = 904 ) 146 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ldf in configuration namelist', lwp ) 147 IF(lwm) WRITE ( numont, namtrc_ldf ) 148 149 IF(lwp) THEN ! Namelist print 150 WRITE(numout,*) 151 WRITE(numout,*) 'trc_ldf_ini : lateral tracer diffusive operator' 152 WRITE(numout,*) '~~~~~~~~~~~' 153 WRITE(numout,*) ' Namelist namtrc_ldf : set lateral mixing parameters (type, direction, coefficients)' 154 WRITE(numout,*) ' operator' 155 WRITE(numout,*) ' laplacian ln_trcldf_lap = ', ln_trcldf_lap 156 WRITE(numout,*) ' bilaplacian ln_trcldf_blp = ', ln_trcldf_blp 157 WRITE(numout,*) ' direction of action' 158 WRITE(numout,*) ' iso-level ln_trcldf_lev = ', ln_trcldf_lev 159 WRITE(numout,*) ' horizontal (geopotential) ln_trcldf_hor = ', ln_trcldf_hor 160 WRITE(numout,*) ' iso-neutral (standard) ln_trcldf_iso = ', ln_trcldf_iso 161 WRITE(numout,*) ' iso-neutral (triad) ln_trcldf_triad = ', ln_trcldf_triad 162 WRITE(numout,*) ' diffusivity coefficient' 163 WRITE(numout,*) ' laplacian rn_ahtrc_0 = ', rn_ahtrc_0 164 WRITE(numout,*) ' bilaplacian rn_bhtrc_0 = ', rn_bhtrc_0 165 ENDIF 166 ! 167 ! ! control the namelist parameters 152 168 ioptio = 0 153 IF( ln_trcldf_lap ) ioptio = ioptio + 1 154 IF( ln_trcldf_bilap ) ioptio = ioptio + 1 155 IF( ioptio > 1 ) CALL ctl_stop( ' use ONE or NONE of the 2 lap/bilap operator type on tracer' ) 156 IF( ioptio == 0 ) nldf = -2 ! No lateral diffusion 169 IF( ln_trcldf_lap ) ioptio = ioptio + 1 170 IF( ln_trcldf_blp ) ioptio = ioptio + 1 171 IF( ioptio > 1 ) CALL ctl_stop( 'trc_ldf_ctl: use ONE or NONE of the 2 lap/bilap operator type on tracer' ) 172 IF( ioptio == 0 ) nldf = np_no_ldf ! No lateral diffusion 173 174 IF( ln_trcldf_lap .AND. ln_trcldf_blp ) CALL ctl_stop( 'trc_ldf_ctl: bilaplacian should be used on both TRC and TRA' ) 175 IF( ln_trcldf_blp .AND. ln_trcldf_lap ) CALL ctl_stop( 'trc_ldf_ctl: laplacian should be used on both TRC and TRA' ) 176 157 177 ioptio = 0 158 IF( ln_trcldf_lev el) ioptio = ioptio + 1159 IF( ln_trcldf_hor 160 IF( ln_trcldf_iso 161 IF( ioptio /= 1 ) CALL ctl_stop( 'use only ONE direction (level/hor/iso)' )178 IF( ln_trcldf_lev ) ioptio = ioptio + 1 179 IF( ln_trcldf_hor ) ioptio = ioptio + 1 180 IF( ln_trcldf_iso ) ioptio = ioptio + 1 181 IF( ioptio /= 1 ) CALL ctl_stop( 'trc_ldf_ctl: use only ONE direction (level/hor/iso)' ) 162 182 163 183 ! defined the type of lateral diffusion from ln_trcldf_... logicals 164 184 ! CAUTION : nldf = 1 is used in trazdf_imp, change it carefully 165 185 ierr = 0 166 IF( ln_trcldf_lap ) THEN ! laplacian operator186 IF( ln_trcldf_lap ) THEN !== laplacian operator ==! 167 187 IF ( ln_zco ) THEN ! z-coordinate 168 IF ( ln_trcldf_level ) nldf = 0 ! iso-level (no rotation) 169 IF ( ln_trcldf_hor ) nldf = 0 ! horizontal (no rotation) 170 IF ( ln_trcldf_iso ) nldf = 1 ! isoneutral ( rotation) 171 ENDIF 172 IF ( ln_zps ) THEN ! z-coordinate 173 IF ( ln_trcldf_level ) ierr = 1 ! iso-level not allowed 174 IF ( ln_trcldf_hor ) nldf = 0 ! horizontal (no rotation) 175 IF ( ln_trcldf_iso ) nldf = 1 ! isoneutral ( rotation) 176 ENDIF 177 IF ( ln_sco ) THEN ! z-coordinate 178 IF ( ln_trcldf_level ) nldf = 0 ! iso-level (no rotation) 179 IF ( ln_trcldf_hor ) nldf = 1 ! horizontal ( rotation) 180 IF ( ln_trcldf_iso ) nldf = 1 ! isoneutral ( rotation) 181 ENDIF 182 ENDIF 183 184 IF( ln_trcldf_bilap ) THEN ! bilaplacian operator 188 IF ( ln_trcldf_lev ) nldf = np_lap ! iso-level = horizontal (no rotation) 189 IF ( ln_trcldf_hor ) nldf = np_lap ! iso-level = horizontal (no rotation) 190 IF ( ln_trcldf_iso ) nldf = np_lap_i ! iso-neutral: standard ( rotation) 191 IF ( ln_trcldf_triad ) nldf = np_lap_it ! iso-neutral: triad ( rotation) 192 ENDIF 193 IF ( ln_zps ) THEN ! z-coordinate with partial step 194 IF ( ln_trcldf_lev ) ierr = 1 ! iso-level not allowed 195 IF ( ln_trcldf_hor ) nldf = np_lap ! horizontal (no rotation) 196 IF ( ln_trcldf_iso ) nldf = np_lap_i ! iso-neutral: standard (rotation) 197 IF ( ln_trcldf_triad ) nldf = np_lap_it ! iso-neutral: triad (rotation) 198 ENDIF 199 IF ( ln_sco ) THEN ! s-coordinate 200 IF ( ln_trcldf_lev ) nldf = np_lap ! iso-level (no rotation) 201 IF ( ln_trcldf_hor ) nldf = np_lap_it ! horizontal ( rotation) !!gm a checker.... 202 IF ( ln_trcldf_iso ) nldf = np_lap_i ! iso-neutral: standard (rotation) 203 IF ( ln_trcldf_triad ) nldf = np_lap_it ! iso-neutral: triad (rotation) 204 ENDIF 205 ! ! diffusivity ratio: passive / active tracers 206 IF( ABS(rn_aht_0) < 2._wp*TINY(1.e0) ) THEN 207 IF( ABS(rn_ahtrc_0) < 2._wp*TINY(1.e0) ) THEN 208 rldf = 1.0_wp 209 ELSE 210 CALL ctl_stop( 'STOP', 'trc_ldf_ctl : cannot define rldf, rn_aht_0==0, rn_ahtrc_0 /=0' ) 211 ENDIF 212 ELSE 213 rldf = rn_ahtrc_0 / rn_aht_0 214 ENDIF 215 ENDIF 216 ! 217 IF( ln_trcldf_blp ) THEN !== bilaplacian operator ==! 185 218 IF ( ln_zco ) THEN ! z-coordinate 186 IF ( ln_trcldf_level ) nldf = 2 ! iso-level (no rotation) 187 IF ( ln_trcldf_hor ) nldf = 2 ! horizontal (no rotation) 188 IF ( ln_trcldf_iso ) ierr = 2 ! isoneutral ( rotation) 189 ENDIF 190 IF ( ln_zps ) THEN ! z-coordinate 191 IF ( ln_trcldf_level ) ierr = 1 ! iso-level not allowed 192 IF ( ln_trcldf_hor ) nldf = 2 ! horizontal (no rotation) 193 IF ( ln_trcldf_iso ) ierr = 2 ! isoneutral ( rotation) 194 ENDIF 195 IF ( ln_sco ) THEN ! z-coordinate 196 IF ( ln_trcldf_level ) nldf = 2 ! iso-level (no rotation) 197 IF ( ln_trcldf_hor ) nldf = 3 ! horizontal ( rotation) 198 IF ( ln_trcldf_iso ) ierr = 2 ! isoneutral ( rotation) 199 ENDIF 200 ENDIF 201 219 IF ( ln_trcldf_lev ) nldf = np_blp ! iso-level = horizontal (no rotation) 220 IF ( ln_trcldf_hor ) nldf = np_blp ! iso-level = horizontal (no rotation) 221 IF ( ln_trcldf_iso ) nldf = np_blp_i ! iso-neutral: standard (rotation) 222 IF ( ln_trcldf_triad ) nldf = np_blp_it ! iso-neutral: triad (rotation) 223 ENDIF 224 IF ( ln_zps ) THEN ! z-coordinate with partial step 225 IF ( ln_trcldf_lev ) ierr = 1 ! iso-level not allowed 226 IF ( ln_trcldf_hor ) nldf = np_blp ! horizontal (no rotation) 227 IF ( ln_trcldf_iso ) nldf = np_blp_i ! iso-neutral: standard (rotation) 228 IF ( ln_trcldf_triad ) nldf = np_blp_it ! iso-neutral: triad (rotation) 229 ENDIF 230 IF ( ln_sco ) THEN ! s-coordinate 231 IF ( ln_trcldf_lev ) nldf = np_blp ! iso-level (no rotation) 232 IF ( ln_trcldf_hor ) nldf = np_blp_it ! horizontal ( rotation) !!gm a checker.... 233 IF ( ln_trcldf_iso ) nldf = np_blp_i ! iso-neutral: standard (rotation) 234 IF ( ln_trcldf_triad ) nldf = np_blp_it ! iso-neutral: triad (rotation) 235 ENDIF 236 ! ! diffusivity ratio: passive / active tracers 237 IF( ABS(rn_bht_0) < 2._wp*TINY(1.e0) ) THEN 238 IF( ABS(rn_bhtrc_0) < 2._wp*TINY(1.e0) ) THEN 239 rldf = 1.0_wp 240 ELSE 241 CALL ctl_stop( 'STOP', 'trc_ldf_ctl : cannot define rldf, rn_aht_0==0, rn_ahtrc_0 /=0' ) 242 ENDIF 243 ELSE 244 rldf = SQRT( ABS( rn_bhtrc_0 / rn_bht_0 ) ) 245 ENDIF 246 ENDIF 247 ! 202 248 IF( ierr == 1 ) CALL ctl_stop( ' iso-level in z-coordinate - partial step, not allowed' ) 203 IF( ierr == 2 ) CALL ctl_stop( ' isoneutral bilaplacian operator does not exist' ) 204 IF( lk_traldf_eiv .AND. .NOT.ln_trcldf_iso ) & 249 IF( ln_ldfeiv .AND. .NOT.ln_trcldf_iso ) & 205 250 CALL ctl_stop( ' eddy induced velocity on tracers', & 206 251 & ' the eddy induced velocity on tracers requires isopycnal laplacian diffusion' ) 207 252 IF( nldf == 1 .OR. nldf == 3 ) THEN ! rotation 208 IF( .NOT.lk_ldfslp ) CALL ctl_stop( ' the rotation of the diffusive tensor require key_ldfslp' ) 209 #if defined key_offline 210 l_traldf_rot = .TRUE. ! needed for trazdf_imp 211 #endif 212 ENDIF 213 214 IF( lk_esopa ) THEN 215 IF(lwp) WRITE(numout,*) ' esopa control: use all lateral physics options' 216 nldf = -1 217 ENDIF 218 219 IF( .NOT. ln_trcldf_diff ) THEN 220 IF(lwp) WRITE(numout,*) ' No lateral diffusion on passive tracers' 221 nldf = -2 222 ENDIF 223 253 IF( .NOT.l_ldfslp ) CALL ctl_stop( ' the rotation of the diffusive tensor require l_ldfslp' ) 254 ENDIF 255 ! 224 256 IF(lwp) THEN 225 257 WRITE(numout,*) 226 IF( nldf == -2 ) WRITE(numout,*) ' NO lateral diffusion' 227 IF( nldf == -1 ) WRITE(numout,*) ' ESOPA test All scheme used' 228 IF( nldf == 0 ) WRITE(numout,*) ' laplacian operator' 229 IF( nldf == 1 ) WRITE(numout,*) ' Rotated laplacian operator' 230 IF( nldf == 2 ) WRITE(numout,*) ' bilaplacian operator' 231 IF( nldf == 3 ) WRITE(numout,*) ' Rotated bilaplacian' 232 ENDIF 233 234 IF( ln_trcldf_bilap ) THEN 235 IF(lwp) WRITE(numout,*) ' biharmonic tracer diffusion' 236 IF( rn_ahtrc_0 > 0 .AND. .NOT. lk_esopa ) CALL ctl_stop( 'The horizontal diffusivity coef. rn_ahtrc_0 must be negative' ) 237 ELSE 238 IF(lwp) WRITE(numout,*) ' harmonic tracer diffusion (default)' 239 IF( rn_ahtrc_0 < 0 .AND. .NOT. lk_esopa ) CALL ctl_stop('The horizontal diffusivity coef. rn_ahtrc_0 must be positive' ) 240 ENDIF 241 242 ! ratio between active and passive tracers diffusive coef. 243 IF (ABS(rn_aht_0) < 2._wp*TINY(1.e0)) THEN 244 IF (ABS(rn_ahtrc_0) < 2._wp*TINY(1.e0)) THEN 245 rldf_rat = 1.0_wp 246 ELSE 247 CALL ctl_stop( 'STOP', 'ldf_ctl : cannot define rldf_rat, rn_aht_0==0, rn_ahtrc_0 /=0' ) 248 END IF 249 ELSE 250 rldf_rat = rn_ahtrc_0 / rn_aht_0 251 END IF 252 IF( rldf_rat < 0 ) THEN 253 IF( .NOT.lk_offline ) THEN 254 CALL ctl_stop( 'Choose the same type of diffusive scheme both for active & passive tracers' ) 255 ELSE 256 CALL ctl_stop( 'Change the sign of rn_aht_0 in namelist to -/+1' ) 257 ENDIF 258 ENDIF 259 ! 260 END SUBROUTINE ldf_ctl 258 IF( nldf == np_no_ldf ) WRITE(numout,*) ' NO lateral diffusion' 259 IF( nldf == np_lap ) WRITE(numout,*) ' laplacian iso-level operator' 260 IF( nldf == np_lap_i ) WRITE(numout,*) ' Rotated laplacian operator (standard)' 261 IF( nldf == np_lap_it ) WRITE(numout,*) ' Rotated laplacian operator (triad)' 262 IF( nldf == np_blp ) WRITE(numout,*) ' bilaplacian iso-level operator' 263 IF( nldf == np_blp_i ) WRITE(numout,*) ' Rotated bilaplacian operator (standard)' 264 IF( nldf == np_blp_it ) WRITE(numout,*) ' Rotated bilaplacian operator (triad)' 265 ENDIF 266 ! 267 END SUBROUTINE trc_ldf_ini 261 268 #else 262 269 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r5038 r5901 102 102 ENDIF 103 103 104 #if defined key_agrif 105 CALL Agrif_trc ! AGRIF zoom boundaries 106 #endif 104 107 ! Update after tracer on domain lateral boundaries 105 108 DO jn = 1, jptra … … 111 114 !! CALL bdy_trc( kt ) ! BDY open boundaries 112 115 #endif 113 #if defined key_agrif114 CALL Agrif_trc ! AGRIF zoom boundaries115 #endif116 116 117 117 118 118 ! set time step size (Euler/Leapfrog) 119 119 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ; r2dt(:) = rdttrc(:) ! at nittrc000 (Euler) 120 ELSEIF( kt <= nittrc000 + 1 )THEN ; r2dt(:) = 2.* rdttrc(:) ! at nit000 or nit000+1 (Leapfrog)120 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ; r2dt(:) = 2.* rdttrc(:) ! at nit000 or nit000+1 (Leapfrog) 121 121 ENDIF 122 122 … … 137 137 ELSE 138 138 ! Leap-Frog + Asselin filter time stepping 139 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, nittrc000, 'TRC', trb, trn, tra, jptra ) ! variable volume level (vvl) 140 ELSE ; CALL tra_nxt_fix( kt, nittrc000, 'TRC', trb, trn, tra, jptra ) ! fixed volume level 139 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra, & 140 & sbc_trc, sbc_trc_b, jptra ) ! variable volume level (vvl) 141 ELSE ; CALL tra_nxt_fix( kt, nittrc000, 'TRC', trb, trn, tra, jptra ) ! fixed volume level 141 142 ENDIF 142 143 ENDIF -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90
r5038 r5901 22 22 PRIVATE 23 23 24 PUBLIC trc_rad ! routine called by trcstp.F90 25 26 !! * Substitutions 27 # include "top_substitute.h90" 24 PUBLIC trc_rad 25 PUBLIC trc_rad_ini 26 27 LOGICAL , PUBLIC :: ln_trcrad !: flag to artificially correct negative concentrations 28 28 29 !!---------------------------------------------------------------------- 29 30 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 76 77 ! 77 78 END SUBROUTINE trc_rad 79 80 SUBROUTINE trc_rad_ini 81 !!--------------------------------------------------------------------- 82 !! *** ROUTINE trc _rad_ini *** 83 !! 84 !! ** Purpose : read namelist options 85 !!---------------------------------------------------------------------- 86 INTEGER :: ios ! Local integer output status for namelist read 87 NAMELIST/namtrc_rad/ ln_trcrad 88 !!---------------------------------------------------------------------- 89 90 ! 91 REWIND( numnat_ref ) ! namtrc_rad in reference namelist 92 READ ( numnat_ref, namtrc_rad, IOSTAT = ios, ERR = 907) 93 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_rad in reference namelist', lwp ) 94 95 REWIND( numnat_cfg ) ! namtrc_rad in configuration namelist 96 READ ( numnat_cfg, namtrc_rad, IOSTAT = ios, ERR = 908 ) 97 908 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_rad in configuration namelist', lwp ) 98 IF(lwm) WRITE ( numont, namtrc_rad ) 99 100 IF(lwp) THEN ! ! Control print 101 WRITE(numout,*) 102 WRITE(numout,*) ' Namelist namtrc_rad : treatment of negative concentrations' 103 WRITE(numout,*) ' correct artificially negative concen. or not ln_trcrad = ', ln_trcrad 104 ENDIF 105 ! 106 END SUBROUTINE trc_rad_ini 78 107 79 108 SUBROUTINE trc_rad_sms( kt, ptrb, ptrn, jp_sms0, jp_sms1, cpreserv ) -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90
r5038 r5901 19 19 USE trc ! ocean passive tracers variables 20 20 USE prtctl_trc ! Print control for debbuging 21 USE iom 21 22 USE trd_oce 22 23 USE trdtra … … 27 28 PUBLIC trc_sbc ! routine called by step.F90 28 29 30 REAL(wp) :: r2dt ! time-step at surface 31 29 32 !! * Substitutions 30 # include "top_substitute.h90" 33 # include "domzgr_substitute.h90" 34 # include "vectopt_loop_substitute.h90" 31 35 !!---------------------------------------------------------------------- 32 36 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 60 64 INTEGER, INTENT( in ) :: kt ! ocean time-step index 61 65 ! 62 INTEGER :: ji, jj, jn ! dummy loop indices 63 REAL(wp) :: zsrau, zse3t ! temporary scalars 66 INTEGER :: ji, jj, jn ! dummy loop indices 67 REAL(wp) :: zse3t, zrtrn, zratio, zfact ! temporary scalars 68 REAL(wp) :: zswitch, zftra, zcd, zdtra, ztfx, ztra ! temporary scalars 64 69 CHARACTER (len=22) :: charout 65 70 REAL(wp), POINTER, DIMENSION(:,: ) :: zsfx 66 71 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrtrd 72 67 73 !!--------------------------------------------------------------------- 68 74 ! … … 72 78 CALL wrk_alloc( jpi, jpj, zsfx ) 73 79 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrtrd ) 80 ! 81 zrtrn = 1.e-15_wp 82 83 SELECT CASE( nn_ice_embd ) ! levitating or embedded sea-ice option 84 CASE( 0 ) ; zswitch = 1 ! (0) standard levitating sea-ice : salt exchange only 85 CASE( 1, 2 ) ; zswitch = 0 ! (1) levitating sea-ice: salt and volume exchange but no pressure effect 86 ! ! (2) embedded sea-ice : salt and volume fluxes and pressure 87 END SELECT 88 89 IF( ln_top_euler) THEN 90 r2dt = rdttrc(1) ! = rdttrc (use Euler time stepping) 91 ELSE 92 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ! at nittrc000 93 r2dt = rdttrc(1) ! = rdttrc (restarting with Euler time stepping) 94 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+1 95 r2dt = 2. * rdttrc(1) ! = 2 rdttrc (leapfrog) 96 ENDIF 97 ENDIF 98 74 99 75 100 IF( kt == nittrc000 ) THEN … … 77 102 IF(lwp) WRITE(numout,*) 'trc_sbc : Passive tracers surface boundary condition' 78 103 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 104 105 IF( ln_rsttr .AND. & ! Restart: read in restart file 106 iom_varid( numrtr, 'sbc_'//TRIM(ctrcnm(1))//'_b', ldstop = .FALSE. ) > 0 ) THEN 107 IF(lwp) WRITE(numout,*) ' nittrc000-nn_dttrc surface tracer content forcing fields red in the restart file' 108 zfact = 0.5_wp 109 DO jn = 1, jptra 110 CALL iom_get( numrtr, jpdom_autoglo, 'sbc_'//TRIM(ctrcnm(jn))//'_b', sbc_trc_b(:,:,jn) ) ! before tracer content sbc 111 END DO 112 ELSE ! No restart or restart not found: Euler forward time stepping 113 zfact = 1._wp 114 sbc_trc_b(:,:,:) = 0._wp 115 ENDIF 116 ELSE ! Swap of forcing fields 117 IF( ln_top_euler ) THEN 118 zfact = 1._wp 119 sbc_trc_b(:,:,:) = 0._wp 120 ELSE 121 zfact = 0.5_wp 122 sbc_trc_b(:,:,:) = sbc_trc(:,:,:) 123 ENDIF 124 ! 79 125 ENDIF 80 126 … … 90 136 91 137 ! 0. initialization 92 zsrau = 1. / rau093 138 DO jn = 1, jptra 94 139 ! 95 140 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends 96 141 ! ! add the trend to the general tracer trend 142 143 IF ( nn_ice_tr == -1 ) THEN ! No tracers in sea ice (null concentration in sea ice) 144 145 DO jj = 2, jpj 146 DO ji = fs_2, fs_jpim1 ! vector opt. 147 sbc_trc(ji,jj,jn) = zsfx(ji,jj) * r1_rau0 * trn(ji,jj,1,jn) 148 END DO 149 END DO 150 151 ELSE 152 153 DO jj = 2, jpj 154 DO ji = fs_2, fs_jpim1 ! vector opt. 155 zse3t = 1. / fse3t(ji,jj,1) 156 ! tracer flux at the ice/ocean interface (tracer/m2/s) 157 zftra = - trc_i(ji,jj,jn) * fmmflx(ji,jj) ! uptake of tracer in the sea ice 158 zcd = trc_o(ji,jj,jn) * fmmflx(ji,jj) ! concentration dilution due to freezing-melting, 159 ! only used in the levitating sea ice case 160 ! tracer flux only : add concentration dilution term in net tracer flux, no F-M in volume flux 161 ! tracer and mass fluxes : no concentration dilution term in net tracer flux, F-M term in volume flux 162 ztfx = zftra + zswitch * zcd ! net tracer flux (+C/D if no ice/ocean mass exchange) 163 164 zdtra = r1_rau0 * ( ztfx + zsfx(ji,jj) * trn(ji,jj,1,jn) ) 165 IF ( zdtra < 0. ) THEN 166 zratio = -zdtra * zse3t * r2dt / ( trn(ji,jj,1,jn) + zrtrn ) 167 zdtra = MIN(1.0, zratio) * zdtra ! avoid negative concentrations to arise 168 ENDIF 169 sbc_trc(ji,jj,jn) = zdtra 170 END DO 171 END DO 172 ENDIF 173 ! Concentration dilution effect on tracers due to evaporation & precipitation 97 174 DO jj = 2, jpj 98 175 DO ji = fs_2, fs_jpim1 ! vector opt. 99 zse3t = 1./ fse3t(ji,jj,1)100 tra(ji,jj,1,jn) = tra(ji,jj,1,jn) + zsfx(ji,jj) * zsrau * trn(ji,jj,1,jn) * zse3t176 zse3t = zfact / fse3t(ji,jj,1) 177 tra(ji,jj,1,jn) = tra(ji,jj,1,jn) + ( sbc_trc_b(ji,jj,jn) + sbc_trc(ji,jj,jn) ) * zse3t 101 178 END DO 102 179 END DO 103 180 ! 104 181 IF( l_trdtrc ) THEN 105 182 ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) … … 109 186 END DO ! tracer loop 110 187 ! ! =========== 188 189 ! Write in the tracer restar file 190 ! ******************************* 191 IF( lrst_trc ) THEN 192 IF(lwp) WRITE(numout,*) 193 IF(lwp) WRITE(numout,*) 'sbc : ocean surface tracer content forcing fields written in tracer restart file ', & 194 & 'at it= ', kt,' date= ', ndastp 195 IF(lwp) WRITE(numout,*) '~~~~' 196 DO jn = 1, jptra 197 CALL iom_rstput( kt, nitrst, numrtw, 'sbc_'//TRIM(ctrcnm(jn))//'_b', sbc_trc(:,:,jn) ) 198 END DO 199 ENDIF 200 ! 111 201 IF( ln_ctl ) THEN 112 202 WRITE(charout, FMT="('sbc ')") ; CALL prt_ctl_trc_info(charout) -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90
r5038 r5901 15 15 USE oce_trc ! ocean dynamics and active tracers variables 16 16 USE trc ! ocean passive tracers variables 17 USE trcnam_trp ! passive tracers transport namelist variables18 17 USE trabbl ! bottom boundary layer (trc_bbl routine) 19 18 USE trcbbl ! bottom boundary layer (trc_bbl routine) 20 USE zdfkpp ! KPP non-local tracer fluxes (trc_kpp routine)21 19 USE trcdmp ! internal damping (trc_dmp routine) 22 20 USE trcldf ! lateral mixing (trc_ldf routine) … … 38 36 PUBLIC trc_trp ! called by trc_stp 39 37 40 !! * Substitutions41 # include "top_substitute.h90"42 38 !!---------------------------------------------------------------------- 43 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 48 44 CONTAINS 49 45 50 SUBROUTINE trc_trp( k stp)46 SUBROUTINE trc_trp( kt ) 51 47 !!---------------------------------------------------------------------- 52 48 !! *** ROUTINE trc_trp *** … … 57 53 !! - Update the passive tracers 58 54 !!---------------------------------------------------------------------- 59 INTEGER, INTENT( in ) :: k stp! ocean time-step index55 INTEGER, INTENT( in ) :: kt ! ocean time-step index 60 56 !! --------------------------------------------------------------------- 61 57 ! … … 64 60 IF( .NOT. lk_c1d ) THEN 65 61 ! 66 CALL trc_sbc( kstp ) ! surface boundary condition 67 IF( lk_trabbl ) CALL trc_bbl( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme 68 IF( ln_trcdmp ) CALL trc_dmp( kstp ) ! internal damping trends 69 IF( ln_trcdmp_clo ) CALL trc_dmp_clo( kstp ) ! internal damping trends on closed seas only 70 CALL trc_adv( kstp ) ! horizontal & vertical advection 71 CALL trc_ldf( kstp ) ! lateral mixing 72 IF( .NOT. lk_offline .AND. lk_zdfkpp ) & 73 & CALL trc_kpp( kstp ) ! KPP non-local tracer fluxes 62 CALL trc_sbc ( kt ) ! surface boundary condition 63 IF( lk_trabbl ) CALL trc_bbl ( kt ) ! advective (and/or diffusive) bottom boundary layer scheme 64 IF( ln_trcdmp ) CALL trc_dmp ( kt ) ! internal damping trends 65 IF( ln_trcdmp_clo ) CALL trc_dmp_clo( kt ) ! internal damping trends on closed seas only 66 CALL trc_adv ( kt ) ! horizontal & vertical advection 67 ! ! Partial top/bottom cell: GRADh( trb ) 68 IF( ln_zps ) THEN 69 IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kt, jptra, trb, pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi ) ! both top & bottom 70 ELSE ; CALL zps_hde ( kt, jptra, trb, gtru, gtrv ) ! only bottom 71 ENDIF 72 ENDIF 73 ! 74 CALL trc_ldf ( kt ) ! lateral mixing 74 75 #if defined key_agrif 75 IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_trc 76 IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_trc ! tracers sponge 76 77 #endif 77 CALL trc_zdf ( kstp )! vertical mixing and after tracer fields78 CALL trc_nxt ( kstp )! tracer fields at next time step79 IF( ln_trcrad ) CALL trc_rad ( kstp )! Correct artificial negative concentrations78 CALL trc_zdf ( kt ) ! vertical mixing and after tracer fields 79 CALL trc_nxt ( kt ) ! tracer fields at next time step 80 IF( ln_trcrad ) CALL trc_rad ( kt ) ! Correct artificial negative concentrations 80 81 81 82 #if defined key_agrif 82 IF( .NOT. Agrif_Root()) CALL Agrif_Update_Trc( kstp )! Update tracer at AGRIF zoom boundaries : children only83 IF( .NOT.Agrif_Root()) CALL Agrif_Update_Trc( kt ) ! Update tracer at AGRIF zoom boundaries : children only 83 84 #endif 84 IF( ln_zps ) CALL zps_hde( kstp, jptra, trn, pgtu=gtru, pgtv=gtrv, sgtu=gtrui, sgtv=gtrvi ) ! Partial steps: now horizontal gradient of passive85 ! tracers at the bottom ocean level86 85 ! 87 86 ELSE ! 1D vertical configuration 88 CALL trc_sbc( kstp ) ! surface boundary condition 89 IF( .NOT. lk_offline .AND. lk_zdfkpp ) & 90 & CALL trc_kpp( kstp ) ! KPP non-local tracer fluxes 91 CALL trc_zdf( kstp ) ! vertical mixing and after tracer fields 92 CALL trc_nxt( kstp ) ! tracer fields at next time step 93 IF( ln_trcrad ) CALL trc_rad( kstp ) ! Correct artificial negative concentrations 87 CALL trc_sbc( kt ) ! surface boundary condition 88 IF( ln_trcdmp ) CALL trc_dmp( kt ) ! internal damping trends 89 CALL trc_zdf( kt ) ! vertical mixing and after tracer fields 90 CALL trc_nxt( kt ) ! tracer fields at next time step 91 IF( ln_trcrad ) CALL trc_rad( kt ) ! Correct artificial negative concentrations 94 92 ! 95 93 END IF … … 104 102 !!---------------------------------------------------------------------- 105 103 CONTAINS 106 SUBROUTINE trc_trp( k stp) ! Empty routine107 INTEGER, INTENT(in) :: k stp108 WRITE(*,*) 'trc_trp: You should not have seen this print! error?', k stp104 SUBROUTINE trc_trp( kt ) ! Empty routine 105 INTEGER, INTENT(in) :: kt 106 WRITE(*,*) 'trc_trp: You should not have seen this print! error?', kt 109 107 END SUBROUTINE trc_trp 110 108 #endif -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
r5038 r5901 11 11 !! 'key_top' TOP models 12 12 !!---------------------------------------------------------------------- 13 !! trc_ ldf: update the tracer trend with the lateral diffusion14 !! ldf_ctl: initialization, namelist read, and parameters control13 !! trc_zdf : update the tracer trend with the lateral diffusion 14 !! trc_zdf_ini : initialization, namelist read, and parameters control 15 15 !!---------------------------------------------------------------------- 16 USE oce_trc ! ocean dynamics and active tracers17 USE trc ! ocean passive tracers variables18 USE tr cnam_trp ! passive tracers transport namelistvariables19 USE trazdf_exp 20 USE trazdf_imp 21 USE tr d_oce22 USE trdtra 23 USE prtctl_trc 16 USE trc ! ocean passive tracers variables 17 USE oce_trc ! ocean dynamics and active tracers 18 USE trd_oce ! trends: ocean variables 19 USE trazdf_exp ! vertical diffusion: explicit (tra_zdf_exp routine) 20 USE trazdf_imp ! vertical diffusion: implicit (tra_zdf_imp routine) 21 USE trcldf ! passive tracers: lateral diffusion 22 USE trdtra ! trends manager: tracers 23 USE prtctl_trc ! Print control 24 24 25 25 IMPLICIT NONE 26 26 PRIVATE 27 27 28 PUBLIC trc_zdf ! called by step.F90 29 PUBLIC trc_zdf_alloc ! called by nemogcm.F90 28 PUBLIC trc_zdf ! called by step.F90 29 PUBLIC trc_zdf_ini ! called by nemogcm.F90 30 PUBLIC trc_zdf_alloc ! called by nemogcm.F90 31 32 ! !!** Vertical diffusion (nam_trczdf) ** 33 LOGICAL , PUBLIC :: ln_trczdf_exp !: explicit vertical diffusion scheme flag 34 INTEGER , PUBLIC :: nn_trczdf_exp !: number of sub-time step (explicit time stepping) 30 35 31 36 INTEGER :: nzdf = 0 ! type vertical diffusion algorithm used … … 39 44 # include "vectopt_loop_substitute.h90" 40 45 !!---------------------------------------------------------------------- 41 !! NEMO/TOP 3. 3 , NEMO Consortium (2010)46 !! NEMO/TOP 3.7 , NEMO Consortium (2015) 42 47 !! $Id$ 43 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 71 76 IF( nn_timing == 1 ) CALL timing_start('trc_zdf') 72 77 ! 73 IF( kt == nittrc000 ) CALL zdf_ctl ! initialisation & control of options 74 75 IF( ln_top_euler) THEN 76 r2dt(:) = rdttrc(:) ! = rdttrc (use Euler time stepping) 77 ELSE 78 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ! at nittrc000 79 r2dt(:) = rdttrc(:) ! = rdttrc (restarting with Euler time stepping) 80 ELSEIF( kt <= nittrc000 + 1 ) THEN ! at nittrc000 or nittrc000+1 81 r2dt(:) = 2. * rdttrc(:) ! = 2 rdttrc (leapfrog) 82 ENDIF 78 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ! at nittrc000 79 r2dt(:) = rdttrc(:) ! = rdttrc (use or restarting with Euler time stepping) 80 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+1 81 r2dt(:) = 2. * rdttrc(:) ! = 2 rdttrc (leapfrog) 83 82 ENDIF 84 83 … … 89 88 90 89 SELECT CASE ( nzdf ) ! compute lateral mixing trend and add it to the general trend 91 CASE ( -1 ) ! esopa: test all possibility with control print92 CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dt, nn_trczdf_exp, trb, tra, jptra )93 WRITE(charout, FMT="('zdf1 ')") ; CALL prt_ctl_trc_info(charout)94 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )95 CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dt, trb, tra, jptra )96 WRITE(charout, FMT="('zdf2 ')") ; CALL prt_ctl_trc_info(charout)97 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )98 90 CASE ( 0 ) ; CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dt, nn_trczdf_exp, trb, tra, jptra ) ! explicit scheme 99 91 CASE ( 1 ) ; CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dt, trb, tra, jptra ) ! implicit scheme 100 101 92 END SELECT 102 93 … … 121 112 122 113 123 SUBROUTINE zdf_ctl114 SUBROUTINE trc_zdf_ini 124 115 !!---------------------------------------------------------------------- 125 !! *** ROUTINE zdf_ctl***116 !! *** ROUTINE trc_zdf_ini *** 126 117 !! 127 118 !! ** Purpose : Choose the vertical mixing scheme … … 132 123 !! NB: The implicit scheme is required when using : 133 124 !! - rotated lateral mixing operator 134 !! - TKE, GLS or KPPvertical mixing scheme125 !! - TKE, GLS vertical mixing scheme 135 126 !!---------------------------------------------------------------------- 136 137 ! Define the vertical tracer physics scheme 138 ! ========================================== 139 140 ! Choice from ln_zdfexp already read in namelist in zdfini module 141 IF( ln_trczdf_exp ) THEN ! use explicit scheme 142 nzdf = 0 143 ELSE ! use implicit scheme 144 nzdf = 1 127 INTEGER :: ios ! Local integer output status for namelist read 128 !! 129 NAMELIST/namtrc_zdf/ ln_trczdf_exp , nn_trczdf_exp 130 !!---------------------------------------------------------------------- 131 ! 132 REWIND( numnat_ref ) ! namtrc_zdf in reference namelist 133 READ ( numnat_ref, namtrc_zdf, IOSTAT = ios, ERR = 905) 134 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_zdf in reference namelist', lwp ) 135 ! 136 REWIND( numnat_cfg ) ! namtrc_zdf in configuration namelist 137 READ ( numnat_cfg, namtrc_zdf, IOSTAT = ios, ERR = 906 ) 138 906 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_zdf in configuration namelist', lwp ) 139 IF(lwm) WRITE ( numont, namtrc_zdf ) 140 ! 141 IF(lwp) THEN ! Control print 142 WRITE(numout,*) 143 WRITE(numout,*) ' Namelist namtrc_zdf : set vertical diffusion parameters' 144 WRITE(numout,*) ' time splitting / backward scheme ln_trczdf_exp = ', ln_trczdf_exp 145 WRITE(numout,*) ' number of time step nn_trczdf_exp = ', nn_trczdf_exp 145 146 ENDIF 146 147 147 ! Force implicit schemes 148 IF( ln_trcldf_iso ) nzdf = 1 ! iso-neutral lateral physics 149 IF( ln_trcldf_hor .AND. ln_sco ) nzdf = 1 ! horizontal lateral physics in s-coordinate 150 #if defined key_zdftke || defined key_zdfgls || defined key_zdfkpp 151 nzdf = 1 ! TKE, GLS or KPP physics 152 #endif 153 IF( ln_trczdf_exp .AND. nzdf == 1 ) THEN 154 CALL ctl_stop( 'trc_zdf : If using the rotated lateral mixing operator or TKE, GLS or KPP vertical scheme ', & 155 & ' the implicit scheme is required, set ln_trczdf_exp = .false.' ) 148 ! ! Define the vertical tracer physics scheme 149 IF( ln_trczdf_exp ) THEN ; nzdf = 0 ! explicit scheme 150 ELSE ; nzdf = 1 ! implicit scheme 156 151 ENDIF 157 152 158 ! Test: esopa 159 IF( lk_esopa ) nzdf = -1 ! All schemes used 153 ! ! Force implicit schemes 154 IF( ln_trcldf_iso ) nzdf = 1 ! iso-neutral lateral physics 155 IF( ln_trcldf_hor .AND. ln_sco ) nzdf = 1 ! horizontal lateral physics in s-coordinate 156 #if defined key_zdftke || defined key_zdfgls 157 nzdf = 1 ! TKE or GLS physics 158 #endif 159 IF( ln_trczdf_exp .AND. nzdf == 1 ) & 160 CALL ctl_stop( 'trc_zdf : If using the rotated lateral mixing operator or TKE, GLS vertical scheme ', & 161 & ' the implicit scheme is required, set ln_trczdf_exp = .false.' ) 160 162 161 163 IF(lwp) THEN … … 163 165 WRITE(numout,*) 'trc:zdf_ctl : vertical passive tracer physics scheme' 164 166 WRITE(numout,*) '~~~~~~~~~~~' 165 IF( nzdf == -1 ) WRITE(numout,*) ' ESOPA test All scheme used'166 167 IF( nzdf == 0 ) WRITE(numout,*) ' Explicit time-splitting scheme' 167 168 IF( nzdf == 1 ) WRITE(numout,*) ' Implicit (euler backward) scheme' 168 169 ENDIF 169 170 END SUBROUTINE zdf_ctl 170 ! 171 END SUBROUTINE trc_zdf_ini 172 171 173 #else 172 174 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trdmxl_trc.F90
- Property svn:keywords set to Id
r5038 r5901 8 8 !! ! 07-06 (C. Deltel) key_gyre : do not call lbc_lnk 9 9 !!---------------------------------------------------------------------- 10 #if defined key_top && ( defined key_trdmxl_trc || defined key_esopa )10 #if defined key_top && defined key_trdmxl_trc 11 11 !!---------------------------------------------------------------------- 12 12 !! 'key_trdmxl_trc' mixed layer trend diagnostics … … 24 24 USE zdfddm , ONLY : avs ! salinity vertical diffusivity coeff. at w-point 25 25 # endif 26 USE trcnam_trp ! passive tracers transport namelist variables27 26 USE trdtrc_oce ! definition of main arrays used for trends computations 28 27 USE in_out_manager ! I/O manager … … 67 66 68 67 !! * Substitutions 69 # include " top_substitute.h90"68 # include "domzgr_substitute.h90" 70 69 # include "zdfddm_substitute.h90" 71 70 !!---------------------------------------------------------------------- 72 71 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 73 !! $ Header:$72 !! $Id$ 74 73 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 75 74 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trdmxl_trc_rst.F90
- Property svn:keywords set to Id
r5038 r5901 23 23 !!--------------------------------------------------------------------------------- 24 24 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 25 !! $ Header: /home/opalod/NEMOCVSROOT/NEMO/OPA_SRC/TRD/trdmxl_rst.F90,v 1.6 2006/11/14 09:46:13 opalod Exp$25 !! $Id$ 26 26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 27 27 !!--------------------------------------------------------------------------------- … … 39 39 ! 40 40 CHARACTER(LEN=20) :: clkt ! ocean time-step deine as a character 41 CHARACTER(LEN=50) :: clname ! ice output restart file name 41 CHARACTER(LEN=50) :: clname ! output restart file name 42 CHARACTER(LEN=256) :: clpath ! full path to restart file 42 43 CHARACTER (len=35) :: charout 43 44 INTEGER :: jl, jk, jn ! loop indice … … 51 52 ENDIF 52 53 clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_"//TRIM(cn_trdrst_trc_out) 53 IF(lwp) WRITE(numout,*) ' open ocean restart_mld_trc NetCDF '//clname 54 CALL iom_open( clname, nummldw_trc, ldwrt = .TRUE., kiolib = jprstlib ) 54 clpath = TRIM(cn_trcrst_outdir) 55 IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 56 IF(lwp) WRITE(numout,*) ' open ocean restart_mld_trc NetCDF 'TRIM(clpath)//TRIM(clname) 57 CALL iom_open( TRIM(clpath)//TRIM(clname), nummldw_trc, ldwrt = .TRUE., kiolib = jprstlib ) 55 58 ENDIF 56 59 … … 133 136 INTEGER :: jlibalt = jprstlib 134 137 LOGICAL :: llok 138 CHARACTER(LEN=256) :: clpath ! full path to restart file 135 139 !!----------------------------------------------------------------------------- 136 140 … … 141 145 ENDIF 142 146 147 clpath = TRIM(cn_trcrst_indir) 148 IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 149 143 150 IF ( jprstlib == jprstdimg ) THEN 144 151 ! eventually read netcdf file (monobloc) for restarting on different number of processors 145 152 ! if {cn_trdrst_trc_in}.nc exists, then set jlibalt to jpnf90 146 INQUIRE( FILE = TRIM(c n_trdrst_trc_in)//'.nc', EXIST = llok )153 INQUIRE( FILE = TRIM(clpath)//TRIM(cn_trdrst_trc_in)//'.nc', EXIST = llok ) 147 154 IF ( llok ) THEN ; jlibalt = jpnf90 ; ELSE ; jlibalt = jprstlib ; ENDIF 148 155 ENDIF 149 156 150 CALL iom_open( cn_trdrst_trc_in, inum, kiolib = jlibalt )157 CALL iom_open( TRIM(clpath)//TRIM(cn_trdrst_trc_in), inum, kiolib = jlibalt ) 151 158 152 159 IF( ln_trdmxl_trc_instant ) THEN -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trdtrc.F90
- Property svn:keywords set to Id
r5038 r5901 14 14 !!---------------------------------------------------------------------- 15 15 USE trc ! tracer definitions (trn, trb, tra, etc.) 16 USE trcnam_trp17 16 USE trd_oce 18 17 USE trdtrc_oce ! definition of main arrays used for trends computations … … 29 28 PUBLIC trd_trc 30 29 31 !! * Substitutions32 # include "top_substitute.h90"33 30 !!---------------------------------------------------------------------- 34 31 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 35 !! $ Header:$32 !! $Id$ 36 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 37 34 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trdtrc_oce.F90
- Property svn:keywords set to Id
r5038 r5901 4 4 !! Ocean trends : set tracer and momentum trend variables 5 5 !!====================================================================== 6 #if defined key_top || defined key_esopa6 #if defined key_top 7 7 !!---------------------------------------------------------------------- 8 8 !! 'key_top' TOP models … … 30 30 # endif 31 31 32 # if defined key_trdmxl_trc || defined key_esopa32 # if defined key_trdmxl_trc 33 33 !!---------------------------------------------------------------------- 34 34 !! 'key_trdmxl_trc' mixed layer trends diagnostics … … 118 118 !!---------------------------------------------------------------------- 119 119 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 120 !! $ Header: /home/opalod/NEMOCVSROOT/NEMO/OPA_SRC/TRD/trdmxl_oce.F90,v 1.2 2005/03/27 18:35:23 opalod Exp$120 !! $Id$ 121 121 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 122 122 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90
r5038 r5901 11 11 !! 'key_top' TOP models 12 12 !!---------------------------------------------------------------------- 13 14 ! * Domain size *13 ! 14 ! !* Domain size * 15 15 USE par_oce , ONLY : jpi => jpi !: first dimension of grid --> i 16 16 USE par_oce , ONLY : jpj => jpj !: second dimension of grid --> j … … 20 20 USE par_oce , ONLY : jpkm1 => jpkm1 !: jpk - 1 21 21 USE par_oce , ONLY : jpij => jpij !: jpi x jpj 22 USE par_oce , ONLY : lk_esopa => lk_esopa !: flag to activate the all option23 22 USE par_oce , ONLY : jp_tem => jp_tem !: indice for temperature 24 23 USE par_oce , ONLY : jp_sal => jp_sal !: indice for salinity 25 24 26 !* IO manager * 27 USE in_out_manager 28 29 !* Memory Allocation * 30 USE wrk_nemo 31 32 !* Timing * 33 USE timing 34 35 !* MPP library 36 USE lib_mpp 37 38 !* Fortran utilities 39 USE lib_fortran 40 41 !* Lateral boundary conditions 42 USE lbclnk 43 44 !* physical constants * 45 USE phycst 46 47 !* 1D configuration 48 USE c1d 49 50 !* model domain * 51 USE dom_oce 25 USE in_out_manager !* IO manager * 26 USE wrk_nemo !* Memory Allocation * 27 USE timing !* Timing * 28 USE lib_mpp !* MPP library 29 USE lib_fortran !* Fortran utilities 30 USE lbclnk !* Lateral boundary conditions 31 USE phycst !* physical constants * 32 USE c1d !* 1D configuration 33 USE dom_oce !* model domain * 52 34 53 35 USE domvvl, ONLY : un_td, vn_td !: thickness diffusion transport … … 56 38 57 39 !* ocean fields: here now and after fields * 58 USE oce , ONLY : ua => ua !: i-horizontal velocity (m s-1)59 USE oce , ONLY : va => va !: j-horizontal velocity (m s-1)60 40 USE oce , ONLY : un => un !: i-horizontal velocity (m s-1) 61 41 USE oce , ONLY : vn => vn !: j-horizontal velocity (m s-1) … … 66 46 USE oce , ONLY : rhop => rhop !: potential volumic mass (kg m-3) 67 47 USE oce , ONLY : rhd => rhd !: in situ density anomalie rhd=(rho-rau0)/rau0 (no units) 48 USE oce , ONLY : hdivn => hdivn !: horizontal divergence (1/s) 49 USE oce , ONLY : sshn => sshn !: sea surface height at t-point [m] 50 USE oce , ONLY : sshb => sshb !: sea surface height at t-point [m] 51 USE oce , ONLY : ssha => ssha !: sea surface height at t-point [m] 68 52 #if defined key_offline 69 53 USE oce , ONLY : rab_n => rab_n !: local thermal/haline expension ratio at T-points 70 54 #endif 71 USE oce , ONLY : hdivn => hdivn !: horizontal divergence (1/s)72 USE oce , ONLY : rotn => rotn !: relative vorticity [s-1]73 USE oce , ONLY : hdivb => hdivb !: horizontal divergence (1/s)74 USE oce , ONLY : rotb => rotb !: relative vorticity [s-1]75 USE oce , ONLY : sshn => sshn !: sea surface height at t-point [m]76 USE oce , ONLY : sshb => sshb !: sea surface height at t-point [m]77 USE oce , ONLY : ssha => ssha !: sea surface height at t-point [m]78 USE oce , ONLY : l_traldf_rot => l_traldf_rot !: rotated laplacian operator for lateral diffusion79 55 80 56 !* surface fluxes * … … 87 63 USE sbc_oce , ONLY : fmmflx => fmmflx !: freshwater budget: volume flux [Kg/m2/s] 88 64 USE sbc_oce , ONLY : rnf => rnf !: river runoff [Kg/m2/s] 89 USE sbc_oce , ONLY : ln_dm2dc => ln_dm2dc !: Daily mean to Diurnal Cycle short wave (qsr) 65 USE sbc_oce , ONLY : ln_dm2dc => ln_dm2dc !: Diurnal Cycle 66 USE sbc_oce , ONLY : ncpl_qsr_freq => ncpl_qsr_freq !: qsr coupling frequency per days from atmospher 90 67 USE sbc_oce , ONLY : ln_rnf => ln_rnf !: runoffs / runoff mouths 91 68 USE sbc_oce , ONLY : fr_i => fr_i !: ice fraction (between 0 to 1) 69 USE sbc_oce , ONLY : nn_ice_embd => nn_ice_embd !: flag for levitating/embedding sea-ice in the ocean 92 70 USE traqsr , ONLY : rn_abs => rn_abs !: fraction absorbed in the very near surface 93 71 USE traqsr , ONLY : rn_si0 => rn_si0 !: very near surface depth of extinction … … 96 74 USE sbcrnf , ONLY : rnfmsk_z => rnfmsk_z !: mixed adv scheme in runoffs vicinity (vert.) 97 75 USE sbcrnf , ONLY : h_rnf => h_rnf !: river runoff [Kg/m2/s] 76 USE sbcrnf , ONLY : nk_rnf => nk_rnf !: depth of runoff in model level 98 77 99 78 USE trc_oce 100 79 80 !!gm : I don't understand this as ldftra (where everything is defined) is used by TRC in all cases (ON/OFF-line) 81 !!gm so the following lines should be removed.... logical should be the one of TRC namelist 82 !!gm In case off coarsening.... the ( ahtu, ahtv, aeiu, aeiv) arrays are needed that's all. 101 83 !* lateral diffusivity (tracers) * 102 USE ldftra_oce , ONLY : rldf => rldf !: multiplicative coef. for lateral diffusivity 103 USE ldftra_oce , ONLY : rn_aht_0 => rn_aht_0 !: horizontal eddy diffusivity for tracers (m2/s) 104 USE ldftra_oce , ONLY : aht0 => aht0 !: horizontal eddy diffusivity for tracers (m2/s) 105 USE ldftra_oce , ONLY : ahtb0 => ahtb0 !: background eddy diffusivity for isopycnal diff. (m2/s) 106 USE ldftra_oce , ONLY : ahtu => ahtu !: lateral diffusivity coef. at u-points 107 USE ldftra_oce , ONLY : ahtv => ahtv !: lateral diffusivity coef. at v-points 108 USE ldftra_oce , ONLY : ahtw => ahtw !: lateral diffusivity coef. at w-points 109 USE ldftra_oce , ONLY : ahtt => ahtt !: lateral diffusivity coef. at t-points 110 USE ldftra_oce , ONLY : aeiv0 => aeiv0 !: eddy induced velocity coefficient (m2/s) 111 USE ldftra_oce , ONLY : aeiu => aeiu !: eddy induced velocity coef. at u-points (m2/s) 112 USE ldftra_oce , ONLY : aeiv => aeiv !: eddy induced velocity coef. at v-points (m2/s) 113 USE ldftra_oce , ONLY : aeiw => aeiw !: eddy induced velocity coef. at w-points (m2/s) 114 USE ldftra_oce , ONLY : lk_traldf_eiv => lk_traldf_eiv !: eddy induced velocity flag 84 USE ldftra , ONLY : rn_aht_0 => rn_aht_0 !: laplacian lateral eddy diffusivity [m2/s] 85 USE ldftra , ONLY : rn_bht_0 => rn_bht_0 !: bilaplacian lateral eddy diffusivity [m4/s] 86 USE ldftra , ONLY : ahtu => ahtu !: lateral diffusivity coef. at u-points 87 USE ldftra , ONLY : ahtv => ahtv !: lateral diffusivity coef. at v-points 88 USE ldftra , ONLY : rn_aeiv_0 => rn_aeiv_0 !: eddy induced velocity coefficient (m2/s) 89 USE ldftra , ONLY : aeiu => aeiu !: eddy induced velocity coef. at u-points (m2/s) 90 USE ldftra , ONLY : aeiv => aeiv !: eddy induced velocity coef. at v-points (m2/s) 91 USE ldftra , ONLY : ln_ldfeiv => ln_ldfeiv !: eddy induced velocity flag 92 93 !!gm this should be : ln_trcldf_triad (TRC namelist) 94 USE ldfslp , ONLY : ln_traldf_triad => ln_traldf_triad !: triad scheme (Griffies et al.) 95 96 !* direction of lateral diffusion * 97 USE ldfslp , ONLY : l_ldfslp => l_ldfslp !: slopes flag 98 USE ldfslp , ONLY : uslp => uslp !: i-slope at u-point 99 USE ldfslp , ONLY : vslp => vslp !: j-slope at v-point 100 USE ldfslp , ONLY : wslpi => wslpi !: i-slope at w-point 101 USE ldfslp , ONLY : wslpj => wslpj !: j-slope at w-point 102 !!gm end 115 103 116 104 !* vertical diffusion * … … 126 114 USE zdfmxl , ONLY : hmlpt => hmlpt !: mixed layer depth at t-points (m) 127 115 128 !* direction of lateral diffusion * 129 USE ldfslp , ONLY : lk_ldfslp => lk_ldfslp !: slopes flag 130 # if defined key_ldfslp 131 USE ldfslp , ONLY : uslp => uslp !: i-direction slope at u-, w-points 132 USE ldfslp , ONLY : vslp => vslp !: j-direction slope at v-, w-points 133 USE ldfslp , ONLY : wslpi => wslpi !: i-direction slope at u-, w-points 134 USE ldfslp , ONLY : wslpj => wslpj !: j-direction slope at v-, w-points 135 # endif 136 116 USE diaar5 , ONLY : lk_diaar5 => lk_diaar5 137 117 #else 138 118 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trc.F90
r5038 r5901 34 34 REAL(wp), PUBLIC :: areatot !: total volume 35 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: cvol !: volume correction -degrad option- 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trn !: traceur concentration for now time step 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tra !: traceur concentration for next time step 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trb !: traceur concentration for before time step 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trn !: tracer concentration for now time step 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tra !: tracer concentration for next time step 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trb !: tracer concentration for before time step 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: sbc_trc_b !: Before sbc fluxes for tracers 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: sbc_trc !: Now sbc fluxes for tracers 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: trc_i !: prescribed tracer concentration in sea ice for SBC 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: trc_o !: prescribed tracer concentration in ocean for SBC 44 INTEGER , PUBLIC :: nn_ice_tr !: handling of sea ice tracers 39 45 40 46 !! interpolated gradient … … 44 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gtrui !: hor. gradient at u-points at top ocean level 45 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gtrvi !: hor. gradient at v-points at top ocean level 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_mean !: daily mean qsr 46 53 47 54 !! passive tracers (input and output) … … 54 61 INTEGER , PUBLIC :: nn_rsttr !: control of the time step ( 0 or 1 ) for pass. tr. 55 62 CHARACTER(len = 80) , PUBLIC :: cn_trcrst_in !: suffix of pass. tracer restart name (input) 63 CHARACTER(len = 256), PUBLIC :: cn_trcrst_indir !: restart input directory 56 64 CHARACTER(len = 80) , PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output) 65 CHARACTER(len = 256), PUBLIC :: cn_trcrst_outdir !: restart output directory 57 66 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: rdttrc !: vertical profile of passive tracer time step 58 67 LOGICAL , PUBLIC :: ln_top_euler !: boolean term for euler integration … … 61 70 LOGICAL , PUBLIC :: ln_trcdmp_clo !: internal damping flag on closed seas 62 71 INTEGER , PUBLIC :: nittrc000 !: first time step of passive tracers model 72 LOGICAL , PUBLIC :: l_trcdm2dc !: Diurnal cycle for TOP 73 74 !! Information for the ice module for tracers 75 !! ------------------------------------------ 76 TYPE TRC_I_NML !--- Ice tracer namelist structure 77 REAL(wp) :: trc_ratio ! ice-ocean trc ratio 78 REAL(wp) :: trc_prescr ! prescribed ice trc cc 79 CHARACTER(len=2) :: ctrc_o ! choice of ocean trc cc 80 END TYPE 81 82 REAL(wp), DIMENSION(jptra), PUBLIC :: trc_ice_ratio, & ! ice-ocean tracer ratio 83 trc_ice_prescr ! prescribed ice trc cc 84 CHARACTER(len=2), DIMENSION(jptra), PUBLIC :: cn_trc_o ! choice of ocean tracer cc 63 85 64 86 !! information for outputs … … 121 143 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avs_tm !: vertical double diffusivity coeff. at w-point [m/s] 122 144 # endif 123 #if defined key_ldfslp124 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wslpi_tm !: i-direction slope at u-, w-points125 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wslpj_tm !: j-direction slope at u-, w-points126 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_tm !: j-direction slope at u-, w-points127 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: vslp_tm !: j-direction slope at u-, w-points128 #endif129 145 #if defined key_trabbl 130 146 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ahu_bbl_tm !: u-, w-points … … 161 177 #endif 162 178 ! 163 #if defined key_ldfslp164 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wslpi_temp, wslpj_temp, uslp_temp, vslp_temp !: hold current values165 #endif166 !167 179 # if defined key_zdfddm 168 180 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: avs_temp !: salinity vertical diffusivity coeff. at w-point [m/s] … … 172 184 !!---------------------------------------------------------------------- 173 185 !! NEMO/TOP 3.3.1 , NEMO Consortium (2010) 174 !! $Id$ 186 !! $Id$ 175 187 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 176 188 !!---------------------------------------------------------------------- … … 185 197 ! 186 198 ALLOCATE( trn(jpi,jpj,jpk,jptra), trb(jpi,jpj,jpk,jptra), tra(jpi,jpj,jpk,jptra), & 199 & trc_i(jpi,jpj,jptra) , trc_o(jpi,jpj,jptra) , & 187 200 & gtru (jpi,jpj,jptra) , gtrv (jpi,jpj,jptra) , & 188 201 & gtrui(jpi,jpj,jptra) , gtrvi(jpi,jpj,jptra) , & 202 & sbc_trc_b(jpi,jpj,jptra), sbc_trc(jpi,jpj,jptra) , & 189 203 & cvol(jpi,jpj,jpk) , rdttrc(jpk) , trai(jptra) , & 190 204 & ctrcnm(jptra) , ctrcln(jptra) , ctrcun(jptra) , & 191 & ln_trc_ini(jptra) , ln_trc_wri(jptra) 205 & ln_trc_ini(jptra) , ln_trc_wri(jptra) , qsr_mean(jpi,jpj) , STAT = trc_alloc ) 192 206 193 207 IF( trc_alloc /= 0 ) CALL ctl_warn('trc_alloc: failed to allocate arrays') -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcbc.F90
- Property svn:keywords set to Id
r5038 r5901 44 44 !!---------------------------------------------------------------------- 45 45 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 46 !! $Id : trcdta.F90 2977 2011-10-22 13:46:41Z cetlod$46 !! $Id$ 47 47 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 48 48 !!---------------------------------------------------------------------- -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcdia.F90
r4292 r5901 51 51 INTEGER :: nhoritb !: id for horizontal mesh 52 52 53 !! * Substitutions54 # include "top_substitute.h90"55 53 !!---------------------------------------------------------------------- 56 54 !! NEMO/TOP 3.3 , NEMO Consortium (2010) -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcdta.F90
r5038 r5901 223 223 sf_dta(1)%fnow(ji,jj,ik) = (1.-zl) * sf_dta(1)%fnow(ji,jj,ik) + zl * sf_dta(1)%fnow(ji,jj,ik-1) 224 224 ENDIF 225 ik = mikt(ji,jj) 226 IF( ik > 1 ) THEN 227 zl = ( gdept_0(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) ) 228 sf_dta(1)%fnow(ji,jj,ik) = (1.-zl) * sf_dta(1)%fnow(ji,jj,ik) + zl * sf_dta(1)%fnow(ji,jj,ik+1) 229 ENDIF 225 230 END DO 226 231 END DO -
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 -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
r5038 r5901 20 20 USE oce_trc ! shared variables between ocean and passive tracers 21 21 USE trc ! passive tracers common variables 22 USE trcnam_trp ! Transport namelist23 22 USE trcnam_pisces ! PISCES namelist 24 23 USE trcnam_cfc ! CFC SMS namelist … … 35 34 PUBLIC trc_nam ! called in trcini 36 35 37 !! * Substitutions38 # include "top_substitute.h90"39 36 !!---------------------------------------------------------------------- 40 37 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 41 !! $Id$ 38 !! $Id$ 42 39 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 43 40 !!---------------------------------------------------------------------- 44 45 41 CONTAINS 46 47 42 48 43 SUBROUTINE trc_nam … … 57 52 !!--------------------------------------------------------------------- 58 53 INTEGER :: jn ! dummy loop indice 59 ! ! Parameters of the run 60 IF( .NOT. lk_offline ) CALL trc_nam_run 61 62 ! ! passive tracer informations 63 CALL trc_nam_trc 64 65 ! ! Parameters of additional diagnostics 66 CALL trc_nam_dia 67 68 ! ! namelist of transport 69 CALL trc_nam_trp 70 71 72 IF( ln_rsttr ) ln_trcdta = .FALSE. ! restart : no need of clim data 73 ! 74 IF( ln_trcdmp .OR. ln_trcdmp_clo ) ln_trcdta = .TRUE. ! damping : need to have clim data 75 ! 76 IF( .NOT.ln_trcdta ) THEN 77 ln_trc_ini(:) = .FALSE. 78 ENDIF 79 80 IF(lwp) THEN ! control print 54 ! 55 IF( .NOT.lk_offline ) CALL trc_nam_run ! Parameters of the run 56 ! 57 CALL trc_nam_trc ! passive tracer informations 58 ! 59 CALL trc_nam_dia ! Parameters of additional diagnostics 60 ! 61 ! 62 IF( ln_rsttr ) ln_trcdta = .FALSE. ! restart : no need of clim data 63 ! 64 IF( ln_trcdmp .OR. ln_trcdmp_clo ) ln_trcdta = .TRUE. ! damping : need to have clim data 65 ! 66 IF( .NOT.ln_trcdta ) ln_trc_ini(:) = .FALSE. 67 68 IF(lwp) THEN ! control print 81 69 WRITE(numout,*) 82 70 WRITE(numout,*) ' Namelist : namtrc' … … 147 135 148 136 137 ! Call the ice module for tracers 138 ! ------------------------------- 139 CALL trc_nam_ice 140 149 141 ! namelist of SMS 150 142 ! --------------- … … 167 159 END SUBROUTINE trc_nam 168 160 161 169 162 SUBROUTINE trc_nam_run 170 163 !!--------------------------------------------------------------------- … … 175 168 !!--------------------------------------------------------------------- 176 169 NAMELIST/namtrc_run/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, ln_top_euler, & 177 & cn_trcrst_in , cn_trcrst_out178 170 & cn_trcrst_indir, cn_trcrst_outdir, cn_trcrst_in, cn_trcrst_out 171 ! 179 172 INTEGER :: ios ! Local integer output status for namelist read 180 181 !!--------------------------------------------------------------------- 182 183 173 !!--------------------------------------------------------------------- 174 ! 184 175 IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 185 176 IF(lwp) WRITE(numout,*) '~~~~~~~' … … 216 207 217 208 209 SUBROUTINE trc_nam_ice 210 !!--------------------------------------------------------------------- 211 !! *** ROUTINE trc_nam_ice *** 212 !! 213 !! ** Purpose : Read the namelist for the ice effect on tracers 214 !! 215 !! ** Method : - 216 !! 217 !!--------------------------------------------------------------------- 218 INTEGER :: jn ! dummy loop indices 219 INTEGER :: ios ! Local integer output status for namelist read 220 ! 221 TYPE(TRC_I_NML), DIMENSION(jptra) :: sn_tri_tracer 222 !! 223 NAMELIST/namtrc_ice/ nn_ice_tr, sn_tri_tracer 224 !!--------------------------------------------------------------------- 225 ! 226 IF(lwp) THEN 227 WRITE(numout,*) 228 WRITE(numout,*) 'trc_nam_ice : Read the namelist for trc_ice' 229 WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 230 ENDIF 231 232 IF( nn_timing == 1 ) CALL timing_start('trc_nam_ice') 233 234 ! 235 REWIND( numnat_ref ) ! Namelist namtrc_ice in reference namelist : Passive tracer input data 236 READ ( numnat_ref, namtrc_ice, IOSTAT = ios, ERR = 901) 237 901 IF( ios /= 0 ) CALL ctl_nam ( ios , ' namtrc_ice in reference namelist ', lwp ) 238 239 REWIND( numnat_cfg ) ! Namelist namtrc_ice in configuration namelist : Pisces external sources of nutrients 240 READ ( numnat_cfg, namtrc_ice, IOSTAT = ios, ERR = 902 ) 241 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ice in configuration namelist', lwp ) 242 243 IF( lwp ) THEN 244 WRITE(numout,*) ' ' 245 WRITE(numout,*) ' Sea ice tracers option (nn_ice_tr) : ', nn_ice_tr 246 WRITE(numout,*) ' ' 247 ENDIF 248 249 ! Assign namelist stuff 250 DO jn = 1, jptra 251 trc_ice_ratio(jn) = sn_tri_tracer(jn)%trc_ratio 252 trc_ice_prescr(jn) = sn_tri_tracer(jn)%trc_prescr 253 cn_trc_o (jn) = sn_tri_tracer(jn)%ctrc_o 254 END DO 255 256 IF( nn_timing == 1 ) CALL timing_stop('trc_nam_ice') 257 ! 258 END SUBROUTINE trc_nam_ice 259 260 218 261 SUBROUTINE trc_nam_trc 219 262 !!--------------------------------------------------------------------- … … 223 266 !! 224 267 !!--------------------------------------------------------------------- 225 TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer ! type of tracer for saving if not key_iomput226 !!227 NAMELIST/namtrc/ sn_tracer, ln_trcdta,ln_trcdmp, ln_trcdmp_clo228 229 268 INTEGER :: ios ! Local integer output status for namelist read 230 269 INTEGER :: jn ! dummy loop indice 270 ! 271 TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer ! type of tracer for saving if not key_iomput 272 !! 273 NAMELIST/namtrc/ sn_tracer, ln_trcdta,ln_trcdmp, ln_trcdmp_clo 231 274 !!--------------------------------------------------------------------- 232 275 IF(lwp) WRITE(numout,*) 233 276 IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 234 277 IF(lwp) WRITE(numout,*) '~~~~~~~' 235 236 278 237 279 REWIND( numnat_ref ) ! Namelist namtrc in reference namelist : Passive tracer variables … … 251 293 ln_trc_wri(jn) = sn_tracer(jn)%llsave 252 294 END DO 253 254 295 ! 296 END SUBROUTINE trc_nam_trc 255 297 256 298 … … 265 307 !! ( (PISCES, CFC, MY_TRC ) 266 308 !!--------------------------------------------------------------------- 309 INTEGER :: ios ! Local integer output status for namelist read 267 310 INTEGER :: ierr 311 !! 268 312 #if defined key_trdmxl_trc || defined key_trdtrc 269 313 NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & … … 272 316 #endif 273 317 NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 274 275 INTEGER :: ios ! Local integer output status for namelist read276 318 !!--------------------------------------------------------------------- 277 319 … … 339 381 !!---------------------------------------------------------------------- 340 382 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 341 !! $Id$ 383 !! $Id$ 342 384 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 343 385 !!====================================================================== 344 END MODULE 386 END MODULE trcnam -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcrst.F90
r5038 r5901 25 25 USE oce_trc 26 26 USE trc 27 USE trcnam_trp28 27 USE iom 29 28 USE daymod … … 37 36 38 37 !! * Substitutions 39 # include " top_substitute.h90"38 # include "domzgr_substitute.h90" 40 39 41 40 CONTAINS … … 51 50 CHARACTER(LEN=20) :: clkt ! ocean time-step define as a character 52 51 CHARACTER(LEN=50) :: clname ! trc output restart file name 52 CHARACTER(LEN=256) :: clpath ! full path to ocean output restart file 53 53 !!---------------------------------------------------------------------- 54 54 ! … … 56 56 IF( kt == nittrc000 ) THEN 57 57 lrst_trc = .FALSE. 58 nitrst = nitend 59 ENDIF 60 61 IF( MOD( kt - 1, nstock ) == 0 ) THEN 58 IF( ln_rst_list ) THEN 59 nrst_lst = 1 60 nitrst = nstocklist( nrst_lst ) 61 ELSE 62 nitrst = nitend 63 ENDIF 64 ENDIF 65 66 IF( .NOT. ln_rst_list .AND. MOD( kt - 1, nstock ) == 0 ) THEN 62 67 ! we use kt - 1 and not kt - nittrc000 to keep the same periodicity from the beginning of the experiment 63 68 nitrst = kt + nstock - 1 ! define the next value of nitrst for restart writing … … 79 84 IF(lwp) WRITE(numout,*) 80 85 clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_"//TRIM(cn_trcrst_out) 81 IF(lwp) WRITE(numout,*) ' open trc restart.output NetCDF file: '//clname 82 CALL iom_open( clname, numrtw, ldwrt = .TRUE., kiolib = jprstlib ) 86 clpath = TRIM(cn_trcrst_outdir) 87 IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 88 IF(lwp) WRITE(numout,*) & 89 ' open trc restart.output NetCDF file: ',TRIM(clpath)//clname 90 CALL iom_open( TRIM(clpath)//TRIM(clname), numrtw, ldwrt = .TRUE., kiolib = jprstlib ) 83 91 lrst_trc = .TRUE. 84 92 ENDIF … … 140 148 lrst_trc = .FALSE. 141 149 #endif 150 IF( lk_offline .AND. ln_rst_list ) THEN 151 nrst_lst = nrst_lst + 1 152 nitrst = nstocklist( nrst_lst ) 153 ENDIF 142 154 ENDIF 143 155 ! … … 190 202 ! eventually read netcdf file (monobloc) for restarting on different number of processors 191 203 ! if {cn_trcrst_in}.nc exists, then set jlibalt to jpnf90 192 INQUIRE( FILE = TRIM(cn_trcrst_in )//'.nc', EXIST = llok )204 INQUIRE( FILE = TRIM(cn_trcrst_indir)//'/'//TRIM(cn_trcrst_in)//'.nc', EXIST = llok ) 193 205 IF ( llok ) THEN ; jlibalt = jpnf90 ; ELSE ; jlibalt = jprstlib ; ENDIF 194 206 ENDIF 195 207 196 CALL iom_open( cn_trcrst_in, numrtr, kiolib = jlibalt ) 197 198 CALL iom_get ( numrtr, 'kt', zkt ) ! last time-step of previous run 199 200 IF(lwp) THEN 201 WRITE(numout,*) ' *** Info read in restart : ' 202 WRITE(numout,*) ' previous time-step : ', NINT( zkt ) 203 WRITE(numout,*) ' *** restart option' 204 SELECT CASE ( nn_rsttr ) 205 CASE ( 0 ) ; WRITE(numout,*) ' nn_rsttr = 0 : no control of nittrc000' 206 CASE ( 1 ) ; WRITE(numout,*) ' nn_rsttr = 1 : no control the date at nittrc000 (use ndate0 read in the namelist)' 207 CASE ( 2 ) ; WRITE(numout,*) ' nn_rsttr = 2 : calendar parameters read in restart' 208 END SELECT 209 WRITE(numout,*) 210 ENDIF 211 ! Control of date 212 IF( nittrc000 - NINT( zkt ) /= nn_dttrc .AND. nn_rsttr /= 0 ) & 213 & CALL ctl_stop( ' ===>>>> : problem with nittrc000 for the restart', & 214 & ' verify the restart file or rerun with nn_rsttr = 0 (namelist)' ) 215 IF( lk_offline ) THEN ! set the date in offline mode 216 ! Check dynamics and tracer time-step consistency and force Euler restart if changed 217 IF( iom_varid( numrtr, 'rdttrc1', ldstop = .FALSE. ) > 0 ) THEN 218 CALL iom_get( numrtr, 'rdttrc1', zrdttrc1 ) 219 IF( zrdttrc1 /= rdt * nn_dttrc ) neuler = 0 220 ENDIF 221 ! ! define ndastp and adatrj 222 IF( nn_rsttr == 2 ) THEN 208 IF( ln_rsttr ) THEN 209 CALL iom_open( TRIM(cn_trcrst_indir)//'/'//cn_trcrst_in, numrtr, kiolib = jlibalt ) 210 CALL iom_get ( numrtr, 'kt', zkt ) ! last time-step of previous run 211 212 IF(lwp) THEN 213 WRITE(numout,*) ' *** Info read in restart : ' 214 WRITE(numout,*) ' previous time-step : ', NINT( zkt ) 215 WRITE(numout,*) ' *** restart option' 216 SELECT CASE ( nn_rsttr ) 217 CASE ( 0 ) ; WRITE(numout,*) ' nn_rsttr = 0 : no control of nittrc000' 218 CASE ( 1 ) ; WRITE(numout,*) ' nn_rsttr = 1 : no control the date at nittrc000 (use ndate0 read in the namelist)' 219 CASE ( 2 ) ; WRITE(numout,*) ' nn_rsttr = 2 : calendar parameters read in restart' 220 END SELECT 221 WRITE(numout,*) 222 ENDIF 223 ! Control of date 224 IF( nittrc000 - NINT( zkt ) /= nn_dttrc .AND. nn_rsttr /= 0 ) & 225 & CALL ctl_stop( ' ===>>>> : problem with nittrc000 for the restart', & 226 & ' verify the restart file or rerun with nn_rsttr = 0 (namelist)' ) 227 ENDIF 228 ! 229 IF( lk_offline ) THEN 230 ! ! set the date in offline mode 231 IF( ln_rsttr .AND. nn_rsttr == 2 ) THEN 223 232 CALL iom_get( numrtr, 'ndastp', zndastp ) 224 233 ndastp = NINT( zndastp ) 225 234 CALL iom_get( numrtr, 'adatrj', adatrj ) 226 ELSE235 ELSE 227 236 ndastp = ndate0 - 1 ! ndate0 read in the namelist in dom_nam 228 237 adatrj = ( REAL( nittrc000-1, wp ) * rdttra(1) ) / rday … … 235 244 WRITE(numout,*) ' number of elapsed days since the begining of run : ', adatrj 236 245 WRITE(numout,*) 246 ENDIF 247 ! 248 IF( ln_rsttr ) THEN ; neuler = 1 249 ELSE ; neuler = 0 237 250 ENDIF 238 251 ! … … 265 278 INTEGER :: jk, jn 266 279 REAL(wp) :: ztraf, zmin, zmax, zmean, zdrift 280 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 267 281 !!---------------------------------------------------------------------- 268 282 … … 273 287 ENDIF 274 288 ! 275 DO jn = 1, jptra 276 ztraf = glob_sum( trn(:,:,:,jn) * cvol(:,:,:) ) 289 DO jk = 1, jpk 290 zvol(:,:,jk) = e1e2t(:,:) * fse3t_a(:,:,jk) * tmask(:,:,jk) 291 END DO 292 ! 293 DO jn = 1, jptra 294 ztraf = glob_sum( trn(:,:,:,jn) * zvol(:,:,:) ) 277 295 zmin = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 278 296 zmax = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) … … 306 324 !!---------------------------------------------------------------------- 307 325 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 308 !! $Id$ 326 !! $Id$ 309 327 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 310 328 !!====================================================================== -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcsms.F90
r3680 r5901 75 75 76 76 !!====================================================================== 77 END MODULE 77 END MODULE trcsms -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcstp.F90
r5038 r5901 30 30 PUBLIC trc_stp ! called by step 31 31 32 REAL(wp), DIMENSION(:,:,:), SAVE, ALLOCATABLE :: qsr_arr ! save qsr during TOP time-step 33 REAL(wp) :: rdt_sampl 34 INTEGER :: nb_rec_per_days 35 INTEGER :: isecfst, iseclast 36 LOGICAL :: llnew 37 32 38 !! * Substitutions 33 39 # include "domzgr_substitute.h90" … … 54 60 CHARACTER (len=25) :: charout 55 61 56 REAL(wp), DIMENSION(:,:), POINTER :: zqsr_tmp ! save qsr during TOP time-step57 62 !!------------------------------------------------------------------- 58 63 ! … … 68 73 areatot = glob_sum( cvol(:,:,:) ) 69 74 ENDIF 70 ! 71 IF( ltrcdm2dc ) THEN 72 ! When Diurnal cycle, core bulk and LIM2 are activated, put daily mean qsr in qsr for TOP/biogeochemistery time-step 73 ! and save qsr with diurnal cycle in qsr_tmp 74 CALL wrk_alloc( jpi,jpj, zqsr_tmp ) 75 zqsr_tmp(:,:) = qsr (:,:) 76 qsr (:,:) = qsr_mean(:,:) 77 ENDIF 75 ! 76 IF( l_trcdm2dc ) CALL trc_mean_qsr( kt ) 78 77 ! 79 78 IF( nn_dttrc /= 1 ) CALL trc_sub_stp( kt ) ! averaging physical variables for sub-stepping … … 106 105 ENDIF 107 106 ! 108 IF( ltrcdm2dc ) THEN109 ! put back qsr with diurnal cycle in qsr110 qsr(:,:) = zqsr_tmp(:,:)111 CALL wrk_dealloc( jpi,jpj, zqsr_tmp )112 ENDIF113 !114 107 ztrai = 0._wp ! content of all tracers 115 108 DO jn = 1, jptra … … 122 115 ! 123 116 END SUBROUTINE trc_stp 117 118 SUBROUTINE trc_mean_qsr( kt ) 119 !!---------------------------------------------------------------------- 120 !! *** ROUTINE trc_mean_qsr *** 121 !! 122 !! ** Purpose : Compute daily mean qsr for biogeochemical model in case 123 !! of diurnal cycle 124 !! 125 !! ** Method : store in TOP the qsr every hour ( or every time-step the latter 126 !! is greater than 1 hour ) and then, compute the mean with 127 !! a moving average over 24 hours. 128 !! In coupled mode, the sampling is done at every coupling frequency 129 !!---------------------------------------------------------------------- 130 INTEGER, INTENT(in) :: kt 131 INTEGER :: jn 132 133 IF( kt == nittrc000 ) THEN 134 IF( ln_cpl ) THEN 135 rdt_sampl = 86400. / ncpl_qsr_freq 136 nb_rec_per_days = ncpl_qsr_freq 137 ELSE 138 rdt_sampl = MAX( 3600., rdt * nn_dttrc ) 139 nb_rec_per_days = INT( 86400 / rdt_sampl ) 140 ENDIF 141 ! 142 IF( lwp ) THEN 143 WRITE(numout,*) 144 WRITE(numout,*) ' Sampling frequency dt = ', rdt_sampl, 's',' Number of sampling per day nrec = ', nb_rec_per_days 145 WRITE(numout,*) 146 ENDIF 147 ! 148 ALLOCATE( qsr_arr(jpi,jpj,nb_rec_per_days ) ) 149 DO jn = 1, nb_rec_per_days 150 qsr_arr(:,:,jn) = qsr(:,:) 151 ENDDO 152 qsr_mean(:,:) = qsr(:,:) 153 ! 154 isecfst = nsec_year + nsec1jan000 ! number of seconds between Jan. 1st 00h of nit000 year and the middle of time step 155 iseclast = isecfst 156 ! 157 ENDIF 158 ! 159 iseclast = nsec_year + nsec1jan000 160 llnew = ( iseclast - isecfst ) > INT( rdt_sampl ) ! new shortwave to store 161 IF( kt /= nittrc000 .AND. llnew ) THEN 162 IF( lwp ) WRITE(numout,*) ' New shortwave to sample for TOP at time kt = ', kt, & 163 & ' time = ', (iseclast+rdt*nn_dttrc/2.)/3600.,'hours ' 164 isecfst = iseclast 165 DO jn = 1, nb_rec_per_days - 1 166 qsr_arr(:,:,jn) = qsr_arr(:,:,jn+1) 167 ENDDO 168 qsr_arr (:,:,nb_rec_per_days) = qsr(:,:) 169 qsr_mean(:,: ) = SUM( qsr_arr(:,:,:), 3 ) / nb_rec_per_days 170 ENDIF 171 ! 172 END SUBROUTINE trc_mean_qsr 124 173 125 174 #else -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcsub.F90
- Property svn:keywords set to Id
r4611 r5901 25 25 USE zdf_oce 26 26 USE domvvl 27 USE div cur ! hor. divergence and curl (div & cur routines)27 USE divhor ! horizontal divergence (div_hor routine) 28 28 USE sbcrnf, ONLY: h_rnf, nk_rnf ! River runoff 29 29 USE bdy_oce … … 44 44 REAL(wp) :: r1_ndttrcp1 ! 1 / (nn_dttrc+1) 45 45 46 !!* Substitution 47 # include "top_substitute.h90" 46 ! !* iso-neutral slopes (if l_ldfslp=T) 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_temp, vslp_temp, wslpi_temp, wslpj_temp !: hold current values 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: uslp_tm , vslp_tm , wslpi_tm , wslpj_tm !: time mean 49 50 !! * Substitutions 51 # include "domzgr_substitute.h90" 48 52 !!---------------------------------------------------------------------- 49 53 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 50 !! $Id : trcstp.F90 2528 2010-12-27 17:33:53Z rblod$54 !! $Id$ 51 55 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 52 56 !!---------------------------------------------------------------------- … … 93 97 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * fse3w(:,:,:) 94 98 # endif 95 #if defined key_ldfslp 96 wslpi_tm(:,:,:) = wslpi_tm(:,:,:) + wslpi(:,:,:)97 wslpj_tm(:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:)98 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp(:,:,:)99 vslp_tm (:,:,:) = vslp_tm (:,:,:) + vslp(:,:,:)100 #endif 99 IF( l_ldfslp ) THEN 100 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp (:,:,:) 101 vslp_tm (:,:,:) = vslp_tm (:,:,:) + vslp (:,:,:) 102 wslpi_tm(:,:,:) = wslpi_tm(:,:,:) + wslpi(:,:,:) 103 wslpj_tm(:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:) 104 ENDIF 101 105 # if defined key_trabbl 102 106 IF( nn_bbl_ldf == 1 ) THEN … … 131 135 avs_temp (:,:,:) = avs (:,:,:) 132 136 # endif 133 #if defined key_ldfslp 134 wslpi_temp (:,:,:) = wslpi (:,:,:) 135 wslpj_temp (:,:,:) = wslpj (:,:,:) 136 uslp_temp (:,:,:) = uslp (:,:,:) 137 vslp_temp (:,:,:) = vslp (:,:,:) 138 #endif 137 IF( l_ldfslp ) THEN 138 uslp_temp (:,:,:) = uslp (:,:,:) ; wslpi_temp (:,:,:) = wslpi (:,:,:) 139 vslp_temp (:,:,:) = vslp (:,:,:) ; wslpj_temp (:,:,:) = wslpj (:,:,:) 140 ENDIF 139 141 # if defined key_trabbl 140 142 IF( nn_bbl_ldf == 1 ) THEN … … 160 162 wndm_temp (:,:) = wndm (:,:) 161 163 ! ! Variables reset in trc_sub_ssh 162 rotn_temp (:,:,:) = rotn (:,:,:)163 164 hdivn_temp (:,:,:) = hdivn (:,:,:) 164 rotb_temp (:,:,:) = rotb (:,:,:)165 hdivb_temp (:,:,:) = hdivb (:,:,:)166 165 ! 167 166 ! 2. Create averages and reassign variables … … 175 174 avs_tm (:,:,:) = avs_tm (:,:,:) + avs (:,:,:) * fse3w(:,:,:) 176 175 # endif 177 #if defined key_ldfslp 178 wslpi_tm (:,:,:) = wslpi_tm(:,:,:) + wslpi(:,:,:)179 wslpj_tm (:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:)180 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp(:,:,:)181 vslp_tm (:,:,:) = vslp_tm (:,:,:) + vslp (:,:,:)182 #endif 176 IF( l_ldfslp ) THEN 177 uslp_tm (:,:,:) = uslp_tm (:,:,:) + uslp (:,:,:) 178 vslp_tm (:,:,:) = vslp_tm (:,:,:) + vslp (:,:,:) 179 wslpi_tm (:,:,:) = wslpi_tm(:,:,:) + wslpi(:,:,:) 180 wslpj_tm (:,:,:) = wslpj_tm(:,:,:) + wslpj(:,:,:) 181 ENDIF 183 182 # if defined key_trabbl 184 183 IF( nn_bbl_ldf == 1 ) THEN … … 255 254 tsn (ji,jj,jk,jp_sal) = tsn_tm (ji,jj,jk,jp_sal) * z1_ne3t 256 255 rhop (ji,jj,jk) = rhop_tm (ji,jj,jk) * z1_ne3t 256 !!gm : BUG? ==>> for avt & avs I don't understand the division by e3w 257 257 avt (ji,jj,jk) = avt_tm (ji,jj,jk) * z1_ne3w 258 258 # if defined key_zdfddm 259 259 avs (ji,jj,jk) = avs_tm (ji,jj,jk) * z1_ne3w 260 260 # endif 261 #if defined key_ldfslp 262 wslpi(ji,jj,jk) = wslpi_tm(ji,jj,jk)263 wslpj(ji,jj,jk) = wslpj_tm(ji,jj,jk)264 uslp (ji,jj,jk) = uslp_tm (ji,jj,jk)265 vslp (ji,jj,jk) = vslp_tm (ji,jj,jk)266 #endif 267 ENDDO268 ENDDO269 END DO261 END DO 262 END DO 263 END DO 264 IF( l_ldfslp ) THEN 265 wslpi(:,:,:) = wslpi_tm(:,:,:) 266 wslpj(:,:,:) = wslpj_tm(:,:,:) 267 uslp (:,:,:) = uslp_tm (:,:,:) 268 vslp (:,:,:) = vslp_tm (:,:,:) 269 ENDIF 270 270 ! 271 271 CALL trc_sub_ssh( kt ) ! after ssh & vertical velocity … … 276 276 ! 277 277 END SUBROUTINE trc_sub_stp 278 278 279 279 280 SUBROUTINE trc_sub_ini … … 304 305 tsn_tm (:,:,:,jp_sal) = tsn (:,:,:,jp_sal) * fse3t(:,:,:) 305 306 rhop_tm (:,:,:) = rhop (:,:,:) * fse3t(:,:,:) 307 !!gm : BUG? ==>> for avt & avs I don't understand the division by e3w 306 308 avt_tm (:,:,:) = avt (:,:,:) * fse3w(:,:,:) 307 309 # if defined key_zdfddm 308 310 avs_tm (:,:,:) = avs (:,:,:) * fse3w(:,:,:) 309 311 # endif 310 #if defined key_ldfslp 311 wslpi_tm(:,:,:)= wslpi(:,:,:)312 wslpj_tm(:,:,:)= wslpj(:,:,:)313 uslp_tm (:,:,:)= uslp (:,:,:)314 vslp_tm (:,:,:)= vslp (:,:,:)315 #endif 312 IF( l_ldfslp ) THEN 313 wslpi_tm(:,:,:) = wslpi(:,:,:) 314 wslpj_tm(:,:,:) = wslpj(:,:,:) 315 uslp_tm (:,:,:) = uslp (:,:,:) 316 vslp_tm (:,:,:) = vslp (:,:,:) 317 ENDIF 316 318 sshn_tm (:,:) = sshn (:,:) 317 319 rnf_tm (:,:) = rnf (:,:) … … 365 367 avs (:,:,:) = avs_temp (:,:,:) 366 368 # endif 367 #if defined key_ldfslp 368 wslpi (:,:,:)= wslpi_temp (:,:,:)369 wslpj (:,:,:)= wslpj_temp (:,:,:)370 uslp (:,:,:)= uslp_temp (:,:,:)371 vslp (:,:,:)= vslp_temp (:,:,:)372 #endif 369 IF( l_ldfslp ) THEN 370 wslpi (:,:,:)= wslpi_temp (:,:,:) 371 wslpj (:,:,:)= wslpj_temp (:,:,:) 372 uslp (:,:,:)= uslp_temp (:,:,:) 373 vslp (:,:,:)= vslp_temp (:,:,:) 374 ENDIF 373 375 sshn (:,:) = sshn_temp (:,:) 374 376 sshb (:,:) = sshb_temp (:,:) … … 396 398 ! 397 399 hdivn (:,:,:) = hdivn_temp (:,:,:) 398 rotn (:,:,:) = rotn_temp (:,:,:)399 hdivb (:,:,:) = hdivb_temp (:,:,:)400 rotb (:,:,:) = rotb_temp (:,:,:)401 400 ! 402 403 401 ! Start new averages 404 402 un_tm (:,:,:) = un (:,:,:) * fse3u(:,:,:) … … 411 409 avs_tm (:,:,:) = avs (:,:,:) * fse3w(:,:,:) 412 410 # endif 413 #if defined key_ldfslp 411 IF( l_ldfslp ) THEN 412 uslp_tm (:,:,:) = uslp (:,:,:) 413 vslp_tm (:,:,:) = vslp (:,:,:) 414 414 wslpi_tm(:,:,:) = wslpi(:,:,:) 415 415 wslpj_tm(:,:,:) = wslpj(:,:,:) 416 uslp_tm (:,:,:) = uslp (:,:,:) 417 vslp_tm (:,:,:) = vslp (:,:,:) 418 #endif 416 ENDIF 419 417 ! 420 418 sshb_hold (:,:) = sshn (:,:) … … 487 485 ENDIF 488 486 ! 489 CALL div_ cur( kt ) ! Horizontal divergence & Relative vorticity487 CALL div_hor( kt ) ! Horizontal divergence & Relative vorticity 490 488 ! 491 489 z2dt = 2._wp * rdt ! set time step size (Euler/Leapfrog) … … 551 549 & sshn_temp(jpi,jpj) , sshb_temp(jpi,jpj) , & 552 550 & ssha_temp(jpi,jpj) , & 553 #if defined key_ldfslp554 & wslpi_temp(jpi,jpj,jpk) , wslpj_temp(jpi,jpj,jpk), &555 & uslp_temp(jpi,jpj,jpk) , vslp_temp(jpi,jpj,jpk), &556 #endif557 551 #if defined key_trabbl 558 552 & ahu_bbl_temp(jpi,jpj) , ahv_bbl_temp(jpi,jpj), & … … 569 563 # endif 570 564 & hdivn_temp(jpi,jpj,jpk) , hdivb_temp(jpi,jpj,jpk), & 571 & rotn_temp(jpi,jpj,jpk) , rotb_temp(jpi,jpj,jpk), &572 565 & un_tm(jpi,jpj,jpk) , vn_tm(jpi,jpj,jpk) , & 573 566 & avt_tm(jpi,jpj,jpk) , & … … 577 570 & emp_b_hold(jpi,jpj) , & 578 571 & hmld_tm(jpi,jpj) , qsr_tm(jpi,jpj) , & 579 #if defined key_ldfslp580 & wslpi_tm(jpi,jpj,jpk) , wslpj_tm(jpi,jpj,jpk), &581 & uslp_tm(jpi,jpj,jpk) , vslp_tm(jpi,jpj,jpk), &582 #endif583 572 #if defined key_trabbl 584 573 & ahu_bbl_tm(jpi,jpj) , ahv_bbl_tm(jpi,jpj), & 585 574 & utr_bbl_tm(jpi,jpj) , vtr_bbl_tm(jpi,jpj), & 586 575 #endif 587 & rnf_tm(jpi,jpj) , h_rnf_tm(jpi,jpj) , &588 & STAT=trc_sub_alloc )576 & rnf_tm(jpi,jpj) , h_rnf_tm(jpi,jpj) , STAT=trc_sub_alloc ) 577 ! 589 578 IF( trc_sub_alloc /= 0 ) CALL ctl_warn('trc_sub_alloc: failed to allocate arrays') 590 579 ! 580 IF( l_ldfslp ) THEN 581 ALLOCATE( uslp_temp(jpi,jpj,jpk) , wslpi_temp(jpi,jpj,jpk), & 582 & vslp_temp(jpi,jpj,jpk) , wslpj_temp(jpi,jpj,jpk), & 583 & uslp_tm (jpi,jpj,jpk) , wslpi_tm (jpi,jpj,jpk), & 584 & vslp_tm (jpi,jpj,jpk) , wslpj_tm (jpi,jpj,jpk), STAT=trc_sub_alloc ) 585 ENDIF 586 ! 587 IF( trc_sub_alloc /= 0 ) CALL ctl_warn('trc_sub_alloc: failed to allocate ldf_slp arrays') 591 588 ! 592 589 END FUNCTION trc_sub_alloc -
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/trcwri.F90
r3750 r5901 26 26 27 27 PUBLIC trc_wri 28 29 !! * Substitutions30 # include "top_substitute.h90"31 28 32 29 CONTAINS
Note: See TracChangeset
for help on using the changeset viewer.