Changeset 2072 for branches/devmercator2010/NEMO/TOP_SRC
- Timestamp:
- 2010-09-08T16:29:38+02:00 (14 years ago)
- Location:
- branches/devmercator2010/NEMO/TOP_SRC
- Files:
-
- 5 deleted
- 42 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/devmercator2010/NEMO/TOP_SRC/C14b/par_c14b.F90
r2047 r2072 27 27 28 28 IMPLICIT NONE 29 PUBLIC 29 30 30 INTEGER, P ARAMETER :: jp_lb= jp_lobster + jp_pisces + jp_cfc !: cum. number of pass. tracers31 INTEGER, P ARAMETER :: jp_lb_2d = jp_lobster_2d + jp_pisces_2d + jp_cfc_2d !:32 INTEGER, P ARAMETER :: jp_lb_3d = jp_lobster_3d + jp_pisces_3d + jp_cfc_3d !:33 INTEGER, P ARAMETER :: jp_lb_trd = jp_lobster_trd + jp_pisces_trd + jp_cfc_trd !:31 INTEGER, PUBLIC, PARAMETER :: jp_lp = jp_lobster + jp_pisces + jp_cfc !: cum. number of pass. tracers 32 INTEGER, PUBLIC, PARAMETER :: jp_lp_2d = jp_lobster_2d + jp_pisces_2d + jp_cfc_2d !: 33 INTEGER, PUBLIC, PARAMETER :: jp_lp_3d = jp_lobster_3d + jp_pisces_3d + jp_cfc_3d !: 34 INTEGER, PUBLIC, PARAMETER :: jp_lp_trd = jp_lobster_trd + jp_pisces_trd + jp_cfc_trd !: 34 35 35 36 #if defined key_c14b … … 42 43 INTEGER, PUBLIC, PARAMETER :: jp_c14b_3d = 1 !: additional 3d output arrays ('key_trc_diaadd') 43 44 INTEGER, PUBLIC, PARAMETER :: jp_c14b_trd = 0 !: number of sms trends for C14 44 INTEGER, PUBLIC, PARAMETER :: jpc14 = jp_lb + 1 !: assign an index in trc arrays for C14 bomb 45 46 ! assign an index in trc arrays for each CFC prognostic variables 47 INTEGER, PUBLIC, PARAMETER :: jpc14 = jp_lp + 1 !: C14 bomb 45 48 #else 46 49 !!--------------------------------------------------------------------- … … 55 58 56 59 ! Starting/ending C14 do-loop indices (N.B. no C14 : jp_c14b0 > jp_c14b1 the do-loop are never done) 57 INTEGER, PUBLIC, PARAMETER :: jp_c14b0 = jp_l b+ 1 !: First index of C14 tracer58 INTEGER, PUBLIC, PARAMETER :: jp_c14b1 = jp_l b+ jp_c14b !: Last index of C14 tracer59 INTEGER, PUBLIC, PARAMETER :: jp_c14b0_2d = jp_l b_2d + 1 !: First index of C14 tracer60 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_2d = jp_l b_2d + jp_c14b_2d !: Last index of C14 tracer61 INTEGER, PUBLIC, PARAMETER :: jp_c14b0_3d = jp_l b_3d + 1 !: First index of C14 tracer62 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_3d = jp_l b_3d + jp_c14b_3d !: Last index of C14 tracer63 INTEGER, PUBLIC, PARAMETER :: jp_c14b0_trd = jp_l b_trd + 1 !: First index of C14 tracer64 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_trd = jp_l b_trd + jp_c14b_trd !: Last index of C14 tracer60 INTEGER, PUBLIC, PARAMETER :: jp_c14b0 = jp_lp + 1 !: First index of C14 tracer 61 INTEGER, PUBLIC, PARAMETER :: jp_c14b1 = jp_lp + jp_c14b !: Last index of C14 tracer 62 INTEGER, PUBLIC, PARAMETER :: jp_c14b0_2d = jp_lp_2d + 1 !: First index of C14 tracer 63 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_2d = jp_lp_2d + jp_c14b_2d !: Last index of C14 tracer 64 INTEGER, PUBLIC, PARAMETER :: jp_c14b0_3d = jp_lp_3d + 1 !: First index of C14 tracer 65 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_3d = jp_lp_3d + jp_c14b_3d !: Last index of C14 tracer 66 INTEGER, PUBLIC, PARAMETER :: jp_c14b0_trd = jp_lp_trd + 1 !: First index of C14 tracer 67 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_trd = jp_lp_trd + jp_c14b_trd !: Last index of C14 tracer 65 68 66 69 !!====================================================================== -
branches/devmercator2010/NEMO/TOP_SRC/C14b/trclsm_c14b.F90
r1801 r2072 44 44 INTEGER :: numnatb 45 45 46 #if defined key_trc_diaadd && ! defined key_iomput46 #if defined key_trc_diaadd 47 47 ! definition of additional diagnostic as a structure 48 48 INTEGER :: jl, jn … … 58 58 !! 59 59 NAMELIST/namc14date/ ndate_beg_b, nyear_res_b 60 #if defined key_trc_diaadd && ! defined key_iomput60 #if defined key_trc_diaadd 61 61 NAMELIST/namc14dia/nwritedia, c14dia2d, c14dia3d ! additional diagnostics 62 62 #endif … … 81 81 IF(lwp) WRITE(numout,*) ' initial year (aa) nyear_beg_b = ', nyear_beg_b 82 82 ! 83 #if defined key_trc_diaadd && ! defined key_iomput83 #if defined key_trc_diaadd 84 84 85 85 ! Namelist namc14dia -
branches/devmercator2010/NEMO/TOP_SRC/CFC/par_cfc.F90
r2047 r2072 21 21 22 22 IMPLICIT NONE 23 PUBLIC 23 24 24 INTEGER, P ARAMETER :: jp_lc= jp_lobster + jp_pisces !: cumulative number of passive tracers25 INTEGER, P ARAMETER :: jp_lc_2d = jp_lobster_2d + jp_pisces_2d !:26 INTEGER, P ARAMETER :: jp_lc_3d = jp_lobster_3d + jp_pisces_3d !:27 INTEGER, P ARAMETER :: jp_lc_trd = jp_lobster_trd + jp_pisces_trd !:25 INTEGER, PUBLIC, PARAMETER :: jp_lp = jp_lobster + jp_pisces !: cumulative number of passive tracers 26 INTEGER, PUBLIC, PARAMETER :: jp_lp_2d = jp_lobster_2d + jp_pisces_2d !: 27 INTEGER, PUBLIC, PARAMETER :: jp_lp_3d = jp_lobster_3d + jp_pisces_3d !: 28 INTEGER, PUBLIC, PARAMETER :: jp_lp_trd = jp_lobster_trd + jp_pisces_trd !: 28 29 29 30 #if defined key_cfc … … 38 39 39 40 ! assign an index in trc arrays for each CFC prognostic variables 40 INTEGER, PUBLIC, PARAMETER :: jpc11 = jp_l c+ 1 !: CFC-1141 INTEGER, PUBLIC, PARAMETER :: jpc12 = jp_l c+ 2 !: CFC-1241 INTEGER, PUBLIC, PARAMETER :: jpc11 = jp_lp + 1 !: CFC-11 42 INTEGER, PUBLIC, PARAMETER :: jpc12 = jp_lp + 2 !: CFC-12 42 43 #else 43 44 !!--------------------------------------------------------------------- … … 52 53 53 54 ! Starting/ending CFC do-loop indices (N.B. no CFC : jp_cfc0 > jp_cfc1 the do-loop are never done) 54 INTEGER, PUBLIC, PARAMETER :: jp_cfc0 = jp_l c+ 1 !: First index of CFC tracers55 INTEGER, PUBLIC, PARAMETER :: jp_cfc1 = jp_l c+ jp_cfc !: Last index of CFC tracers56 INTEGER, PUBLIC, PARAMETER :: jp_cfc0_2d = jp_l c_2d + 1 !: First index of CFC tracers57 INTEGER, PUBLIC, PARAMETER :: jp_cfc1_2d = jp_l c_2d + jp_cfc_2d !: Last index of CFC tracers58 INTEGER, PUBLIC, PARAMETER :: jp_cfc0_3d = jp_l c_3d + 1 !: First index of CFC tracers59 INTEGER, PUBLIC, PARAMETER :: jp_cfc1_3d = jp_l c_3d + jp_cfc_3d !: Last index of CFC tracers60 INTEGER, PUBLIC, PARAMETER :: jp_cfc0_trd = jp_l c_trd + 1 !: First index of CFC tracers61 INTEGER, PUBLIC, PARAMETER :: jp_cfc1_trd = jp_l c_trd + jp_cfc_trd !: Last index of CFC tracers55 INTEGER, PUBLIC, PARAMETER :: jp_cfc0 = jp_lp + 1 !: First index of CFC tracers 56 INTEGER, PUBLIC, PARAMETER :: jp_cfc1 = jp_lp + jp_cfc !: Last index of CFC tracers 57 INTEGER, PUBLIC, PARAMETER :: jp_cfc0_2d = jp_lp_2d + 1 !: First index of CFC tracers 58 INTEGER, PUBLIC, PARAMETER :: jp_cfc1_2d = jp_lp_2d + jp_cfc_2d !: Last index of CFC tracers 59 INTEGER, PUBLIC, PARAMETER :: jp_cfc0_3d = jp_lp_3d + 1 !: First index of CFC tracers 60 INTEGER, PUBLIC, PARAMETER :: jp_cfc1_3d = jp_lp_3d + jp_cfc_3d !: Last index of CFC tracers 61 INTEGER, PUBLIC, PARAMETER :: jp_cfc0_trd = jp_lp_trd + 1 !: First index of CFC tracers 62 INTEGER, PUBLIC, PARAMETER :: jp_cfc1_trd = jp_lp_trd + jp_cfc_trd !: Last index of CFC tracers 62 63 63 64 !!====================================================================== -
branches/devmercator2010/NEMO/TOP_SRC/CFC/trcctl_cfc.F90
r2047 r2072 44 44 IF( jp_cfc > 2) THEN 45 45 IF(lwp) THEN 46 WRITE (numout,*) ' ===>>>> : w a r n i n g <<<<===' 46 WRITE (numout,*) ' ===>>>> : w a r n i n g ' 47 WRITE (numout,*) ' ======= ============= ' 47 48 WRITE (numout,*) & 48 49 & ' STOP, change jp_cfc to 1 or 2 in par_CFC module ' … … 53 54 ! Check tracer names 54 55 ! ------------------ 55 ctrcnm(jpc11) = 'CFC11' 56 ctrcnl(jpc11) = 'Chlorofuorocarbone 11 concentration' 57 58 IF ( jp_cfc == 2 ) THEN 59 ctrcnm(jpc12) = 'CFC12' 60 ctrcnl(jpc12) = 'Chlorofuorocarbone 12 concentration' 56 IF ( ctrcnm(jpc11) /= 'CFC11' .OR. ctrcnm(jpc12) /= 'CFC12' ) THEN 57 ctrcnm(jpc11) = 'CFC11' 58 ctrcnl(jpc11) = 'Chlorofuorocarbone 11 concentration' 59 ctrcnm(jpc12) = 'CFC12' 60 ctrcnl(jpc12) = 'Chlorofuorocarbone 12 concentration' 61 61 ENDIF 62 62 … … 70 70 END DO 71 71 WRITE(numout,*) ' ' 72 ENDIF 72 ENDIF 73 73 74 74 … … 80 80 ctrcun(jn) = 'mole/m3' 81 81 IF(lwp) THEN 82 WRITE (numout,*) ' ===>>>> : w a r n i n g <<<<===' 82 WRITE (numout,*) ' ===>>>> : w a r n i n g ' 83 WRITE (numout,*) ' ======= ============= ' 83 84 WRITE (numout,*) ' we force tracer unit' 84 85 WRITE(numout,*) ' tracer ',ctrcnm(jn), 'UNIT= ',ctrcun(jn) -
branches/devmercator2010/NEMO/TOP_SRC/CFC/trcini_cfc.F90
r2047 r2072 22 22 23 23 PUBLIC trc_ini_cfc ! called by trcini.F90 module 24 25 CHARACTER (len=34) :: clname = 'cfc1112.atm' ! ???26 24 27 25 INTEGER :: inum ! unit number … … 57 55 ! --------------------------------------- 58 56 xphem (:,:) = 0.e0 59 p_cfc(:,:,:) = 0.e0 57 DO jl = 1, jp_cfc 58 jn = jp_cfc0 + jl - 1 59 DO jm = 1, jphem 60 DO js = 1, jpyear 61 p_cfc(js,jm,jn) = 0.0 62 END DO 63 END DO 64 END DO 65 60 66 61 67 ! Initialization of qint in case of no restart … … 67 73 WRITE(numout,*) 'Initialization de qint ; No restart : qint equal zero ' 68 74 ENDIF 69 qint_cfc(:,:,:) = 0.e070 75 DO jl = 1, jp_cfc 71 76 jn = jp_cfc0 + jl - 1 72 77 trn (:,:,:,jn) = 0.e0 78 qint_cfc(:,: ,jn) = 0.e0 73 79 END DO 74 80 ENDIF … … 82 88 IF(lwp) WRITE(numout,*) 'read of formatted file cfc1112atm' 83 89 84 CALL ctl_opn( inum, clname, 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. )90 CALL ctl_opn( inum, 'cfc1112.atm', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 85 91 REWIND(inum) 86 92 … … 89 95 END DO 90 96 91 ! file starts in 1931 do jn represent the year in the century.jhh 92 ! Read file till the end 93 jn = 31 94 DO WHILE ( 1 /= 2 ) 95 READ(inum,*,END=100) zyy, p_cfc(jn,1,1), p_cfc(jn,1,2), p_cfc(jn,2,1), p_cfc(jn,2,2) 96 IF ( lwp) THEN 97 WRITE(numout,'(f7.2, 4f8.2)' ) & 97 DO jn = 31, 98 ! Read file 98 READ(inum,*) zyy, p_cfc(jn,1,1), p_cfc(jn,1,2), p_cfc(jn,2,1), p_cfc(jn,2,2) 99 WRITE(numout,'(f7.2, 4f8.2)' ) & 98 100 & zyy, p_cfc(jn,1,1), p_cfc(jn,1,2), p_cfc(jn,2,1), p_cfc(jn,2,2) 99 ENDIF100 jn = jn + 1101 101 END DO 102 100 npyear = jn - 1103 IF ( lwp) WRITE(numout,*) ' ', npyear ,' years read'104 102 105 103 p_cfc(32,1:2,1) = 5.e-4 ! modify the values of the first years -
branches/devmercator2010/NEMO/TOP_SRC/CFC/trclsm_cfc.F90
r1801 r2072 43 43 !!---------------------------------------------------------------------- 44 44 INTEGER :: numnatc 45 #if defined key_trc_diaadd && ! defined key_iomput45 #if defined key_trc_diaadd 46 46 ! definition of additional diagnostic as a structure 47 47 INTEGER :: jl, jn … … 56 56 !! 57 57 NAMELIST/namcfcdate/ ndate_beg, nyear_res 58 #if defined key_trc_diaadd && ! defined key_iomput58 #if defined key_trc_diaadd 59 59 NAMELIST/namcfcdia/nwritedia, cfcdia2d ! additional diagnostics 60 60 #endif … … 79 79 IF(lwp) WRITE(numout,*) ' initial year (aa) nyear_beg = ', nyear_beg 80 80 ! 81 #if defined key_trc_diaadd && ! defined key_iomput81 #if defined key_trc_diaadd 82 82 83 83 ! Namelist namcfcdia -
branches/devmercator2010/NEMO/TOP_SRC/CFC/trcsms_cfc.F90
r2047 r2072 27 27 PUBLIC trc_sms_cfc ! called in ??? 28 28 29 INTEGER , PUBLIC, PARAMETER :: jpyear = 1 50 ! temporal parameter29 INTEGER , PUBLIC, PARAMETER :: jpyear = 100 ! temporal parameter 30 30 INTEGER , PUBLIC, PARAMETER :: jphem = 2 ! parameter for the 2 hemispheres 31 31 INTEGER , PUBLIC :: ndate_beg ! initial calendar date (aammjj) for CFC 32 32 INTEGER , PUBLIC :: nyear_res ! restoring time constant (year) 33 33 INTEGER , PUBLIC :: nyear_beg ! initial year (aa) 34 INTEGER , PUBLIC :: npyear ! Number of years read in CFC1112 file35 34 36 35 REAL(wp), PUBLIC, DIMENSION(jpyear,jphem, jp_cfc) :: p_cfc ! partial hemispheric pressure for CFC … … 97 96 ! Temporal interpolation 98 97 ! ---------------------- 99 iyear_beg = nyear - 190098 iyear_beg = nyear + ( nyear_res - 1900 - nyear_beg ) 100 99 IF ( nmonth <= 6 ) THEN 101 iyear_beg = iyear_beg - 1100 iyear_beg = iyear_beg - 2 + nyear_beg 102 101 im1 = 6 - nmonth + 1 103 102 im2 = 6 + nmonth - 1 104 103 ELSE 104 iyear_beg = iyear_beg - 1 + nyear_beg 105 105 im1 = 12 - nmonth + 7 106 106 im2 = nmonth - 7 -
branches/devmercator2010/NEMO/TOP_SRC/LOBSTER/par_lobster.F90
r2047 r2072 12 12 13 13 IMPLICIT NONE 14 PUBLIC 14 15 15 16 #if defined key_lobster -
branches/devmercator2010/NEMO/TOP_SRC/LOBSTER/trcbio.F90
r1795 r2072 482 482 ENDIF 483 483 484 IF( l_trdtrc ) DEALLOCATE( ztrbio )485 486 484 IF(ln_ctl) THEN ! print mean trends (used for debugging) 487 485 WRITE(charout, FMT="('bio')") -
branches/devmercator2010/NEMO/TOP_SRC/LOBSTER/trcexp.F90
r1795 r2072 164 164 ENDIF 165 165 166 IF( l_trdtrc ) DEALLOCATE( ztrbio )167 168 166 IF(ln_ctl) THEN ! print mean trends (used for debugging) 169 167 WRITE(charout, FMT="('exp')") -
branches/devmercator2010/NEMO/TOP_SRC/LOBSTER/trcini_lobster.F90
r1800 r2072 26 26 PUBLIC trc_ini_lobster ! called by trcini.F90 module 27 27 28 # include "domzgr_substitute.h90" 28 29 # include "top_substitute.h90" 29 30 !!---------------------------------------------------------------------- -
branches/devmercator2010/NEMO/TOP_SRC/LOBSTER/trcopt.F90
r1800 r2072 28 28 29 29 !!* Substitution 30 # include " top_substitute.h90"30 # include "domzgr_substitute.h90" 31 31 !!---------------------------------------------------------------------- 32 32 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) -
branches/devmercator2010/NEMO/TOP_SRC/LOBSTER/trcsed.F90
r1800 r2072 29 29 30 30 !!* Substitution 31 # include " top_substitute.h90"31 # include "domzgr_substitute.h90" 32 32 !!---------------------------------------------------------------------- 33 33 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) … … 136 136 ENDIF 137 137 138 IF( l_trdtrc ) DEALLOCATE( ztrbio )139 140 138 IF(ln_ctl) THEN ! print mean trends (used for debugging) 141 139 WRITE(charout, FMT="('sed')") -
branches/devmercator2010/NEMO/TOP_SRC/MY_TRC/par_my_trc.F90
r2047 r2072 31 31 32 32 IMPLICIT NONE 33 PUBLIC 33 34 34 INTEGER, P ARAMETER :: jp_lm= jp_lobster + jp_pisces + jp_cfc + jp_c14b !:35 INTEGER, P ARAMETER :: jp_lm_2d = jp_lobster_2d + jp_pisces_2d + jp_cfc_2d + jp_c14b_2d !:36 INTEGER, P ARAMETER :: jp_lm_3d = jp_lobster_3d + jp_pisces_3d + jp_cfc_3d + jp_c14b_3d !:37 INTEGER, P ARAMETER :: jp_lm_trd = jp_lobster_trd + jp_pisces_trd + jp_cfc_trd + jp_c14b_trd !:35 INTEGER, PUBLIC, PARAMETER :: jp_lpc = jp_lobster + jp_pisces + jp_cfc + jp_c14b !: 36 INTEGER, PUBLIC, PARAMETER :: jp_lpc_2d = jp_lobster_2d + jp_pisces_2d + jp_cfc_2d + jp_c14b_2d !: 37 INTEGER, PUBLIC, PARAMETER :: jp_lpc_3d = jp_lobster_3d + jp_pisces_3d + jp_cfc_3d + jp_c14b_3d !: 38 INTEGER, PUBLIC, PARAMETER :: jp_lpc_trd = jp_lobster_trd + jp_pisces_trd + jp_cfc_trd + jp_c14b_trd !: 38 39 39 40 #if defined key_my_trc … … 48 49 49 50 ! assign an index in trc arrays for each PTS prognostic variables 50 INTEGER, PUBLIC, PARAMETER :: jpmyt1 = jp_l m+ 1 !: 1st MY_TRC tracer51 INTEGER, PUBLIC, PARAMETER :: jpmyt2 = jp_l m+ 2 !: 2nd MY_TRC tracer51 INTEGER, PUBLIC, PARAMETER :: jpmyt1 = jp_lpc + 1 !: 1st MY_TRC tracer 52 INTEGER, PUBLIC, PARAMETER :: jpmyt2 = jp_lpc + 2 !: 2nd MY_TRC tracer 52 53 53 54 #else … … 63 64 64 65 ! Starting/ending PISCES do-loop indices (N.B. no PISCES : jpl_pcs < jpf_pcs the do-loop are never done) 65 INTEGER, PUBLIC, PARAMETER :: jp_myt0 = jp_l m+ 1 !: First index of MY_TRC passive tracers66 INTEGER, PUBLIC, PARAMETER :: jp_myt1 = jp_l m+ jp_my_trc !: Last index of MY_TRC passive tracers67 INTEGER, PUBLIC, PARAMETER :: jp_myt0_2d = jp_l m_2d + 1 !: First index of MY_TRC passive tracers68 INTEGER, PUBLIC, PARAMETER :: jp_myt1_2d = jp_l m_2d + jp_my_trc_2d !: Last index of MY_TRC passive tracers69 INTEGER, PUBLIC, PARAMETER :: jp_myt0_3d = jp_l m_3d + 1 !: First index of MY_TRC passive tracers70 INTEGER, PUBLIC, PARAMETER :: jp_myt1_3d = jp_l m_3d + jp_my_trc_3d !: Last index of MY_TRC passive tracers71 INTEGER, PUBLIC, PARAMETER :: jp_myt0_trd = jp_l m_trd + 1 !: First index of MY_TRC passive tracers72 INTEGER, PUBLIC, PARAMETER :: jp_myt1_trd = jp_l m_trd + jp_my_trc_trd !: Last index of MY_TRC passive tracers66 INTEGER, PUBLIC, PARAMETER :: jp_myt0 = jp_lpc + 1 !: First index of MY_TRC passive tracers 67 INTEGER, PUBLIC, PARAMETER :: jp_myt1 = jp_lpc + jp_my_trc !: Last index of MY_TRC passive tracers 68 INTEGER, PUBLIC, PARAMETER :: jp_myt0_2d = jp_lpc_2d + 1 !: First index of MY_TRC passive tracers 69 INTEGER, PUBLIC, PARAMETER :: jp_myt1_2d = jp_lpc_2d + jp_my_trc_2d !: Last index of MY_TRC passive tracers 70 INTEGER, PUBLIC, PARAMETER :: jp_myt0_3d = jp_lpc_3d + 1 !: First index of MY_TRC passive tracers 71 INTEGER, PUBLIC, PARAMETER :: jp_myt1_3d = jp_lpc_3d + jp_my_trc_3d !: Last index of MY_TRC passive tracers 72 INTEGER, PUBLIC, PARAMETER :: jp_myt0_trd = jp_lpc_trd + 1 !: First index of MY_TRC passive tracers 73 INTEGER, PUBLIC, PARAMETER :: jp_myt1_trd = jp_lpc_trd + jp_my_trc_trd !: Last index of MY_TRC passive tracers 73 74 74 75 !!====================================================================== -
branches/devmercator2010/NEMO/TOP_SRC/MY_TRC/trcctl_my_trc.F90
r2050 r2072 40 40 IF(lwp) WRITE(numout,*) ' use COLOR tracer ' 41 41 42 DO j l= 1, jp_my_trc42 DO jn = 1, jp_my_trc 43 43 jn = jp_myt0 + jl - 1 44 44 WRITE(ctrcnm(jn),'(a,i2.2)') 'CLR',jn -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zbio.F90
r1800 r2072 39 39 40 40 !!* Substitution 41 # include " top_substitute.h90"41 # include "domzgr_substitute.h90" 42 42 !!---------------------------------------------------------------------- 43 43 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zche.F90
r1800 r2072 147 147 148 148 !!* Substitution 149 #include " top_substitute.h90"149 #include "domzgr_substitute.h90" 150 150 !!---------------------------------------------------------------------- 151 151 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zflx.F90
r1836 r2072 52 52 53 53 !!* Substitution 54 # include " top_substitute.h90"54 # include "domzgr_substitute.h90" 55 55 !!---------------------------------------------------------------------- 56 56 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) … … 204 204 CALL mpp_sum( t_oce_co2_flx ) ! sum over the global domain 205 205 ENDIF 206 ! Conversion in GtC/yr ; negative for outgoing from ocean207 t_oce_co2_flx = (-1.) * t_oce_co2_flx * 12. / 1.e15208 !209 206 WRITE(numout,*) ' Atmospheric pCO2 :' 210 207 WRITE(numout,*) '-------------------- : ',kt,' ',t_atm_co2_flx 211 208 WRITE(numout,*) '(ppm)' 212 WRITE(numout,*) 'Total Flux of Carbon out of the ocean:'213 WRITE(numout,*) '-------------------- : ',t_oce_co2_flx 214 WRITE(numout,*) '(GtC/ yr)'209 WRITE(numout,*) 'Total Flux of Carbon :' 210 WRITE(numout,*) '-------------------- : ',t_oce_co2_flx * 12. / 1e15 211 WRITE(numout,*) '(GtC/an)' 215 212 t_atm_co2_flx = 0. 216 213 t_oce_co2_flx = 0. 217 # if defined key_iomput218 CALL iom_put( "tatpco2" , t_atm_co2_flx )219 CALL iom_put( "tco2flx" , t_oce_co2_flx )220 #endif221 214 ENDIF 222 215 #endif -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zlim.F90
r1800 r2072 41 41 42 42 !!* Substitution 43 # include " top_substitute.h90"43 # include "domzgr_substitute.h90" 44 44 !!---------------------------------------------------------------------- 45 45 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zlys.F90
r1836 r2072 67 67 #if defined key_trc_dia3d && defined key_iomput 68 68 REAL(wp) :: zrfact2 69 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcaldiss 69 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcaldiss, zw3d 70 70 #endif 71 71 CHARACTER (len=25) :: charout … … 94 94 ! SET DUMMY VARIABLE FOR TOTAL BORATE 95 95 zbot = borat(ji,jj,jk) 96 97 ! SET DUMMY VARIABLE FOR TOTAL BORATE98 zbot = borat(ji,jj,jk)99 96 zfact = rhop (ji,jj,jk) / 1000. + rtrn 100 97 … … 174 171 # else 175 172 zrfact2 = 1.e3 * rfact2r 176 CALL iom_put( "PH" , hi (:,:,:) * tmask(:,:,:) ) 177 CALL iom_put( "CO3" , zco3 (:,:,:) * tmask(:,:,:) ) 178 CALL iom_put( "CO3sat", aksp (:,:,:) / calcon * tmask(:,:,:) ) 179 CALL iom_put( "DCAL" , zcaldiss(:,:,:) * zrfact2 * tmask(:,:,:) ) 173 zw3d(:,:,:) = hi (:,:,:) * tmask(:,:,:) 174 CALL iom_put( "PH", zw3d ) 175 zw3d(:,:,:) = zco3(:,:,:) * tmask(:,:,:) 176 CALL iom_put( "CO3", zw3d ) 177 zw3d(:,:,:) = aksp(:,:,:) / calcon * tmask(:,:,:) 178 CALL iom_put( "CO3sat", zw3d ) 179 zw3d(:,:,:) = zcaldiss(:,:,:) * zrfact2 * tmask(:,:,:) 180 CALL iom_put( "Dcal", zw3d ) 180 181 # endif 181 182 # endif … … 231 232 END SUBROUTINE p4z_lys 232 233 #endif 234 233 235 !!====================================================================== 234 236 END MODULE p4zlys -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zmeso.F90
r1836 r2072 45 45 46 46 !!* Substitution 47 # include " top_substitute.h90"47 # include "domzgr_substitute.h90" 48 48 !!---------------------------------------------------------------------- 49 49 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) … … 76 76 #if defined key_trc_diaadd && defined key_trc_dia3d && defined key_iomput 77 77 REAL(wp) :: zrfact2 78 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zw3d 78 79 #endif 79 80 … … 202 203 END DO 203 204 204 #if defined key_trc_dia3d205 ! Total grazing ( grazing by microzoo is already computed in p4zmicro )206 grazing(:,:,:) = grazing(:,:,:) + ( zgrazd (:,:,:) + zgrazz (:,:,:) + zgrazn(:,:,:) &207 & + zgrazpoc(:,:,:) + zgrazffe(:,:,:) )208 #endif209 210 205 211 206 DO jk = 1,jpkm1 … … 316 311 #if defined key_trc_diaadd && defined key_trc_dia3d && defined key_iomput 317 312 zrfact2 = 1.e3 * rfact2r 318 ! Total grazing of phyto by zoo 319 grazing(:,:,:) = grazing(:,:,:) * zrfact2 * tmask(:,:,:) 320 ! Calcite production 321 prodcal(:,:,:) = prodcal(:,:,:) * zrfact2 * tmask(:,:,:) 322 IF( jnt == nrdttrc ) then 323 CALL iom_put( "GRAZ" , grazing ) ! Total grazing of phyto by zooplankton 324 CALL iom_put( "PCAL" , prodcal ) ! Calcite production 325 ENDIF 313 zw3d(:,:,:) = ( zgrazd(:,:,:) + zgrazz(:,:,:) + zgrazn(:,:,:) & 314 & + zgrazpoc(:,:,:) + zgrazffe(:,:,:) ) * zrfact2 * tmask(:,:,:) 315 IF( jnt == nrdttrc ) CALL iom_put( "Graz2" , zw3d ) 316 317 zw3d(:,:,:) = prodcal(:,:,:) * zrfact2 * tmask(:,:,:) 318 IF( jnt == nrdttrc ) CALL iom_put( "Pcal" , zw3d ) 326 319 #endif 327 320 -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zmicro.F90
r1836 r2072 43 43 44 44 !!* Substitution 45 # include " top_substitute.h90"45 # include "domzgr_substitute.h90" 46 46 !!---------------------------------------------------------------------- 47 47 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) … … 70 70 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazmf, zgrazsf, zgrazpf 71 71 CHARACTER (len=25) :: charout 72 #if defined key_trc_diaadd && defined key_trc_dia3d && defined key_iomput 73 REAL(wp) :: zrfact2 74 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zw3d 75 #endif 72 76 73 77 !!--------------------------------------------------------------------- … … 84 88 zgrazpf(:,:,:) = 0. 85 89 86 #if defined key_trc_dia3d87 grazing(:,:,:) = 0. !: Initialisation of grazing88 #endif89 90 90 91 zstep = rfact2 / rday ! Time step duration for biology … … 155 156 END DO 156 157 157 #if defined key_trc_dia3d158 ! Grazing by microzooplankton159 grazing(:,:,:) = grazing(:,:,:) + zgrazp(:,:,:) + zgrazm(:,:,:) + zgrazsd(:,:,:)160 #endif161 158 162 159 DO jk = 1,jpkm1 … … 234 231 END DO 235 232 ! 236 IF(ln_ctl) THEN ! print mean trends (used for debugging) 233 #if defined key_trc_diaadd && defined key_trc_dia3d && defined key_iomput 234 zrfact2 = 1.e3 * rfact2r 235 zw3d(:,:,:) = ( zgrazp(:,:,:) + zgrazm(:,:,:) + zgrazsd(:,:,:) ) * zrfact2 * tmask(:,:,:) 236 IF( jnt == nrdttrc ) CALL iom_put( "Graz" , zw3d ) 237 #endif 238 239 IF(ln_ctl) THEN ! print mean trends (used for debugging) 237 240 WRITE(charout, FMT="('micro')") 238 241 CALL prt_ctl_trc_info(charout) 239 242 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 240 ENDIF243 ENDIF 241 244 242 245 END SUBROUTINE p4z_micro -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zmort.F90
r1800 r2072 41 41 42 42 !!* Substitution 43 # include " top_substitute.h90"43 # include "domzgr_substitute.h90" 44 44 !!---------------------------------------------------------------------- 45 45 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zopt.F90
r1836 r2072 35 35 36 36 !!* Substitution 37 # include " top_substitute.h90"37 # include "domzgr_substitute.h90" 38 38 !!---------------------------------------------------------------------- 39 39 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) … … 61 61 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zekg, zekr, zekb 62 62 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze1 , ze2 , ze3, ze0 63 #if defined key_trc_diaadd && defined key_iomput 64 REAL(wp), DIMENSION(jpi,jpj) :: zw2d 65 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zw3d 66 #endif 63 67 !!--------------------------------------------------------------------- 64 68 … … 234 238 # else 235 239 ! write diagnostics 236 IF( jnt == nrdttrc ) then237 CALL iom_put( "Heup", heup(:,: ) * tmask(:,:,1) ) ! euphotic layer deptht238 CALL iom_put( "PAR" , etot(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation239 ENDIF240 zw2d(:,: ) = heup(:,: ) * tmask(:,:,1) 241 zw3d(:,:,:) = etot(:,:,:) * tmask(:,:,:) 242 IF( jnt == nrdttrc ) CALL iom_put( "Heup", zw2d ) 243 IF( jnt == nrdttrc ) CALL iom_put( "PAR" , zw3d ) 240 244 # endif 241 245 #endif -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zprod.F90
r1836 r2072 53 53 54 54 !!* Substitution 55 # include " top_substitute.h90"55 # include "domzgr_substitute.h90" 56 56 !!---------------------------------------------------------------------- 57 57 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) … … 81 81 #if defined key_trc_diaadd && defined key_trc_dia3d 82 82 REAL(wp) :: zrfact2 83 #if defined key_iomput 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zw3d 85 #endif 83 86 #endif 84 87 REAL(wp), DIMENSION(jpi,jpj) :: zmixnano , zmixdiat, zstrn … … 349 352 WRITE(numout,*) 'Total PP :' 350 353 WRITE(numout,*) '-------------------- : ',tpp * 12. / 1.E12 351 WRITE(numout,*) '(GtC/ yr)'354 WRITE(numout,*) '(GtC/an)' 352 355 tpp = 0. 353 356 ENDIF 354 357 355 #if defined key_trc_diaadd && defined key_trc_dia3d && ! defined key_iomput 358 #if defined key_trc_diaadd && defined key_trc_dia3d 359 zrfact2 = 1.e3 * rfact2r 356 360 ! Supplementary diagnostics 357 zrfact2 = 1.e3 * rfact2r 361 # if ! defined key_iomput 358 362 trc3d(:,:,:,jp_pcs0_3d + 4) = zprorca (:,:,:) * zrfact2 * tmask(:,:,:) 359 363 trc3d(:,:,:,jp_pcs0_3d + 5) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) … … 362 366 trc3d(:,:,:,jp_pcs0_3d + 8) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:) 363 367 trc3d(:,:,:,jp_pcs0_3d + 9) = zprofed (:,:,:) * zrfact2 * tmask(:,:,:) 364 # 368 #if ! defined key_kriest 365 369 trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:) 366 # endif367 370 #endif 368 371 369 #if defined key_trc_diaadd && defined key_trc_dia3d && defined key_iomput 370 zrfact2 = 1.e3 * rfact2r 371 IF ( jnt == nrdttrc ) then 372 CALL iom_put( "PPPHY" , zprorca (:,:,:) * zrfact2 * tmask(:,:,:) ) ! primary production by nanophyto 373 CALL iom_put( "PPPHY2", zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) ) ! primary production by diatom 374 CALL iom_put( "PPNEWN", zpronew (:,:,:) * zrfact2 * tmask(:,:,:) ) ! new primary production by nanophyto 375 CALL iom_put( "PPNEWD", zpronewd(:,:,:) * zrfact2 * tmask(:,:,:) ) ! new primary production by diatom 376 CALL iom_put( "PBSi" , zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:) ) ! biogenic silica production 377 CALL iom_put( "PFeD" , zprofed (:,:,:) * zrfact2 * tmask(:,:,:) ) ! biogenic iron production by diatom 378 CALL iom_put( "PFeN" , zprofen (:,:,:) * zrfact2 * tmask(:,:,:) ) ! biogenic iron production by nanophyto 379 ENDIF 372 # else 373 zw3d(:,:,:) = zprorca (:,:,:) * zrfact2 * tmask(:,:,:) 374 IF( jnt == nrdttrc ) CALL iom_put( "PPPHY" , zw3d ) 375 zw3d(:,:,:) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) 376 IF( jnt == nrdttrc ) CALL iom_put( "PPPHY2", zw3d ) 377 zw3d(:,:,:) = zpronew (:,:,:) * zrfact2 * tmask(:,:,:) 378 IF( jnt == nrdttrc ) CALL iom_put( "PPNEWN" , zw3d ) 379 zw3d(:,:,:) = zpronewd(:,:,:) * zrfact2 * tmask(:,:,:) 380 IF( jnt == nrdttrc ) CALL iom_put( "PPNEWD", zw3d ) 381 zw3d(:,:,:) = zprorcad(:,:,:) * zrfact2 * tmask(:,:,:) * zysopt(:,:,:) 382 IF( jnt == nrdttrc ) CALL iom_put( "PBSi" , zw3d ) 383 zw3d(:,:,:) = zprofed (:,:,:) * zrfact2 * tmask(:,:,:) 384 IF( jnt == nrdttrc ) CALL iom_put( "PFeD" , zw3d ) 385 zw3d(:,:,:) = zprofen (:,:,:) * zrfact2 * tmask(:,:,:) 386 IF( jnt == nrdttrc ) CALL iom_put( "PFeN" , zw3d ) 387 # endif 380 388 #endif 381 389 -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zrem.F90
r1800 r2072 45 45 46 46 !!* Substitution 47 # include " top_substitute.h90"47 # include "domzgr_substitute.h90" 48 48 !!---------------------------------------------------------------------- 49 49 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zsed.F90
r1836 r2072 96 96 REAL(wp) :: zrfact2 97 97 # if defined key_iomput 98 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zw3d 98 99 REAL(wp), DIMENSION(jpi,jpj) :: zw2d 99 100 # endif … … 331 332 trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * 1.e-7 * zrfact2 * fse3t(:,:,1) * tmask(:,:,1) 332 333 # else 333 ! surface downward net flux of iron 334 zw2d(:,:) = ( zirondep(:,:,1) + ironsed(:,:,1) * rfact2 ) * zrfact2 * fse3t(:,:,1) * tmask(:,:,1) 334 ! write diagnostics 335 zw2d(:,:) = ( zirondep(:,:,1) + ironsed(:,:,1) * rfact2 ) & 336 & * zrfact2 * fse3t(:,:,1) * tmask(:,:,1) 335 337 IF( jnt == nrdttrc ) CALL iom_put( "Irondep", zw2d ) 336 ! nitrogen fixation at surface337 zw2d(:,:) = znitrpot(:,:,1) * 1.e-7 * zrfact2 * fse3t(:,:,1) * tmask(:,:,1)338 IF( jnt == nrdttrc ) CALL iom_put( "Nfix" , zw2d ) 339 # endif 338 zw3d(:,:,:) = znitrpot(:,:,:) * 1.e-7 * zrfact2 * fse3t(:,:,:) * tmask(:,:,:) 339 IF( jnt == nrdttrc ) CALL iom_put( "Nfix", zw3d ) 340 # endif 341 340 342 # endif 341 343 ! -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/p4zsink.F90
r1836 r2072 69 69 70 70 !!* Substitution 71 # include " top_substitute.h90"71 # include "domzgr_substitute.h90" 72 72 !!---------------------------------------------------------------------- 73 73 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) … … 99 99 #if defined key_trc_diaadd 100 100 REAL(wp) :: zrfact2 101 INTEGER :: ik1 101 INTEGER :: iksed1 102 #if defined key_iomput 103 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zw3d 104 #endif 102 105 #endif 103 106 REAL(wp), DIMENSION(jpi,jpj,jpk) :: znum3d … … 283 286 #if defined key_trc_diaadd 284 287 zrfact2 = 1.e3 * rfact2r 285 ik 1 = iksed + 1288 iksed1 = iksed + 1 286 289 # if ! defined key_iomput 287 trc2d(:,: ,jp_pcs0_2d + 4) = sinking (:,:,ik 1) * zrfact2 * tmask(:,:,1)288 trc2d(:,: ,jp_pcs0_2d + 5) = sinking2(:,:,ik 1) * zrfact2 * tmask(:,:,1)289 trc2d(:,: ,jp_pcs0_2d + 6) = sinkfer (:,:,ik 1) * zrfact2 * tmask(:,:,1)290 trc2d(:,: ,jp_pcs0_2d + 7) = sinksil (:,:,ik 1) * zrfact2 * tmask(:,:,1)291 trc2d(:,: ,jp_pcs0_2d + 8) = sinkcal (:,:,ik 1) * zrfact2 * tmask(:,:,1)290 trc2d(:,: ,jp_pcs0_2d + 4) = sinking (:,:,iksed1) * zrfact2 * tmask(:,:,1) 291 trc2d(:,: ,jp_pcs0_2d + 5) = sinking2(:,:,iksed1) * zrfact2 * tmask(:,:,1) 292 trc2d(:,: ,jp_pcs0_2d + 6) = sinkfer (:,:,iksed1) * zrfact2 * tmask(:,:,1) 293 trc2d(:,: ,jp_pcs0_2d + 7) = sinksil (:,:,iksed1) * zrfact2 * tmask(:,:,1) 294 trc2d(:,: ,jp_pcs0_2d + 8) = sinkcal (:,:,iksed1) * zrfact2 * tmask(:,:,1) 292 295 trc3d(:,:,:,jp_pcs0_3d + 11) = sinking (:,:,:) * zrfact2 * tmask(:,:,:) 293 296 trc3d(:,:,:,jp_pcs0_3d + 12) = sinking2(:,:,:) * zrfact2 * tmask(:,:,:) … … 298 301 trc3d(:,:,:,jp_pcs0_3d + 17) = wsbio4 (:,:,:) * tmask(:,:,:) 299 302 #else 300 IF( jnt == nrdttrc ) then 301 CALL iom_put( "POCFlx" , sinking (:,:,:) * zrfact2 * tmask(:,:,:) ) ! POC export 302 CALL iom_put( "NumFlx" , sinking2 (:,:,:) * zrfact2 * tmask(:,:,:) ) ! Num export 303 CALL iom_put( "SiFlx" , sinksil (:,:,:) * zrfact2 * tmask(:,:,:) ) ! Silica export 304 CALL iom_put( "CaCO3Flx", sinkcal (:,:,:) * zrfact2 * tmask(:,:,:) ) ! Calcite export 305 CALL iom_put( "xnum" , znum3d (:,:,:) * tmask(:,:,:) ) ! Number of particles in aggregats 306 CALL iom_put( "W1" , wsbio3 (:,:,:) * tmask(:,:,:) ) ! sinking speed of POC 307 CALL iom_put( "W2" , wsbio4 (:,:,:) * tmask(:,:,:) ) ! sinking speed of aggregats 308 CALL iom_put( "PMO" , sinking (:,:,ik1) * zrfact2 * tmask(:,:,1) ) ! POC export at 100m 309 CALL iom_put( "PMO2" , sinking2(:,:,ik1) * zrfact2 * tmask(:,:,1) ) ! Num export at 100m 310 CALL iom_put( "ExpFe1" , sinkfer (:,:,ik1) * zrfact2 * tmask(:,:,1) ) ! Export of iron at 100m 311 CALL iom_put( "ExpSi" , sinksil (:,:,ik1) * zrfact2 * tmask(:,:,1) ) ! export of silica at 100m 312 CALL iom_put( "ExpCaCO3", sinkcal (:,:,ik1) * zrfact2 * tmask(:,:,1) ) ! export of calcite at 100m 313 ENDIF 303 zw3d(:,:,:) = sinking (:,:,:) * zrfact2 * tmask(:,:,:) 304 IF( jnt == nrdttrc ) CALL iom_put( "PMO" , zw3d ) 305 zw3d(:,:,:) = sinking2(:,:,:) * zrfact2 * tmask(:,:,:) 306 IF( jnt == nrdttrc ) CALL iom_put( "PMO2", zw3d ) 307 zw3d(:,:,:) = sinkfer (:,:,:) * zrfact2 * tmask(:,:,:) 308 IF( jnt == nrdttrc ) CALL iom_put( "ExpFe1", zw3d ) 309 zw3d(:,:,:) = sinksil (:,:,:) * zrfact2 * tmask(:,:,:) 310 IF( jnt == nrdttrc ) CALL iom_put( "ExpSi", zw3d ) 311 zw3d(:,:,:) = sinkcal (:,:,:) * zrfact2 * tmask(:,:,:) 312 IF( jnt == nrdttrc ) CALL iom_put( "ExpCaCO3", zw3d ) 313 zw3d(:,:,:) = sinking (:,:,:) * zrfact2 * tmask(:,:,:) 314 IF( jnt == nrdttrc ) CALL iom_put( "POCFlx", zw3d ) 315 zw3d(:,:,:) = sinking2(:,:,:) * zrfact2 * tmask(:,:,:) 316 IF( jnt == nrdttrc ) CALL iom_put( "GOCFlx", zw3d ) 317 zw3d(:,:,:) = sinksil (:,:,:) * zrfact2 * tmask(:,:,:) 318 IF( jnt == nrdttrc ) CALL iom_put( "SiFlx", zw3d ) 319 zw3d(:,:,:) = sinkcal (:,:,:) * zrfact2 * tmask(:,:,:) 320 IF( jnt == nrdttrc ) CALL iom_put( "CaCO3Flx", zw3d ) 321 zw3d(:,:,:) = znum3d (:,:,:) * tmask(:,:,:) 322 IF( jnt == nrdttrc ) CALL iom_put( "xnum", zw3d ) 323 zw3d(:,:,:) = wsbio3 (:,:,:) * tmask(:,:,:) 324 IF( jnt == nrdttrc ) CALL iom_put( "W1", zw3d ) 325 zw3d(:,:,:) = wsbio4 (:,:,:) * tmask(:,:,:) 326 IF( jnt == nrdttrc ) CALL iom_put( "W2", zw3d ) 314 327 # endif 315 328 … … 476 489 #if defined key_trc_dia3d 477 490 REAL(wp) :: zrfact2 478 INTEGER :: ik1 491 INTEGER :: iksed1 492 #endif 493 #if defined key_iomput 494 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zw3d 479 495 #endif 480 496 CHARACTER (len=25) :: charout … … 597 613 #if defined key_trc_diaadd 598 614 zrfact2 = 1.e3 * rfact2r 599 ik 1= iksed + 1615 iksed1 = iksed + 1 600 616 # if ! defined key_iomput 601 trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,ik 1) * zrfact2 * tmask(:,:,1)602 trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,ik 1) * zrfact2 * tmask(:,:,1)603 trc2d(:,:,jp_pcs0_2d + 6) = sinkfer (:,:,ik 1) * zrfact2 * tmask(:,:,1)604 trc2d(:,:,jp_pcs0_2d + 7) = sinkfer2(:,:,ik 1) * zrfact2 * tmask(:,:,1)605 trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,ik 1) * zrfact2 * tmask(:,:,1)606 trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,ik 1) * zrfact2 * tmask(:,:,1)617 trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,iksed1) * zrfact2 * tmask(:,:,1) 618 trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,iksed1) * zrfact2 * tmask(:,:,1) 619 trc2d(:,:,jp_pcs0_2d + 6) = sinkfer (:,:,iksed1) * zrfact2 * tmask(:,:,1) 620 trc2d(:,:,jp_pcs0_2d + 7) = sinkfer2(:,:,iksed1) * zrfact2 * tmask(:,:,1) 621 trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,iksed1) * zrfact2 * tmask(:,:,1) 622 trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,iksed1) * zrfact2 * tmask(:,:,1) 607 623 # else 608 IF( jnt == nrdttrc ) then 609 CALL iom_put( "EPC100" , ( sinking(:,:,ik1) + sinking2(:,:,ik1) ) * zrfact2 * tmask(:,:,1) ) ! Export of carbon at 100m 610 CALL iom_put( "EPFE100" , ( sinkfer(:,:,ik1) + sinkfer2(:,:,ik1) ) * zrfact2 * tmask(:,:,1) ) ! Export of iron at 100m 611 CALL iom_put( "EPCAL100", sinkcal(:,:,ik1) * zrfact2 * tmask(:,:,1) ) ! Export of calcite at 100m 612 CALL iom_put( "EPSI100" , sinksil(:,:,ik1) * zrfact2 * tmask(:,:,1) ) ! Export of biogenic silica at 100m 613 ENDIF 614 #endif 624 zw3d(:,:,:) = sinking (:,:,:) * zrfact2 * tmask(:,:,:) 625 IF( jnt == nrdttrc ) CALL iom_put( "ExpPOC" , zw3d ) 626 zw3d(:,:,:) = sinking2(:,:,:) * zrfact2 * tmask(:,:,:) 627 IF( jnt == nrdttrc ) CALL iom_put( "ExpGOC", zw3d ) 628 zw3d(:,:,:) = sinkfer (:,:,:) * zrfact2 * tmask(:,:,:) 629 IF( jnt == nrdttrc ) CALL iom_put( "ExpFe1", zw3d ) 630 zw3d(:,:,:) = sinkfer2(:,:,:) * zrfact2 * tmask(:,:,:) 631 IF( jnt == nrdttrc ) CALL iom_put( "ExpFe2", zw3d ) 632 zw3d(:,:,:) = sinksil (:,:,:) * zrfact2 * tmask(:,:,:) 633 IF( jnt == nrdttrc ) CALL iom_put( "ExpSi", zw3d ) 634 zw3d(:,:,:) = sinkcal (:,:,:) * zrfact2 * tmask(:,:,:) 635 IF( jnt == nrdttrc ) CALL iom_put( "Expcal", zw3d ) 636 # endif 615 637 #endif 616 638 ! -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/par_pisces.F90
r2049 r2072 16 16 17 17 IMPLICIT NONE 18 PUBLIC 18 19 19 INTEGER, P ARAMETER :: jp_lp= jp_lobster !: cumulative number of already defined TRC20 INTEGER, P ARAMETER :: jp_lp_2d = jp_lobster_2d !:21 INTEGER, P ARAMETER :: jp_lp_3d = jp_lobster_3d !:22 INTEGER, P ARAMETER :: jp_lp_trd = jp_lobster_trd !:20 INTEGER, PUBLIC, PARAMETER :: jp_l = jp_lobster !: cumulative number of already defined TRC 21 INTEGER, PUBLIC, PARAMETER :: jp_l_2d = jp_lobster_2d !: 22 INTEGER, PUBLIC, PARAMETER :: jp_l_3d = jp_lobster_3d !: 23 INTEGER, PUBLIC, PARAMETER :: jp_l_trd = jp_lobster_trd !: 23 24 24 25 #if defined key_pisces && defined key_kriest … … 36 37 ! WARNING: be carefull about the order when reading the restart 37 38 ! !!gm this warning should be obsolet with IOM 38 INTEGER, PUBLIC, PARAMETER :: jpdic = jp_l p+ 1 !: dissolved inoganic carbon concentration39 INTEGER, PUBLIC, PARAMETER :: jptal = jp_l p+ 2 !: total alkalinity40 INTEGER, PUBLIC, PARAMETER :: jpoxy = jp_l p+ 3 !: oxygen carbon concentration41 INTEGER, PUBLIC, PARAMETER :: jpcal = jp_l p+ 4 !: calcite concentration42 INTEGER, PUBLIC, PARAMETER :: jppo4 = jp_l p+ 5 !: phosphate concentration43 INTEGER, PUBLIC, PARAMETER :: jppoc = jp_l p+ 6 !: small particulate organic phosphate concentration44 INTEGER, PUBLIC, PARAMETER :: jpsil = jp_l p+ 7 !: silicate concentration45 INTEGER, PUBLIC, PARAMETER :: jpphy = jp_l p+ 8 !: phytoplancton concentration46 INTEGER, PUBLIC, PARAMETER :: jpzoo = jp_l p+ 9 !: zooplancton concentration47 INTEGER, PUBLIC, PARAMETER :: jpdoc = jp_l p+ 10 !: dissolved organic carbon concentration48 INTEGER, PUBLIC, PARAMETER :: jpdia = jp_l p+ 11 !: Diatoms Concentration49 INTEGER, PUBLIC, PARAMETER :: jpmes = jp_l p+ 12 !: Mesozooplankton Concentration50 INTEGER, PUBLIC, PARAMETER :: jpbsi = jp_l p+ 13 !: (big) Silicate Concentration51 INTEGER, PUBLIC, PARAMETER :: jpfer = jp_l p+ 14 !: Iron Concentration52 INTEGER, PUBLIC, PARAMETER :: jpnum = jp_l p+ 15 !: Big iron particles Concentration53 INTEGER, PUBLIC, PARAMETER :: jpsfe = jp_l p+ 16 !: number of particulate organic phosphate concentration54 INTEGER, PUBLIC, PARAMETER :: jpdfe = jp_l p+ 17 !: Diatoms iron Concentration55 INTEGER, PUBLIC, PARAMETER :: jpdsi = jp_l p+ 18 !: Diatoms Silicate Concentration56 INTEGER, PUBLIC, PARAMETER :: jpnfe = jp_l p+ 19 !: Nano iron Concentration57 INTEGER, PUBLIC, PARAMETER :: jpnch = jp_l p+ 20 !: Nano Chlorophyll Concentration58 INTEGER, PUBLIC, PARAMETER :: jpdch = jp_l p+ 21 !: Diatoms Chlorophyll Concentration59 INTEGER, PUBLIC, PARAMETER :: jpno3 = jp_l p+ 22 !: Nitrates Concentration60 INTEGER, PUBLIC, PARAMETER :: jpnh4 = jp_l p+ 23 !: Ammonium Concentration39 INTEGER, PUBLIC, PARAMETER :: jpdic = jp_l + 1 !: dissolved inoganic carbon concentration 40 INTEGER, PUBLIC, PARAMETER :: jptal = jp_l + 2 !: total alkalinity 41 INTEGER, PUBLIC, PARAMETER :: jpoxy = jp_l + 3 !: oxygen carbon concentration 42 INTEGER, PUBLIC, PARAMETER :: jpcal = jp_l + 4 !: calcite concentration 43 INTEGER, PUBLIC, PARAMETER :: jppo4 = jp_l + 5 !: phosphate concentration 44 INTEGER, PUBLIC, PARAMETER :: jppoc = jp_l + 6 !: small particulate organic phosphate concentration 45 INTEGER, PUBLIC, PARAMETER :: jpsil = jp_l + 7 !: silicate concentration 46 INTEGER, PUBLIC, PARAMETER :: jpphy = jp_l + 8 !: phytoplancton concentration 47 INTEGER, PUBLIC, PARAMETER :: jpzoo = jp_l + 9 !: zooplancton concentration 48 INTEGER, PUBLIC, PARAMETER :: jpdoc = jp_l + 10 !: dissolved organic carbon concentration 49 INTEGER, PUBLIC, PARAMETER :: jpdia = jp_l + 11 !: Diatoms Concentration 50 INTEGER, PUBLIC, PARAMETER :: jpmes = jp_l + 12 !: Mesozooplankton Concentration 51 INTEGER, PUBLIC, PARAMETER :: jpbsi = jp_l + 13 !: (big) Silicate Concentration 52 INTEGER, PUBLIC, PARAMETER :: jpfer = jp_l + 14 !: Iron Concentration 53 INTEGER, PUBLIC, PARAMETER :: jpnum = jp_l + 15 !: Big iron particles Concentration 54 INTEGER, PUBLIC, PARAMETER :: jpsfe = jp_l + 16 !: number of particulate organic phosphate concentration 55 INTEGER, PUBLIC, PARAMETER :: jpdfe = jp_l + 17 !: Diatoms iron Concentration 56 INTEGER, PUBLIC, PARAMETER :: jpdsi = jp_l + 18 !: Diatoms Silicate Concentration 57 INTEGER, PUBLIC, PARAMETER :: jpnfe = jp_l + 19 !: Nano iron Concentration 58 INTEGER, PUBLIC, PARAMETER :: jpnch = jp_l + 20 !: Nano Chlorophyll Concentration 59 INTEGER, PUBLIC, PARAMETER :: jpdch = jp_l + 21 !: Diatoms Chlorophyll Concentration 60 INTEGER, PUBLIC, PARAMETER :: jpno3 = jp_l + 22 !: Nitrates Concentration 61 INTEGER, PUBLIC, PARAMETER :: jpnh4 = jp_l + 23 !: Ammonium Concentration 61 62 62 63 #elif defined key_pisces … … 74 75 ! WARNING: be carefull about the order when reading the restart 75 76 ! !!gm this warning should be obsolet with IOM 76 INTEGER, PUBLIC, PARAMETER :: jpdic = jp_l p+ 1 !: dissolved inoganic carbon concentration77 INTEGER, PUBLIC, PARAMETER :: jptal = jp_l p+ 2 !: total alkalinity78 INTEGER, PUBLIC, PARAMETER :: jpoxy = jp_l p+ 3 !: oxygen carbon concentration79 INTEGER, PUBLIC, PARAMETER :: jpcal = jp_l p+ 4 !: calcite concentration80 INTEGER, PUBLIC, PARAMETER :: jppo4 = jp_l p+ 5 !: phosphate concentration81 INTEGER, PUBLIC, PARAMETER :: jppoc = jp_l p+ 6 !: small particulate organic phosphate concentration82 INTEGER, PUBLIC, PARAMETER :: jpsil = jp_l p+ 7 !: silicate concentration83 INTEGER, PUBLIC, PARAMETER :: jpphy = jp_l p+ 8 !: phytoplancton concentration84 INTEGER, PUBLIC, PARAMETER :: jpzoo = jp_l p+ 9 !: zooplancton concentration85 INTEGER, PUBLIC, PARAMETER :: jpdoc = jp_l p+ 10 !: dissolved organic carbon concentration86 INTEGER, PUBLIC, PARAMETER :: jpdia = jp_l p+ 11 !: Diatoms Concentration87 INTEGER, PUBLIC, PARAMETER :: jpmes = jp_l p+ 12 !: Mesozooplankton Concentration88 INTEGER, PUBLIC, PARAMETER :: jpbsi = jp_l p+ 13 !: (big) Silicate Concentration89 INTEGER, PUBLIC, PARAMETER :: jpfer = jp_l p+ 14 !: Iron Concentration90 INTEGER, PUBLIC, PARAMETER :: jpbfe = jp_l p+ 15 !: Big iron particles Concentration91 INTEGER, PUBLIC, PARAMETER :: jpgoc = jp_l p+ 16 !: big particulate organic phosphate concentration92 INTEGER, PUBLIC, PARAMETER :: jpsfe = jp_l p+ 17 !: Small iron particles Concentration93 INTEGER, PUBLIC, PARAMETER :: jpdfe = jp_l p+ 18 !: Diatoms iron Concentration94 INTEGER, PUBLIC, PARAMETER :: jpdsi = jp_l p+ 19 !: Diatoms Silicate Concentration95 INTEGER, PUBLIC, PARAMETER :: jpnfe = jp_l p+ 20 !: Nano iron Concentration96 INTEGER, PUBLIC, PARAMETER :: jpnch = jp_l p+ 21 !: Nano Chlorophyll Concentration97 INTEGER, PUBLIC, PARAMETER :: jpdch = jp_l p+ 22 !: Diatoms Chlorophyll Concentration98 INTEGER, PUBLIC, PARAMETER :: jpno3 = jp_l p+ 23 !: Nitrates Concentration99 INTEGER, PUBLIC, PARAMETER :: jpnh4 = jp_l p+ 24 !: Ammonium Concentration77 INTEGER, PUBLIC, PARAMETER :: jpdic = jp_l + 1 !: dissolved inoganic carbon concentration 78 INTEGER, PUBLIC, PARAMETER :: jptal = jp_l + 2 !: total alkalinity 79 INTEGER, PUBLIC, PARAMETER :: jpoxy = jp_l + 3 !: oxygen carbon concentration 80 INTEGER, PUBLIC, PARAMETER :: jpcal = jp_l + 4 !: calcite concentration 81 INTEGER, PUBLIC, PARAMETER :: jppo4 = jp_l + 5 !: phosphate concentration 82 INTEGER, PUBLIC, PARAMETER :: jppoc = jp_l + 6 !: small particulate organic phosphate concentration 83 INTEGER, PUBLIC, PARAMETER :: jpsil = jp_l + 7 !: silicate concentration 84 INTEGER, PUBLIC, PARAMETER :: jpphy = jp_l + 8 !: phytoplancton concentration 85 INTEGER, PUBLIC, PARAMETER :: jpzoo = jp_l + 9 !: zooplancton concentration 86 INTEGER, PUBLIC, PARAMETER :: jpdoc = jp_l + 10 !: dissolved organic carbon concentration 87 INTEGER, PUBLIC, PARAMETER :: jpdia = jp_l + 11 !: Diatoms Concentration 88 INTEGER, PUBLIC, PARAMETER :: jpmes = jp_l + 12 !: Mesozooplankton Concentration 89 INTEGER, PUBLIC, PARAMETER :: jpbsi = jp_l + 13 !: (big) Silicate Concentration 90 INTEGER, PUBLIC, PARAMETER :: jpfer = jp_l + 14 !: Iron Concentration 91 INTEGER, PUBLIC, PARAMETER :: jpbfe = jp_l + 15 !: Big iron particles Concentration 92 INTEGER, PUBLIC, PARAMETER :: jpgoc = jp_l + 16 !: big particulate organic phosphate concentration 93 INTEGER, PUBLIC, PARAMETER :: jpsfe = jp_l + 17 !: Small iron particles Concentration 94 INTEGER, PUBLIC, PARAMETER :: jpdfe = jp_l + 18 !: Diatoms iron Concentration 95 INTEGER, PUBLIC, PARAMETER :: jpdsi = jp_l + 19 !: Diatoms Silicate Concentration 96 INTEGER, PUBLIC, PARAMETER :: jpnfe = jp_l + 20 !: Nano iron Concentration 97 INTEGER, PUBLIC, PARAMETER :: jpnch = jp_l + 21 !: Nano Chlorophyll Concentration 98 INTEGER, PUBLIC, PARAMETER :: jpdch = jp_l + 22 !: Diatoms Chlorophyll Concentration 99 INTEGER, PUBLIC, PARAMETER :: jpno3 = jp_l + 23 !: Nitrates Concentration 100 INTEGER, PUBLIC, PARAMETER :: jpnh4 = jp_l + 24 !: Ammonium Concentration 100 101 101 102 #else … … 112 113 113 114 ! Starting/ending PISCES do-loop indices (N.B. no PISCES : jpl_pcs < jpf_pcs the do-loop are never done) 114 INTEGER, PUBLIC, PARAMETER :: jp_pcs0 = jp_l p+ 1 !: First index of PISCES tracers115 INTEGER, PUBLIC, PARAMETER :: jp_pcs1 = jp_l p+ jp_pisces !: Last index of PISCES tracers116 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_2d = jp_l p_2d + 1 !: First index of 2D diag117 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_2d = jp_l p_2d + jp_pisces_2d !: Last index of 2D diag118 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_3d = jp_l p_3d + 1 !: First index of 3D diag119 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_3d = jp_l p_3d + jp_pisces_3d !: Last index of 3d diag120 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_trd = jp_l p_trd + 1 !: First index of bio diag121 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_trd = jp_l p_trd + jp_pisces_trd !: Last index of bio diag115 INTEGER, PUBLIC, PARAMETER :: jp_pcs0 = jp_l + 1 !: First index of PISCES tracers 116 INTEGER, PUBLIC, PARAMETER :: jp_pcs1 = jp_l + jp_pisces !: Last index of PISCES tracers 117 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_2d = jp_l_2d + 1 !: First index of 2D diag 118 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_2d = jp_l_2d + jp_pisces_2d !: Last index of 2D diag 119 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_3d = jp_l_3d + 1 !: First index of 3D diag 120 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_3d = jp_l_3d + jp_pisces_3d !: Last index of 3d diag 121 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_trd = jp_l_trd + 1 !: First index of bio diag 122 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_trd = jp_l_trd + jp_pisces_trd !: Last index of bio diag 122 123 123 124 -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r1836 r2072 38 38 LOGICAL :: ln_pisdmp !: relaxation or not of nutrients to a mean value 39 39 !: when initialize from a restart file 40 LOGICAL :: ln_pisclo !: Restoring or not of nutrients to initial value41 !: on close seas42 40 43 41 !!* Biological fluxes for light … … 64 62 #if defined key_trc_dia3d 65 63 REAL(wp), DIMENSION(jpi,jpj,jpk) :: prodcal !: Calcite production 66 REAL(wp), DIMENSION(jpi,jpj,jpk) :: grazing !: Total zooplankton grazing67 64 #endif 68 65 -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r1800 r2072 38 38 no3 = 31.04e-6 * 7.6 39 39 40 # include "domzgr_substitute.h90" 40 41 # include "top_substitute.h90" 41 42 !!---------------------------------------------------------------------- -
branches/devmercator2010/NEMO/TOP_SRC/PISCES/trclsm_pisces.F90
r1801 r2072 67 67 NAMELIST/nampisdia/ nwritedia, pisdia3d, pisdia2d ! additional diagnostics 68 68 #endif 69 NAMELIST/nampisdmp/ ln_pisdmp , ln_pisclo69 NAMELIST/nampisdmp/ ln_pisdmp 70 70 71 71 !!---------------------------------------------------------------------- … … 188 188 WRITE(numout,*) 189 189 WRITE(numout,*) ' Namelist : nampisdmp' 190 WRITE(numout,*) ' Relaxation of tracer to glodap mean value ln_pisdmp =', ln_pisdmp 191 WRITE(numout,*) ' Restoring of tracer to initial value on closed seas ln_pisclo =', ln_pisclo 190 WRITE(numout,*) ' Relaxation of tracer to glodap mean value ln_pisdmp =', ln_pisdmp 192 191 WRITE(numout,*) ' ' 193 192 ENDIF -
branches/devmercator2010/NEMO/TOP_SRC/TRP/trctrp.F90
r1800 r2072 53 53 54 54 !! * Substitutions 55 # include " top_substitute.h90"55 # include "domzgr_substitute.h90" 56 56 !!---------------------------------------------------------------------- 57 57 !! NEMO/TOP 1.0 , LOCEAN-IPSL (2005) -
branches/devmercator2010/NEMO/TOP_SRC/TRP/trczdf_imp.F90
r1794 r2072 112 112 rdttrc(:) = rdttra(:) * FLOAT(ndttrc) 113 113 ENDIF 114 115 ! Initialisation 116 zwd( 1 ,:,:) = 0.e0 ; zwd(jpi,:,:) = 0.e0 117 zws( 1 ,:,:) = 0.e0 ; zws(jpi,:,:) = 0.e0 118 zwi( 1 ,:,:) = 0.e0 ; zwi(jpi,:,:) = 0.e0 119 ! 120 ! 0. Matrix construction 121 ! ---------------------- 122 123 ! Diagonal, inferior, superior 124 ! (including the bottom boundary condition via avs masked 125 DO jk = 1, jpkm1 126 DO jj = 2, jpjm1 127 DO ji = fs_2, fs_jpim1 ! vector opt. 128 zwi(ji,jj,jk) = - rdttrc(jk) * fstravs(ji,jj,jk ) /( fse3t(ji,jj,jk) * fse3w(ji,jj,jk ) ) 129 zws(ji,jj,jk) = - rdttrc(jk) * fstravs(ji,jj,jk+1) /( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 130 zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 131 END DO 132 END DO 133 END DO 134 135 ! Surface boudary conditions 136 DO jj = 2, jpjm1 137 DO ji = fs_2, fs_jpim1 138 zwi(ji,jj,1) = 0.e0 139 zwd(ji,jj,1) = 1. - zws(ji,jj,1) 140 END DO 141 END DO 142 143 ! ! =========== 114 ! ! =========== 144 115 DO jn = 1, jptra ! tracer loop 145 116 ! ! =========== 146 117 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! ??? validation needed 147 118 119 ! Initialisation 120 zwd( 1 ,:,:) = 0.e0 ; zwd(jpi,:,:) = 0.e0 121 zws( 1 ,:,:) = 0.e0 ; zws(jpi,:,:) = 0.e0 122 zwi( 1 ,:,:) = 0.e0 ; zwi(jpi,:,:) = 0.e0 148 123 zwt( 1 ,:,:) = 0.e0 ; zwt(jpi,:,:) = 0.e0 149 124 zwt( :,:,1) = 0.e0 ; zwt( :,:,jpk) = 0.e0 125 ! 126 ! 0. Matrix construction 127 ! ---------------------- 128 129 ! Diagonal, inferior, superior 130 ! (including the bottom boundary condition via avs masked 131 DO jk = 1, jpkm1 132 DO jj = 2, jpjm1 133 DO ji = fs_2, fs_jpim1 ! vector opt. 134 zwi(ji,jj,jk) = - rdttrc(jk) * fstravs(ji,jj,jk ) /( fse3t(ji,jj,jk) * fse3w(ji,jj,jk ) ) 135 zws(ji,jj,jk) = - rdttrc(jk) * fstravs(ji,jj,jk+1) /( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 136 zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 137 END DO 138 END DO 139 END DO 140 141 ! Surface boudary conditions 142 DO jj = 2, jpjm1 143 DO ji = fs_2, fs_jpim1 144 zwi(ji,jj,1) = 0.e0 145 zwd(ji,jj,1) = 1. - zws(ji,jj,1) 146 END DO 147 END DO 150 148 151 149 ! Second member construction -
branches/devmercator2010/NEMO/TOP_SRC/TRP/trczdf_iso.F90
r1794 r2072 182 182 183 183 184 ! 0.2 Update and save of avt (and avs if double diffusive mixing) 185 ! --------------------------- 186 187 DO jj = 2, jpjm1 ! Vertical slab 188 ! ! =============== 189 DO jk = 2, jpkm1 190 DO ji = 2, jpim1 191 zavi = fsahtw(ji,jj,jk)*( wslpi(ji,jj,jk)*wslpi(ji,jj,jk) & 192 & +wslpj(ji,jj,jk)*wslpj(ji,jj,jk) ) 193 ! add isopycnal vertical coeff. to avs 194 fstravs(ji,jj,jk) = fstravs(ji,jj,jk) + zavi 195 END DO 196 END DO 197 ! 198 END DO 199 200 201 202 DO jn = 1, jptra 184 185 DO jn = 1, jptra 203 186 204 187 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends … … 279 262 END DO 280 263 264 265 ! I.3 update and save of avt (and avs if double diffusive mixing) 266 ! --------------------------- 267 268 DO jk = 2, jpkm1 269 DO ji = 2, jpim1 270 271 zavi = fsahtw(ji,jj,jk)*( wslpi(ji,jj,jk)*wslpi(ji,jj,jk) & 272 & +wslpj(ji,jj,jk)*wslpj(ji,jj,jk) ) 273 274 ! add isopycnal vertical coeff. to avs 275 fstravs(ji,jj,jk) = fstravs(ji,jj,jk) + zavi 276 277 END DO 278 END DO 281 279 282 280 #if defined key_trcldf_eiv -
branches/devmercator2010/NEMO/TOP_SRC/TRP/trczdf_iso_vopt.F90
r1794 r2072 154 154 zws => va ! workspace 155 155 INTEGER, INTENT( in ) :: kt ! ocean time-step index 156 INTEGER 156 INTEGER :: ji, jj, jk, jn ! dummy loop indices 157 157 REAL(wp) :: zavi, zrhs ! temporary scalars 158 158 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & … … 180 180 ENDIF 181 181 182 183 zwd ( 1, :, : ) = 0.e0 ; zwd ( jpi, :, : ) = 0.e0184 zws ( 1, :, : ) = 0.e0 ; zws ( jpi, :, : ) = 0.e0185 zwi ( 1, :, : ) = 0.e0 ; zwi ( jpi, :, : ) = 0.e0186 zwt ( 1, :, : ) = 0.e0 ; zwt ( jpi, :, : ) = 0.e0187 zwt ( :, :, 1 ) = 0.e0 ; zwt ( :, :, jpk ) = 0.e0188 zavsi( 1, :, : ) = 0.e0 ; zavsi( jpi, :, : ) = 0.e0189 zavsi( :, :, 1 ) = 0.e0 ; zavsi( :, :, jpk ) = 0.e0190 191 192 ! II. Vertical trend associated with the vertical physics193 !=======================================================194 ! (including the vertical flux proportional to dk[t] associated195 ! with the lateral mixing, through the avt update)196 ! dk[ avt dk[ (t,s) ] ] diffusive trends197 198 ! II.0 Matrix construction199 ! ------------------------200 ! update and save of avt (and avs if double diffusive mixing)201 DO jk = 2, jpkm1202 DO jj = 2, jpjm1203 DO ji = fs_2, fs_jpim1 ! vector opt.204 zavi = fsahtw(ji,jj,jk) * ( & ! vertical mixing coef. due to lateral mixing205 & wslpi(ji,jj,jk) * wslpi(ji,jj,jk) &206 & + wslpj(ji,jj,jk) * wslpj(ji,jj,jk) )207 zavsi(ji,jj,jk) = fstravs(ji,jj,jk) + zavi ! dd mixing: zavsi = total vertical mixing coef. on tracer208 END DO209 END DO210 END DO211 212 ! II.1 Vertical diffusion on tracer213 ! ---------------------------------214 ! Rebuild the Matrix as avt /= avs215 216 ! Diagonal, inferior, superior (including the bottom boundary condition via avs masked)217 DO jk = 1, jpkm1218 DO jj = 2, jpjm1219 DO ji = fs_2, fs_jpim1 ! vector opt.220 zwi(ji,jj,jk) = - rdttrc(jk) * zavsi(ji,jj,jk ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk ) )221 zws(ji,jj,jk) = - rdttrc(jk) * zavsi(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) )222 zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk)223 END DO224 END DO225 END DO226 227 ! Surface boudary conditions228 DO jj = 2, jpjm1229 DO ji = fs_2, fs_jpim1 ! vector opt.230 zwi(ji,jj,1) = 0.e0231 zwd(ji,jj,1) = 1. - zws(ji,jj,1)232 END DO233 END DO234 235 !! Matrix inversion from the first level236 !!----------------------------------------------------------------------237 ! solve m.x = y where m is a tri diagonal matrix ( jpk*jpk )238 !239 ! ( zwd1 zws1 0 0 0 )( zwx1 ) ( zwy1 )240 ! ( zwi2 zwd2 zws2 0 0 )( zwx2 ) ( zwy2 )241 ! ( 0 zwi3 zwd3 zws3 0 )( zwx3 )=( zwy3 )242 ! ( ... )( ... ) ( ... )243 ! ( 0 0 0 zwik zwdk )( zwxk ) ( zwyk )244 !245 ! m is decomposed in the product of an upper and lower triangular246 ! matrix247 ! The 3 diagonal terms are in 2d arrays: zwd, zws, zwi248 ! The second member is in 2d array zwy249 ! The solution is in 2d array zwx250 ! The 3d arry zwt is a work space array251 ! zwy is used and then used as a work space array : its value is modified!252 253 ! first recurrence: Tk = Dk - Ik Sk-1 / Tk-1 (increasing k)254 DO jj = 2, jpjm1255 DO ji = fs_2, fs_jpim1256 zwt(ji,jj,1) = zwd(ji,jj,1)257 END DO258 END DO259 DO jk = 2, jpkm1260 DO jj = 2, jpjm1261 DO ji = fs_2, fs_jpim1262 zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1)/zwt(ji,jj,jk-1)263 END DO264 END DO265 END DO266 267 182 IF( l_trdtrc ) ALLOCATE( ztrtrd(jpi,jpj,jpk) ) 268 183 … … 272 187 273 188 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends 189 190 zwd ( 1, :, : ) = 0.e0 ; zwd ( jpi, :, : ) = 0.e0 191 zws ( 1, :, : ) = 0.e0 ; zws ( jpi, :, : ) = 0.e0 192 zwi ( 1, :, : ) = 0.e0 ; zwi ( jpi, :, : ) = 0.e0 193 zwt ( 1, :, : ) = 0.e0 ; zwt ( jpi, :, : ) = 0.e0 194 zwt ( :, :, 1 ) = 0.e0 ; zwt ( :, :, jpk ) = 0.e0 195 zavsi( 1, :, : ) = 0.e0 ; zavsi( jpi, :, : ) = 0.e0 196 zavsi( :, :, 1 ) = 0.e0 ; zavsi( :, :, jpk ) = 0.e0 274 197 275 198 # if defined key_trc_diatrd … … 277 200 ztrd(:,:,:) = tra(:,:,:,jn) 278 201 # endif 202 203 ! II. Vertical trend associated with the vertical physics 204 ! ======================================================= 205 ! (including the vertical flux proportional to dk[t] associated 206 ! with the lateral mixing, through the avt update) 207 ! dk[ avt dk[ (t,s) ] ] diffusive trends 208 209 210 ! II.0 Matrix construction 211 ! ------------------------ 212 ! update and save of avt (and avs if double diffusive mixing) 213 DO jk = 2, jpkm1 214 DO jj = 2, jpjm1 215 DO ji = fs_2, fs_jpim1 ! vector opt. 216 zavi = fsahtw(ji,jj,jk) * ( & ! vertical mixing coef. due to lateral mixing 217 & wslpi(ji,jj,jk) * wslpi(ji,jj,jk) & 218 & + wslpj(ji,jj,jk) * wslpj(ji,jj,jk) ) 219 zavsi(ji,jj,jk) = fstravs(ji,jj,jk) + zavi ! dd mixing: zavsi = total vertical mixing coef. on tracer 220 221 END DO 222 END DO 223 END DO 224 225 226 ! II.1 Vertical diffusion on tracer 227 ! --------------------------------- 228 229 ! Rebuild the Matrix as avt /= avs 230 231 ! Diagonal, inferior, superior (including the bottom boundary condition via avs masked) 232 DO jk = 1, jpkm1 233 DO jj = 2, jpjm1 234 DO ji = fs_2, fs_jpim1 ! vector opt. 235 zwi(ji,jj,jk) = - rdttrc(jk) * zavsi(ji,jj,jk ) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk ) ) 236 zws(ji,jj,jk) = - rdttrc(jk) * zavsi(ji,jj,jk+1) / ( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) ) 237 zwd(ji,jj,jk) = 1. - zwi(ji,jj,jk) - zws(ji,jj,jk) 238 END DO 239 END DO 240 END DO 241 242 ! Surface boudary conditions 243 DO jj = 2, jpjm1 244 DO ji = fs_2, fs_jpim1 ! vector opt. 245 zwi(ji,jj,1) = 0.e0 246 zwd(ji,jj,1) = 1. - zws(ji,jj,1) 247 END DO 248 END DO 249 250 !! Matrix inversion from the first level 251 !!---------------------------------------------------------------------- 252 ! solve m.x = y where m is a tri diagonal matrix ( jpk*jpk ) 253 ! 254 ! ( zwd1 zws1 0 0 0 )( zwx1 ) ( zwy1 ) 255 ! ( zwi2 zwd2 zws2 0 0 )( zwx2 ) ( zwy2 ) 256 ! ( 0 zwi3 zwd3 zws3 0 )( zwx3 )=( zwy3 ) 257 ! ( ... )( ... ) ( ... ) 258 ! ( 0 0 0 zwik zwdk )( zwxk ) ( zwyk ) 259 ! 260 ! m is decomposed in the product of an upper and lower triangular 261 ! matrix 262 ! The 3 diagonal terms are in 2d arrays: zwd, zws, zwi 263 ! The second member is in 2d array zwy 264 ! The solution is in 2d array zwx 265 ! The 3d arry zwt is a work space array 266 ! zwy is used and then used as a work space array : its value is modified! 267 268 ! first recurrence: Tk = Dk - Ik Sk-1 / Tk-1 (increasing k) 269 DO jj = 2, jpjm1 270 DO ji = fs_2, fs_jpim1 271 zwt(ji,jj,1) = zwd(ji,jj,1) 272 END DO 273 END DO 274 DO jk = 2, jpkm1 275 DO jj = 2, jpjm1 276 DO ji = fs_2, fs_jpim1 277 zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) /zwt(ji,jj,jk-1) 278 END DO 279 END DO 280 END DO 279 281 280 282 ! second recurrence: Zk = Yk - Ik / Tk-1 Zk-1 -
branches/devmercator2010/NEMO/TOP_SRC/par_trc.F90
r2047 r2072 18 18 USE par_lobster ! LOBSTER model 19 19 USE par_pisces ! PISCES model 20 USE par_c14b ! C14 bomb tracer21 20 USE par_cfc ! CFC 11 and 12 tracers 21 USE par_c14b ! C14 bomb tracer 22 22 USE par_my_trc ! user defined passive tracers 23 23 24 24 IMPLICIT NONE 25 PUBLIC 25 26 26 27 ! Passive tracers : Total size 27 28 ! --------------- ! total number of passive tracers, of 2d and 3d output and trend arrays 28 INTEGER, PUBLIC, PARAMETER :: jptra = jp_lobster + jp_pisces + jp_cfc + jp_c14b+ jp_my_trc29 INTEGER, PUBLIC, PARAMETER :: jpdia2d = jp_lobster_2d + jp_pisces_2d + jp_cfc_2d + jp_c14b_2d+ jp_my_trc_2d30 INTEGER, PUBLIC, PARAMETER :: jpdia3d = jp_lobster_3d + jp_pisces_3d + jp_cfc_3d + jp_c14b_3d+ jp_my_trc_3d29 INTEGER, PUBLIC, PARAMETER :: jptra = jp_lobster + jp_pisces + jp_cfc + jp_c14b + jp_my_trc 30 INTEGER, PUBLIC, PARAMETER :: jpdia2d = jp_lobster_2d + jp_pisces_2d + jp_cfc_2d + jp_c14b_2d + jp_my_trc_2d 31 INTEGER, PUBLIC, PARAMETER :: jpdia3d = jp_lobster_3d + jp_pisces_3d + jp_cfc_3d + jp_c14b_3d + jp_my_trc_3d 31 32 ! ! total number of sms diagnostic arrays 32 INTEGER, PUBLIC, 33 INTEGER, PUBLIC, PARAMETER :: jpdiabio = jp_lobster_trd + jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_my_trc_trd 33 34 34 35 ! 1D configuration ("key_c1d") … … 39 40 LOGICAL, PUBLIC, PARAMETER :: lk_trc_c1d = .FALSE. !: 1D pass. tracer configuration flag 40 41 # endif 42 41 43 ! Passive tracers : size for TRP trends diagnotics (used if 'key_trc_diatrd' defined) 42 # if defined key_trc_diatrd 43 ! Passive tracers : size for TRP trends diagnotics (used if 'key_trc_diatrd' defined) 44 INTEGER, PUBLIC, PARAMETER :: jptrc_xad = 1 !: x- horizontal advection 45 INTEGER, PUBLIC, PARAMETER :: jptrc_yad = 2 !: y- horizontal advection 46 INTEGER, PUBLIC, PARAMETER :: jptrc_zad = 3 !: z- vertical advection 47 INTEGER, PUBLIC, PARAMETER :: jptrc_xdf = 4 !: lateral diffusion 48 INTEGER, PUBLIC, PARAMETER :: jptrc_ydf = 5 !: lateral diffusion 49 INTEGER, PUBLIC, PARAMETER :: jptrc_zdf = 6 !: vertical diffusion (Kz) 50 INTEGER, PUBLIC, PARAMETER :: jptrc_sbc = 7 !: surface boundary condition 51 #if ! defined key_trcldf_eiv && ! defined key_trcdmp 52 INTEGER, PUBLIC, PARAMETER :: jpdiatrc = 7 !: trends: 3*(advection + diffusion ) + sbc 53 #endif 54 #if defined key_trcldf_eiv && defined key_trcdmp 55 INTEGER, PUBLIC, PARAMETER :: jptrc_xei = 8 !: x- horiz. EIV advection 56 INTEGER, PUBLIC, PARAMETER :: jptrc_yei = 9 !: y- horiz. EIV advection 57 INTEGER, PUBLIC, PARAMETER :: jptrc_zei = 10 !: z- vert. EIV advection 58 INTEGER, PUBLIC, PARAMETER :: jptrc_dmp = 11 !: damping 59 INTEGER, PUBLIC, PARAMETER :: jpdiatrc = 11 !: trends: 3*(advection + diffusion + eiv ) + sbc + damping 60 #endif 61 #if defined key_trcldf_eiv && ! defined key_trcdmp 62 INTEGER, PUBLIC, PARAMETER :: jptrc_xei = 8 !: x- horiz. EIV advection 63 INTEGER, PUBLIC, PARAMETER :: jptrc_yei = 9 !: y- horiz. EIV advection 64 INTEGER, PUBLIC, PARAMETER :: jptrc_zei = 10 !: z- vert. EIV advection 65 INTEGER, PUBLIC, PARAMETER :: jpdiatrc = 10 !: trends: 3*(advection + diffusion + eiv ) + sbc 66 #endif 67 #if ! defined key_trcldf_eiv && defined key_trcdmp 68 INTEGER, PUBLIC, PARAMETER :: jptrc_dmp = 8 !: damping 69 INTEGER, PUBLIC, PARAMETER :: jpdiatrc = 8 !: trends: 3*(advection + diffusion ) + sbc + damping 70 #endif 44 #if defined key_trcldf_eiv 45 # if defined key_trcdmp 46 INTEGER, PARAMETER :: jpdiatrc = 11 !: trends: 3*(advection + diffusion + eiv ) + damping + sms 47 # else 48 INTEGER, PARAMETER :: jpdiatrc = 10 !: trends: 3*(advection + diffusion + eiv ) + sms 49 # endif 50 #else 51 # if defined key_trcdmp 52 INTEGER, PARAMETER :: jpdiatrc = 8 !: trends: 3*(advection + diffusion ) + damping + sms 53 # else 54 INTEGER, PARAMETER :: jpdiatrc = 7 !: trends: 3*(advection + diffusion ) + damping + sms 55 # endif 71 56 #endif 72 57 -
branches/devmercator2010/NEMO/TOP_SRC/trcdia.F90
r1836 r2072 25 25 USE trc 26 26 USE trp_trc 27 USE par_trc28 27 USE trdmld_trc_oce, ONLY : luttrd 29 28 USE dianam ! build name of file (routine) … … 42 41 INTEGER :: ndimt50 !: number of ocean points in index array 43 42 INTEGER :: ndimt51 !: number of ocean points in index array 44 REAL(wp) :: zjulian !: ???? not DOCTOR !43 REAL(wp) :: xjulian !: ???? not DOCTOR ! 45 44 INTEGER , DIMENSION (jpij*jpk) :: ndext50 !: integer arrays for ocean 3D index 46 45 INTEGER , DIMENSION (jpij) :: ndext51 !: integer arrays for ocean surface index … … 158 157 159 158 ! Compute julian date from starting date of the run 160 CALL ymds2ju( nyear, nmonth, nday, rdt, zjulian )161 zjulian = zjulian - adatrj ! set calendar origin to the beginning of the experiment159 CALL ymds2ju( nyear, nmonth, nday, rdt, xjulian ) 160 xjulian = xjulian - adatrj ! set calendar origin to the beginning of the experiment 162 161 IF(lwp)WRITE(numout,*)' ' 163 162 IF(lwp)WRITE(numout,*)' Date 0 used :', nittrc000 & 164 163 & ,' YEAR ', nyear, ' MONTH ', nmonth, ' DAY ', nday & 165 & ,'Julian day : ', zjulian164 & ,'Julian day : ', xjulian 166 165 167 166 IF(lwp) WRITE(numout,*) ' indexes of zoom = ', iimi, iima, ijmi, ijma, & … … 172 171 IF(lwp) THEN 173 172 CALL dia_nam( clhstnam, nwritetrc,' ' ) 174 CALL ctl opn( inum, 'date.file', 'REPLACE', 'FORMATTED', 'SEQUENTIAL',1, numout, lwp, narea )173 CALL ctl_opn( inum, 'date.file', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, narea ) 175 174 WRITE(inum,*) clhstnam 176 175 CLOSE(inum) … … 185 184 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 186 185 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 187 & nittrc000-ndttrc, zjulian, zdt, nhorit5, nit5 , domain_id=nidom)186 & nittrc000-ndttrc, xjulian, zdt, nhorit5, nit5 , domain_id=nidom) 188 187 189 188 ! Vertical grid for tracer : gdept … … 259 258 CHARACTER (len=80) :: cltral 260 259 CHARACTER (len=10) :: csuff 261 INTEGER :: jn, jl , ikn260 INTEGER :: jn, jl 262 261 INTEGER :: iimi, iima, ijmi, ijma, ipk, it, itmod 263 262 REAL(wp) :: zsto, zout, zdt … … 314 313 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 315 314 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 316 & nittrc000-ndttrc, zjulian, zdt, nhorit6(jn), &315 & nittrc000-ndttrc, xjulian, zdt, nhorit6(jn), & 317 316 & nit6(jn) , domain_id=nidom ) 318 317 … … 323 322 324 323 ! Declare all the output fields as NETCDF variables 324 325 ! trends for tracer concentrations 325 326 DO jn = 1, jptra 326 327 IF( luttrd(jn) ) THEN 327 328 DO jl = 1, jpdiatrc 328 IF( jl == jptrc_xad) THEN329 IF( jl == 1 ) THEN 329 330 ! short and long title for x advection for tracer 330 331 WRITE (cltra,'("XAD_",16a)') ctrcnm(jn) 331 WRITE (cltral,'("X advective trend for ",58a)') ctrcnl(jn)(1:58) 332 END IF 333 IF( jl == jptrc_yad ) THEN 332 WRITE (cltral,'("X advective trend for ",58a)') & 333 & ctrcnl(jn)(1:58) 334 END IF 335 IF( jl == 2 ) THEN 334 336 ! short and long title for y advection for tracer 335 337 WRITE (cltra,'("YAD_",16a)') ctrcnm(jn) 336 WRITE (cltral,'("Y advective trend for ",58a)') ctrcnl(jn)(1:58) 337 END IF 338 IF( jl == jptrc_zad ) THEN 338 WRITE (cltral,'("Y advective trend for ",58a)') & 339 & ctrcnl(jn)(1:58) 340 END IF 341 IF( jl == 3 ) THEN 339 342 ! short and long title for Z advection for tracer 340 343 WRITE (cltra,'("ZAD_",16a)') ctrcnm(jn) 341 WRITE (cltral,'("Z advective trend for ",58a)') ctrcnl(jn)(1:58) 342 END IF 343 IF( jl == jptrc_xdf ) THEN 344 WRITE (cltral,'("Z advective trend for ",58a)') & 345 & ctrcnl(jn)(1:58) 346 END IF 347 IF( jl == 4 ) THEN 344 348 ! short and long title for X diffusion for tracer 345 349 WRITE (cltra,'("XDF_",16a)') ctrcnm(jn) 346 WRITE (cltral,'("X diffusion trend for ",58a)') ctrcnl(jn)(1:58) 347 END IF 348 IF( jl == jptrc_ydf ) THEN 350 WRITE (cltral,'("X diffusion trend for ",58a)') & 351 & ctrcnl(jn)(1:58) 352 END IF 353 IF( jl == 5 ) THEN 349 354 ! short and long title for Y diffusion for tracer 350 355 WRITE (cltra,'("YDF_",16a)') ctrcnm(jn) 351 WRITE (cltral,'("Y diffusion trend for ",58a)') ctrcnl(jn)(1:58) 352 END IF 353 IF( jl == jptrc_zdf ) THEN 356 WRITE (cltral,'("Y diffusion trend for ",58a)') & 357 & ctrcnl(jn)(1:58) 358 END IF 359 IF( jl == 6 ) THEN 354 360 ! short and long title for Z diffusion for tracer 355 361 WRITE (cltra,'("ZDF_",16a)') ctrcnm(jn) 356 WRITE (cltral,'("Z diffusion trend for ",58a)') ctrcnl(jn)(1:58) 362 WRITE (cltral,'("Z diffusion trend for ",58a)') & 363 & ctrcnl(jn)(1:58) 357 364 END IF 358 365 # if defined key_trcldf_eiv 359 IF( jl == jptrc_xei) THEN366 IF( jl == 7 ) THEN 360 367 ! short and long title for x gent velocity for tracer 361 368 WRITE (cltra,'("XGV_",16a)') ctrcnm(jn) 362 WRITE (cltral,'("X gent velocity trend for ",53a)') ctrcnl(jn)(1:53) 363 END IF 364 IF( jl == jptrc_yei ) THEN 369 WRITE (cltral,'("X gent velocity trend for ",53a)') & 370 & ctrcnl(jn)(1:53) 371 END IF 372 IF( jl == 8 ) THEN 365 373 ! short and long title for y gent velocity for tracer 366 374 WRITE (cltra,'("YGV_",16a)') ctrcnm(jn) 367 WRITE (cltral,'("Y gent velocity trend for ",53a)') ctrcnl(jn)(1:53) 368 END IF 369 IF( jl == jptrc_zei ) THEN 375 WRITE (cltral,'("Y gent velocity trend for ",53a)') & 376 & ctrcnl(jn)(1:53) 377 END IF 378 IF( jl == 9 ) THEN 370 379 ! short and long title for Z gent velocity for tracer 371 380 WRITE (cltra,'("ZGV_",16a)') ctrcnm(jn) 372 WRITE (cltral,'("Z gent velocity trend for ",53a)') ctrcnl(jn)(1:53) 381 WRITE (cltral,'("Z gent velocity trend for ",53a)') & 382 & ctrcnl(jn)(1:53) 373 383 END IF 374 384 # endif 375 385 # if defined key_trcdmp 376 IF( jl == jp trc_dmp) THEN386 IF( jl == jpdiatrc - 1 ) THEN 377 387 ! last trends for tracer damping : short and long title 378 388 WRITE (cltra,'("TDM_",16a)') ctrcnm(jn) 379 WRITE (cltral,'("Tracer damping trend for ",55a)') ctrcnl(jn)(1:55) 380 END IF 381 # endif 382 IF( jl == jptrc_sbc ) THEN 389 WRITE (cltral,'("Tracer damping trend for ",55a)') & 390 & ctrcnl(jn)(1:55) 391 END IF 392 # endif 393 IF( jl == jpdiatrc ) THEN 383 394 ! last trends for tracer damping : short and long title 384 395 WRITE (cltra,'("SBC_",16a)') ctrcnm(jn) 385 WRITE (cltral,'("Surface boundary flux ",58a)') ctrcnl(jn)(1:55)386 END IF387 WRITE (cltral,'("Surface boundary flux ",58a)') ctrcnl(jn)(1:55)388 END IF 396 WRITE (cltral,'("Surface boundary flux ",58a)') & 397 & ctrcnl(jn)(1:58) 398 END IF 399 389 400 CALL FLUSH( numout ) 390 401 cltrau = ctrcun(jn) ! UNIT for tracer /trends … … 395 406 END IF 396 407 END DO 408 397 409 ! CLOSE netcdf Files 398 410 DO jn = 1, jptra … … 420 432 DO jn = 1, jptra 421 433 IF( luttrd(jn) ) THEN 422 ikn = ikeep(jn)423 434 DO jl = 1, jpdiatrc 424 ! short titles 425 IF( jl == jptrc_xad) WRITE (cltra,'("XAD_",16a)') ctrcnm(jn)426 IF( jl == jptrc_yad) WRITE (cltra,'("YAD_",16a)') ctrcnm(jn)427 IF( jl == jptrc_zad) WRITE (cltra,'("ZAD_",16a)') ctrcnm(jn)428 IF( jl == jptrc_xdf) WRITE (cltra,'("XDF_",16a)') ctrcnm(jn)429 IF( jl == jptrc_ydf) WRITE (cltra,'("YDF_",16a)') ctrcnm(jn)430 IF( jl == jptrc_zdf) WRITE (cltra,'("ZDF_",16a)') ctrcnm(jn)435 ! short titles 436 IF( jl == 1) WRITE (cltra,'("XAD_",16a)') ctrcnm(jn) ! x advection for tracer 437 IF( jl == 2) WRITE (cltra,'("YAD_",16a)') ctrcnm(jn) ! z advection for tracer 438 IF( jl == 3) WRITE (cltra,'("ZAD_",16a)') ctrcnm(jn) ! z advection for tracer 439 IF( jl == 4) WRITE (cltra,'("XDF_",16a)') ctrcnm(jn) ! x diffusion for tracer 440 IF( jl == 5) WRITE (cltra,'("YDF_",16a)') ctrcnm(jn) ! y diffusion for tracer 441 IF( jl == 6) WRITE (cltra,'("ZDF_",16a)') ctrcnm(jn) ! z diffusion for tracer 431 442 # if defined key_trcldf_eiv 432 IF( jl == jptrc_xei) WRITE (cltra,'("XGV_",16a)') ctrcnm(jn)433 IF( jl == jptrc_yei) WRITE (cltra,'("YGV_",16a)') ctrcnm(jn)434 IF( jl == jptrc_zei) WRITE (cltra,'("ZGV_",16a)') ctrcnm(jn)443 IF( jl == 7) WRITE (cltra,'("XGV_",16a)') ctrcnm(jn) ! x gent velocity for tracer 444 IF( jl == 8) WRITE (cltra,'("YGV_",16a)') ctrcnm(jn) ! y gent velocity for tracer 445 IF( jl == 9) WRITE (cltra,'("ZGV_",16a)') ctrcnm(jn) ! z gent velocity for tracer 435 446 # endif 436 447 # if defined key_trcdmp 437 IF( jl == jp trc_dmp ) WRITE (cltra,'("TDM_",16a)') ctrcnm(jn)438 # endif 439 IF( jl == jp trc_sbc ) WRITE (cltra,'("SBC_",16a)') ctrcnm(jn)448 IF( jl == jpdiatrc - 1 ) WRITE (cltra,'("TDM_",16a)') ctrcnm(jn) ! damping 449 # endif 450 IF( jl == jpdiatrc ) WRITE (cltra,'("SBC_",a)') ctrcnm(jn) ! surface boundary conditions 440 451 ! 441 CALL histwrite(nit6(jn), cltra, it, trtrd(:,:,:,ik n,jl),ndimt50, ndext50)452 CALL histwrite(nit6(jn), cltra, it, trtrd(:,:,:,ikeep(jn),jl),ndimt50, ndext50) 442 453 END DO 443 454 END IF … … 541 552 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 542 553 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 543 & nittrc000-ndttrc, zjulian, zdt, nhoritd, nitd , domain_id=nidom )554 & nittrc000-ndttrc, xjulian, zdt, nhoritd, nitd , domain_id=nidom ) 544 555 545 556 ! Vertical grid for 2d and 3d arrays … … 689 700 CALL histbeg( clhstnam, jpi, glamt, jpj, gphit, & 690 701 & iimi, iima-iimi+1, ijmi, ijma-ijmi+1, & 691 & nittrc000-ndttrc, zjulian, zdt, nhoritb, nitb , domain_id=nidom )702 & nittrc000-ndttrc, xjulian, zdt, nhoritb, nitb , domain_id=nidom ) 692 703 ! Vertical grid for biological trends 693 704 CALL histvert(nitb, 'deptht', 'Vertical T levels', 'm', ipk, gdept_0, ndepitb) -
branches/devmercator2010/NEMO/TOP_SRC/trcdta.F90
r1801 r2072 25 25 PUBLIC trc_dta ! called in trcini.F90 and trcdmp.F90 26 26 27 LOGICAL , PUBLIC, PARAMETER :: lk_dtatrc = .TRUE. !: temperature data flag28 27 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk,jptra) :: trdta !: tracer data at given time-step 29 28 … … 63 62 !! 64 63 CHARACTER (len=39) :: clname(jptra) 65 INTEGER, PARAMETER :: & 66 jpmonth = 12 ! number of months 64 INTEGER, PARAMETER :: jpmois = 12 ! number of months 67 65 INTEGER :: ji, jj, jn, jl 68 66 INTEGER :: imois, iman, i15, ik ! temporary integers … … 83 81 ENDIF 84 82 ! Initialization 85 iman = jpmo nth83 iman = jpmois 86 84 i15 = nday / 16 87 85 imois = nmonth + i15 -1 … … 190 188 ! Read init file only 191 189 IF( kt == nittrc000 ) THEN 192 ntrc1(jn) = 1193 190 CALL iom_get ( numtr(jn), jpdom_data, ctrcnm(jn), trdta(:,:,:,jn), ntrc1(jn) ) 194 191 trdta(:,:,:,jn) = trdta(:,:,:,jn) * tmask(:,:,:) … … 207 204 !! Dummy module NO 3D passive tracer data 208 205 !!---------------------------------------------------------------------- 209 LOGICAL , PUBLIC, PARAMETER :: lk_dtatrc = .FALSE. !: temperature data flag210 206 CONTAINS 211 207 SUBROUTINE trc_dta( kt ) ! Empty routine -
branches/devmercator2010/NEMO/TOP_SRC/trcini.F90
r1836 r2072 122 122 trb(:,:,:,:) = trn(:,:,:,:) 123 123 ELSE 124 !125 124 CALL trc_rst_read ! restart from a file 126 ! 125 #if defined key_off_tra 126 CALL day_init ! calendar 127 #endif 127 128 ENDIF 128 129 -
branches/devmercator2010/NEMO/TOP_SRC/trcrst.F90
r1836 r2072 1 1 MODULE trcrst 2 2 !!====================================================================== 3 !! 4 !! TOP : Manage the passive tracer restart3 !! *** MODULE trcrst *** 4 !! TOP : create, write, read the restart files for passive tracers 5 5 !!====================================================================== 6 !! History : - ! 1991-03 () original code 7 !! 1.0 ! 2005-03 (O. Aumont, A. El Moussaoui) F90 8 !! - ! 2005-10 (C. Ethe) print control 9 !! 2.0 ! 2005-10 (C. Ethe, G. Madec) revised architecture 6 !! History : 1.0 ! 2007-02 (C. Ethe) adaptation from the ocean 10 7 !!---------------------------------------------------------------------- 11 8 #if defined key_top 12 !!----------------------------------------------------------------------13 !! 'key_top' TOP models14 !!----------------------------------------------------------------------15 !!----------------------------------------------------------------------16 !! trc_rst : Restart for passive tracer17 !!----------------------------------------------------------------------18 9 !!---------------------------------------------------------------------- 19 10 !! 'key_top' TOP models … … 25 16 USE oce_trc 26 17 USE trc 27 USE trctrp_lec 18 USE sms_lobster ! LOBSTER variables 19 USE sms_pisces ! PISCES variables 20 USE trcsms_cfc ! CFC variables 21 USE trcsms_c14b ! C14 variables 22 USE trcsms_my_trc ! MY_TRC variables 23 USE trctrp_lec 28 24 USE lib_mpp 29 25 USE iom 30 USE trcrst_cfc ! CFC 31 USE trcrst_lobster ! LOBSTER restart 32 USE trcrst_pisces ! PISCES restart 33 USE trcrst_c14b ! C14 bomb restart 34 USE trcrst_my_trc ! MY_TRC restart 35 #if defined key_off_tra 36 USE daymod 37 #endif 26 38 27 IMPLICIT NONE 39 28 PRIVATE 40 29 41 30 PUBLIC trc_rst_opn ! called by ??? 42 31 PUBLIC trc_rst_read ! called by ??? 43 32 PUBLIC trc_rst_wri ! called by ??? 44 33 45 34 INTEGER, PUBLIC :: numrtr, numrtw !: logical unit for trc restart (read and write) 35 46 36 47 37 !! * Substitutions … … 99 89 END SUBROUTINE trc_rst_opn 100 90 101 SUBROUTINE trc_rst_read 91 92 SUBROUTINE trc_rst_read 102 93 !!---------------------------------------------------------------------- 103 94 !! *** trc_rst_opn *** … … 105 96 !! ** purpose : read passive tracer fields in restart files 106 97 !!---------------------------------------------------------------------- 107 INTEGER :: jn 108 INTEGER :: iarak0 98 INTEGER :: jn 99 INTEGER :: iarak0 109 100 REAL(wp) :: zarak0 110 101 INTEGER :: jlibalt = jprstlib 111 102 LOGICAL :: llok 103 #if defined key_pisces 104 INTEGER :: ji, jj, jk 105 REAL(wp) :: zcaralk, zbicarb, zco3 106 REAL(wp) :: ztmas, ztmas1 107 #endif 112 108 113 109 !!---------------------------------------------------------------------- … … 119 115 IF ( jprstlib == jprstdimg ) THEN 120 116 ! eventually read netcdf file (monobloc) for restarting on different number of processors 121 ! if {cn_trcrst_in}.nc exists, then set jlibalt to jpnf90 117 ! if {cn_trcrst_in}.nc exists, then set jlibalt to jpnf90 122 118 INQUIRE( FILE = TRIM(cn_trcrst_in)//'.nc', EXIST = llok ) 123 IF ( llok ) THEN ; jlibalt = jpnf90 ; ELSE ; jlibalt = jprstlib ; ENDIF 124 ENDIF 125 126 CALL iom_open( cn_trcrst_in, numrtr, kiolib = jlibalt ) 119 IF ( llok ) THEN ; jlibalt = jpnf90 ; ELSE ; jlibalt = jprstlib ; ENDIF 120 ENDIF 121 122 CALL iom_open( cn_trcrst_in, numrtr, kiolib = jlibalt ) 127 123 128 124 ! Time domain : restart … … 140 136 & ' centered or euler ' ) 141 137 IF(lwp) WRITE(numout,*) 138 142 139 IF(lwp) WRITE(numout,*) ' arakawa option : ', NINT( zarak0 ) 140 143 141 144 142 ! READ prognostic variables and computes diagnostic variable 145 143 DO jn = 1, jptra 146 CALL iom_get( numrtr, jpdom_autoglo, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) 144 CALL iom_get( numrtr, jpdom_autoglo, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) 147 145 END DO 148 146 149 147 DO jn = 1, jptra 150 CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 148 CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 151 149 END DO 152 150 153 IF( lk_lobster ) CALL trc_rst_read_lobster( numrtr ) ! LOBSTER bio-model 154 IF( lk_pisces ) CALL trc_rst_read_pisces ( numrtr ) ! PISCES bio-model 155 IF( lk_cfc ) CALL trc_rst_read_cfc ( numrtr ) ! CFC tracers 156 IF( lk_c14b ) CALL trc_rst_read_c14b ( numrtr ) ! C14 bomb tracer 157 IF( lk_my_trc ) CALL trc_rst_read_my_trc ( numrtr ) ! MY_TRC tracers 158 151 #if defined key_lobster 152 CALL iom_get( numrtr, jpdom_autoglo, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 153 CALL iom_get( numrtr, jpdom_autoglo, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 154 #endif 155 #if defined key_pisces 156 ! 157 IF( ln_pisdmp ) CALL pis_dmp_ini ! relaxation of some tracers 158 ! 159 IF( iom_varid( numrtr, 'PH', ldstop = .FALSE. ) > 0 ) THEN 160 CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:) ) 161 ELSE 162 ! Set PH from total alkalinity, borat (???), akb3 (???) and ak23 (???) 163 ! -------------------------------------------------------- 164 DO jk = 1, jpk 165 DO jj = 1, jpj 166 DO ji = 1, jpi 167 ztmas = tmask(ji,jj,jk) 168 ztmas1 = 1. - tmask(ji,jj,jk) 169 zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 170 zco3 = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 171 zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 172 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 173 END DO 174 END DO 175 END DO 176 ENDIF 177 CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) 178 IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN 179 CALL iom_get( numrtr, jpdom_autoglo, 'Silicamax' , xksimax(:,:) ) 180 ELSE 181 xksimax(:,:) = xksi(:,:) 182 ENDIF 183 #endif 184 #if defined key_cfc 185 DO jn = jp_cfc0, jp_cfc1 186 CALL iom_get( numrtr, jpdom_autoglo, 'qint_'//ctrcnm(jn), qint_cfc(:,:,jn) ) 187 END DO 188 #endif 189 #if defined key_c14b 190 CALL iom_get( numrtr, jpdom_autoglo, 'qint_'//ctrcnm(jn) , qint_c14(:,:) ) 191 #endif 192 #if defined key_my_trc 193 #endif 194 159 195 CALL iom_close( numrtr ) 160 196 ! 161 197 END SUBROUTINE trc_rst_read 198 162 199 163 200 SUBROUTINE trc_rst_wri( kt ) … … 181 218 CALL iom_rstput( kt, nitrst, numrtw, 'arak0', zarak0 ) 182 219 183 ! prognostic variables 184 ! -------------------- 220 ! prognostic variables 221 ! -------------------- 185 222 DO jn = 1, jptra 186 223 CALL iom_rstput( kt, nitrst, numrtw, 'TRN'//ctrcnm(jn), trn(:,:,:,jn) ) … … 191 228 END DO 192 229 193 IF( lk_lobster ) CALL trc_rst_wri_lobster( kt, nitrst, numrtw ) ! LOBSTER bio-model 194 IF( lk_pisces ) CALL trc_rst_wri_pisces ( kt, nitrst, numrtw ) ! PISCES bio-model 195 IF( lk_cfc ) CALL trc_rst_wri_cfc ( kt, nitrst, numrtw ) ! CFC tracers 196 IF( lk_c14b ) CALL trc_rst_wri_c14b ( kt, nitrst, numrtw ) ! C14 bomb tracer 197 IF( lk_my_trc ) CALL trc_rst_wri_my_trc ( kt, nitrst, numrtw ) ! MY_TRC tracers 198 230 #if defined key_lobster 231 CALL iom_rstput( kt, nitrst, numrtw, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) ) 232 CALL iom_rstput( kt, nitrst, numrtw, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) ) 233 #endif 234 #if defined key_pisces 235 CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) ) 236 CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 237 CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 238 #endif 239 #if defined key_cfc 240 DO jn = jp_cfc0, jp_cfc1 241 CALL iom_rstput( kt, nitrst, numrtw, 'qint_'//ctrcnm(jn), qint_cfc(:,:,jn) ) 242 END DO 243 #endif 244 #if defined key_c14b 245 CALL iom_rstput( kt, nitrst, numrtw, 'qint_'//ctrcnm(jn), qint_c14(:,:) ) 246 #endif 247 #if defined key_my_trc 248 #endif 249 199 250 IF( kt == nitrst ) THEN 200 251 CALL trc_rst_stat ! statistics … … 205 256 ENDIF 206 257 ! 207 END SUBROUTINE trc_rst_wri 208 258 END SUBROUTINE trc_rst_wri 209 259 210 260 SUBROUTINE trc_rst_cal( kt, cdrw ) … … 279 329 WRITE(numout,*) 280 330 ENDIF 281 !282 CALL day_init ! compute calendar283 !284 331 #endif 285 332 … … 300 347 END SUBROUTINE trc_rst_cal 301 348 349 # if defined key_pisces 350 351 SUBROUTINE pis_dmp_ini 352 !!---------------------------------------------------------------------- 353 !! *** pis_dmp_ini *** 354 !! 355 !! ** purpose : Relaxation of some tracers 356 !!---------------------------------------------------------------------- 357 INTEGER :: ji, jj, jk 358 REAL(wp) :: & 359 alkmean = 2426. , & ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 360 po4mean = 2.165 , & ! mean value of phosphates 361 no3mean = 30.90 , & ! mean value of nitrate 362 siomean = 91.51 ! mean value of silicate 363 364 REAL(wp) :: zvol, ztrasum 365 366 367 IF(lwp) WRITE(numout,*) 368 369 IF( cp_cfg == "orca" .AND. .NOT. lk_trc_c1d ) THEN ! ORCA condiguration (not 1D) ! 370 ! ! --------------------------- ! 371 ! set total alkalinity, phosphate, NO3 & silicate 372 373 ! total alkalinity 374 ztrasum = 0.e0 375 DO jk = 1, jpk 376 DO jj = 1, jpj 377 DO ji = 1, jpi 378 zvol = cvol(ji,jj,jk) 379 # if defined key_off_degrad 380 zvol = zvol * facvol(ji,jj,jk) 381 # endif 382 ztrasum = ztrasum + trn(ji,jj,jk,jptal) * zvol 383 END DO 384 END DO 385 END DO 386 IF( lk_mpp ) CALL mpp_sum( ztrasum ) ! sum over the global domain 387 388 ztrasum = ztrasum / areatot * 1.e6 389 IF(lwp) WRITE(numout,*) ' TALK mean : ', ztrasum 390 trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / ztrasum 391 392 ! phosphate 393 ztrasum = 0.e0 394 DO jk = 1, jpk 395 DO jj = 1, jpj 396 DO ji = 1, jpi 397 zvol = cvol(ji,jj,jk) 398 # if defined key_off_degrad 399 zvol = zvol * facvol(ji,jj,jk) 400 # endif 401 ztrasum = ztrasum + trn(ji,jj,jk,jppo4) * zvol 402 END DO 403 END DO 404 END DO 405 IF( lk_mpp ) CALL mpp_sum( ztrasum ) ! sum over the global domain 406 407 ztrasum = ztrasum / areatot * 1.e6 / 122. 408 IF(lwp) WRITE(numout,*) ' PO4 mean : ', ztrasum 409 trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / ztrasum 410 411 ! Nitrates 412 ztrasum = 0.e0 413 DO jk = 1, jpk 414 DO jj = 1, jpj 415 DO ji = 1, jpi 416 zvol = cvol(ji,jj,jk) 417 # if defined key_off_degrad 418 zvol = zvol * facvol(ji,jj,jk) 419 # endif 420 ztrasum = ztrasum + trn(ji,jj,jk,jpno3) * zvol 421 END DO 422 END DO 423 END DO 424 IF( lk_mpp ) CALL mpp_sum( ztrasum ) ! sum over the global domain 425 426 ztrasum = ztrasum / areatot * 1.e6 / 7.6 427 IF(lwp) WRITE(numout,*) ' NO3 mean : ', ztrasum 428 trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / ztrasum 429 430 ! Silicate 431 ztrasum = 0.e0 432 DO jk = 1, jpk 433 DO jj = 1, jpj 434 DO ji = 1, jpi 435 zvol = cvol(ji,jj,jk) 436 # if defined key_off_degrad 437 zvol = zvol * facvol(ji,jj,jk) 438 # endif 439 ztrasum = ztrasum + trn(ji,jj,jk,jpsil) * zvol 440 END DO 441 END DO 442 END DO 443 IF( lk_mpp ) CALL mpp_sum( ztrasum ) ! sum over the global domain 444 ztrasum = ztrasum / areatot * 1.e6 445 IF(lwp) WRITE(numout,*) ' SiO3 mean : ', ztrasum 446 trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * siomean / ztrasum ) 447 ! 448 ENDIF 449 450 !#if defined key_kriest 451 ! !! Initialize number of particles from a standart restart file 452 ! !! The name of big organic particles jpgoc has been only change 453 ! !! and replace by jpnum but the values here are concentration 454 ! trn(:,:,:,jppoc) = trn(:,:,:,jppoc) + trn(:,:,:,jpnum) 455 ! trn(:,:,:,jpnum) = trn(:,:,:,jppoc) / ( 6. * xkr_massp ) 456 !#endif 457 458 END SUBROUTINE pis_dmp_ini 459 460 #endif 461 !!---------------------------------------------------------------------- 302 462 303 463 SUBROUTINE trc_rst_stat -
branches/devmercator2010/NEMO/TOP_SRC/trcwri.F90
r1836 r2072 1 1 MODULE trcwri 2 !!====================================================================== =============2 !!====================================================================== 3 3 !! *** MODULE trcwri *** 4 !! TOP : Output of passive tracers 5 !!====================================================================== ==============6 !! History : 1.0 ! 2009-05 (C. Ethe) Original code7 !! ! 20 10-03 (C. Ethe, R. Seferian ) Add the tracer transport trends4 !! TOP : Output of passive tracers 5 !!====================================================================== 6 !! 1.0 ! 7 !! ! 2009-05 (C. Ethe ) 8 8 !!---------------------------------------------------------------------- 9 9 #if defined key_top && defined key_iomput … … 11 11 !! 'key_top' && 'key_iomput' TOP models 12 12 !!---------------------------------------------------------------------- 13 !! trc_wri_trc : outputs of concentration fields 14 !! trc_wri_trd : outputs of transport trends 13 !! trc_wri : outputs of concentration fields 15 14 !!---------------------------------------------------------------------- 16 USE dom_oce ! ocean space and time domain variables17 USE oce_trc18 USE trp_trc19 15 USE trc 20 USE trdmld_trc_oce, ONLY : luttrd21 16 USE iom 22 17 #if defined key_off_tra … … 40 35 CONTAINS 41 36 42 SUBROUTINE trc_wri( kt ) 37 SUBROUTINE trc_wri( kt ) 43 38 !!--------------------------------------------------------------------- 44 39 !! *** ROUTINE trc_wri *** 45 !!46 !! ** Purpose : output passive tracers fields and dynamical trends47 !!---------------------------------------------------------------------48 INTEGER, INTENT( in ) :: kt49 !!---------------------------------------------------------------------50 51 !52 CALL iom_setkt ( kt + ndttrc - 1 ) ! set the passive tracer time step53 CALL trc_wri_trc( kt ) ! outputs for tracer concentration54 CALL trc_wri_trd( kt ) ! outputs for dynamical trends55 CALL iom_setkt ( kt ) ! set the model time step56 !57 END SUBROUTINE trc_wri58 59 SUBROUTINE trc_wri_trc( kt )60 !!---------------------------------------------------------------------61 !! *** ROUTINE trc_wri_trc ***62 40 !! 63 41 !! ** Purpose : output passive tracers fields … … 65 43 INTEGER, INTENT( in ) :: kt ! ocean time-step 66 44 INTEGER :: jn 67 CHARACTER (len=20) :: cltra , cltras45 CHARACTER (len=20) :: cltra 68 46 #if defined key_off_tra 69 47 CHARACTER (len=40) :: clhstnam 70 48 INTEGER :: inum = 11 ! temporary logical unit 71 49 #endif 50 72 51 !!--------------------------------------------------------------------- 73 52 53 ! Initialisation 54 ! -------------- 55 56 CALL iom_setkt( kt + ndttrc - 1 ) ! set the passive tracer time step 57 74 58 #if defined key_off_tra 75 59 IF( kt == nittrc000 ) THEN … … 83 67 ENDIF 84 68 #endif 69 70 85 71 ! write the tracer concentrations in the file 86 72 ! --------------------------------------- … … 90 76 END DO 91 77 ! 92 END SUBROUTINE trc_wri_trc78 CALL iom_setkt( kt ) ! set the model time step 93 79 94 # if defined key_trc_diatrd 80 ! 81 END SUBROUTINE trc_wri 95 82 96 SUBROUTINE trc_wri_trd( kt )97 !!----------------------------------------------------------------------98 !! *** ROUTINE trc_wri_trd ***99 !!100 !! ** Purpose : output of passive tracer : advection-diffusion trends101 !!102 !!----------------------------------------------------------------------103 INTEGER, INTENT( in ) :: kt ! ocean time-step104 !!105 CHARACTER (len=3) :: cltra106 INTEGER :: jn, jl, ikn107 !!----------------------------------------------------------------------108 109 DO jn = 1, jptra110 IF( luttrd(jn) ) THEN111 ikn = ikeep(jn)112 DO jl = 1, jpdiatrc113 IF( jl == jptrc_xad ) WRITE (cltra,"(3a)") 'XAD' ! x advection for tracer114 IF( jl == jptrc_yad ) WRITE (cltra,"(3a)") 'YAD' ! y advection for tracer115 IF( jl == jptrc_zad ) WRITE (cltra,"(3a)") 'ZAD' ! z advection for tracer116 IF( jl == jptrc_xdf ) WRITE (cltra,"(3a)") 'XDF' ! x diffusion for tracer117 IF( jl == jptrc_ydf ) WRITE (cltra,"(3a)") 'YDF' ! y diffusion for tracer118 IF( jl == jptrc_zdf ) WRITE (cltra,"(3a)") 'ZDF' ! z diffusion for tracer119 # if defined key_trcldf_eiv120 IF( jl == jptrc_xei ) WRITE (cltra,"(3a)") 'XGV' ! x gent velocity for tracer121 IF( jl == jptrc_yei ) WRITE (cltra,"(3a)") 'YGV' ! y gent velocity for tracer122 IF( jl == jptrc_zei ) WRITE (cltra,"(3a)") 'ZGV' ! z gent velocity for tracer123 # endif124 # if defined key_trcdmp125 IF( jl == jptrc_dmp ) WRITE (cltra,"(3a)") 'DMP' ! damping126 # endif127 IF( jl == jptrc_sbc ) WRITE (cltra,"(3a)") 'SBC' ! surface boundary conditions128 ! write the trends129 CALL iom_put( cltra, trtrd(:,:,:,ikn,jl) )130 END DO131 END IF132 END DO133 !134 END SUBROUTINE trc_wri_trd135 136 # else137 SUBROUTINE trc_wri_trd( kt ) ! Dummy routine138 INTEGER, INTENT ( in ) :: kt139 END SUBROUTINE trc_wri_trd140 #endif141 83 #else 142 84 !!---------------------------------------------------------------------- … … 148 90 INTEGER, INTENT(in) :: kt 149 91 END SUBROUTINE trc_wri 92 150 93 #endif 151 94
Note: See TracChangeset
for help on using the changeset viewer.