New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 11989 for NEMO/trunk/src/TOP – NEMO

Changeset 11989 for NEMO/trunk/src/TOP


Ignore:
Timestamp:
2019-11-27T16:13:52+01:00 (4 years ago)
Author:
cetlod
Message:

cmip6 diag : finalisation of CMIP6 diags implementation

Location:
NEMO/trunk/src/TOP/PISCES/P4Z
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zflx.F90

    r11536 r11989  
    160160            zfld = zfco2 * chemc(ji,jj,1) * zkgco2(ji,jj)  ! (mol/L) * (m/s) 
    161161            zflu = zh2co3(ji,jj) * zkgco2(ji,jj)                                   ! (mol/L) (m/s) ? 
    162             oce_co2(ji,jj) = ( zfld - zflu ) * rfact2 * e1e2t(ji,jj) * tmask(ji,jj,1) * 1000. 
     162            oce_co2(ji,jj) = ( zfld - zflu ) * tmask(ji,jj,1)  
    163163            ! compute the trend 
    164             tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) * rfact2 / e3t_n(ji,jj,1) * tmask(ji,jj,1) 
     164            tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + oce_co2(ji,jj) * rfact2 / e3t_n(ji,jj,1) 
    165165 
    166166            ! Compute O2 flux  
     
    174174      IF( iom_use("tcflx") .OR. iom_use("tcflxcum") .OR. kt == nitrst   & 
    175175         &                 .OR. (ln_check_mass .AND. kt == nitend) )    & 
    176          t_oce_co2_flx  = glob_sum( 'p4zflx', oce_co2(:,:) )                    !  Total Flux of Carbon 
     176         t_oce_co2_flx  = glob_sum( 'p4zflx', oce_co2(:,:) * e1e2t(:,:) * 1000. )                    !  Total Flux of Carbon 
    177177      t_oce_co2_flx_cum = t_oce_co2_flx_cum + t_oce_co2_flx       !  Cumulative Total Flux of Carbon 
    178178!      t_atm_co2_flx     = glob_sum( 'p4zflx', satmco2(:,:) * e1e2t(:,:) )       ! Total atmospheric pCO2 
     
    186186 
    187187      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     188         CALL iom_put( "AtmCo2" , satmco2(:,:) * tmask(:,:,1) )   ! Atmospheric CO2 concentration 
     189         !  
    188190         ALLOCATE( zw2d(jpi,jpj) )   
    189191         IF( iom_use( "Cflx"  ) )  THEN 
    190             zw2d(:,:) = oce_co2(:,:) / e1e2t(:,:) * rfact2r 
     192            zw2d(:,:) = oce_co2(:,:) * 1000.  ! conversion in molC/m2/s 
    191193            CALL iom_put( "Cflx"     , zw2d )  
    192194         ENDIF 
    193195         IF( iom_use( "Oflx"  ) )  THEN 
    194             zw2d(:,:) =  zoflx(:,:) * 1000 * tmask(:,:,1) 
     196            zw2d(:,:) =  zoflx(:,:) * 1000. 
    195197            CALL iom_put( "Oflx" , zw2d ) 
    196198         ENDIF 
     
    203205           CALL iom_put( "Dpco2" ,  zw2d ) 
    204206         ENDIF 
     207         IF( iom_use( "pCO2sea" ) ) THEN 
     208           zw2d(:,:) = ( zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1) 
     209           CALL iom_put( "pCO2sea" ,  zw2d ) 
     210         ENDIF 
     211 
    205212         IF( iom_use( "Dpo2" ) )  THEN 
    206213           zw2d(:,:) = ( atcox * patm(:,:) - atcox * trb(:,:,1,jpoxy) / ( chemo2(:,:,1) + rtrn ) ) * tmask(:,:,1) 
    207214           CALL iom_put( "Dpo2"  , zw2d ) 
    208215         ENDIF 
    209          CALL iom_put( "tcflx"    , t_oce_co2_flx * rfact2r )   ! molC/s 
    210          CALL iom_put( "tcflxcum" , t_oce_co2_flx_cum       )   ! molC 
     216         CALL iom_put( "tcflx"    , t_oce_co2_flx     )   ! molC/s 
     217         CALL iom_put( "tcflxcum" , t_oce_co2_flx_cum )   ! molC 
    211218         ! 
    212219         DEALLOCATE( zw2d ) 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zsms.F90

    r11536 r11989  
    3535   INTEGER ::    numco2, numnut, numnit      ! logical unit for co2 budget 
    3636   REAL(wp) ::   alkbudget, no3budget, silbudget, ferbudget, po4budget 
    37    REAL(wp) ::   xfact1, xfact2, xfact3 
     37   REAL(wp) ::   xfact, xfact1, xfact2, xfact3 
    3838 
    3939   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xnegtr     ! Array used to indicate negative tracer values 
     
    6363      REAL(wp) ::  ztra 
    6464      CHARACTER (len=25) :: charout 
     65      REAL(wp), ALLOCATABLE, DIMENSION(:,:    ) :: zw2d 
     66      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:  ) :: zw3d 
     67      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ztrdt   ! 4D workspace 
     68 
    6569      !!--------------------------------------------------------------------- 
    6670      ! 
     
    8589      rfact = r2dttrc 
    8690      ! 
     91      ! trends computation initialisation 
     92      IF( l_trdtrc )  THEN 
     93         ALLOCATE( ztrdt(jpi,jpj,jpk,jp_pisces) )  !* store now fields before applying the Asselin filter 
     94         ztrdt(:,:,:,:)  = trn(:,:,:,:) 
     95      ENDIF 
     96      ! 
     97 
    8798      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 
    8899         rfactr  = 1. / rfact 
     
    90101         rfact2r = 1. / rfact2 
    91102         xstep = rfact2 / rday         ! Time step duration for biology 
     103         xfact = 1.e+3 * rfact2r 
    92104         IF(lwp) WRITE(numout,*)  
    93105         IF(lwp) WRITE(numout,*) '    Passive Tracer  time step    rfact  = ', rfact, ' rdt = ', rdt 
     
    134146         END DO 
    135147        ! 
     148        IF(  iom_use( 'INTdtAlk' ) .OR. iom_use( 'INTdtDIC' ) .OR. iom_use( 'INTdtFer' ) .OR.  & 
     149          &  iom_use( 'INTdtDIN' ) .OR. iom_use( 'INTdtDIP' ) .OR. iom_use( 'INTdtSil' ) )  THEN 
     150          ! 
     151          ALLOCATE( zw3d(jpi,jpj,jpk), zw2d(jpi,jpj) ) 
     152          zw3d(:,:,jpk) = 0. 
     153          DO jk = 1, jpkm1 
     154              zw3d(:,:,jk) = xnegtr(:,:,jk) * xfact * e3t_n(:,:,jk) * tmask(:,:,jk) 
     155          ENDDO 
     156          ! 
     157          zw2d(:,:) = 0. 
     158          DO jk = 1, jpkm1 
     159             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tra(:,:,jk,jptal) 
     160          ENDDO 
     161          CALL iom_put( 'INTdtAlk', zw2d ) 
     162          ! 
     163          zw2d(:,:) = 0. 
     164          DO jk = 1, jpkm1 
     165             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tra(:,:,jk,jpdic) 
     166          ENDDO 
     167          CALL iom_put( 'INTdtDIC', zw2d ) 
     168          ! 
     169          zw2d(:,:) = 0. 
     170          DO jk = 1, jpkm1 
     171             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * rno3 * ( tra(:,:,jk,jpno3) + tra(:,:,jk,jpnh4) ) 
     172          ENDDO 
     173          CALL iom_put( 'INTdtDIN', zw2d ) 
     174          ! 
     175          zw2d(:,:) = 0. 
     176          DO jk = 1, jpkm1 
     177             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * po4r * tra(:,:,jk,jppo4) 
     178          ENDDO 
     179          CALL iom_put( 'INTdtDIP', zw2d ) 
     180          ! 
     181          zw2d(:,:) = 0. 
     182          DO jk = 1, jpkm1 
     183             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tra(:,:,jk,jpfer) 
     184          ENDDO 
     185          CALL iom_put( 'INTdtFer', zw2d ) 
     186          ! 
     187          zw2d(:,:) = 0. 
     188          DO jk = 1, jpkm1 
     189             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tra(:,:,jk,jpsil) 
     190          ENDDO 
     191          CALL iom_put( 'INTdtSil', zw2d ) 
     192          ! 
     193          DEALLOCATE( zw3d, zw2d ) 
     194        ENDIF 
     195        ! 
    136196         DO jn = jp_pcs0, jp_pcs1 
    137197            tra(:,:,:,jn) = 0._wp 
     
    144204         ENDIF 
    145205      END DO 
    146  
    147206      ! 
    148207      IF( l_trdtrc ) THEN 
    149208         DO jn = jp_pcs0, jp_pcs1 
    150            CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     209           ztrdt(:,:,:,jn) = ( trb(:,:,:,jn) - ztrdt(:,:,:,jn) ) * rfact2r  
     210           CALL trd_trc( ztrdt(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
    151211         END DO 
     212         DEALLOCATE( ztrdt )  
    152213      END IF 
    153214#endif 
Note: See TracChangeset for help on using the changeset viewer.