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 1534 for trunk/NEMO/TOP_SRC/PISCES/p4zflx.F90 – NEMO

Ignore:
Timestamp:
2009-07-24T12:35:25+02:00 (15 years ago)
Author:
cetlod
Message:

Improve the coupling interface for the carbon cycle, see ticket:488

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/TOP_SRC/PISCES/p4zflx.F90

    r1457 r1534  
    2424   USE p4zche 
    2525   USE iom 
    26  
     26#if defined key_cpl_carbon_cycle 
     27   USE sbc_oce , ONLY :  atm_co2 
     28#endif 
    2729   USE lib_mpp 
    2830 
     
    3537      atcox  = 0.20946 ,    &  !: 
    3638      atcco2 = 278.            !: 
    37   
    38    REAL(wp) :: &           
    39       xconv  = 0.01/3600.,  &  ! coefficients for conversion        
    40       tco2flx                 !: Total flux of carbon per year 
     39 
     40   REAL(wp) :: & 
     41      xconv  = 0.01/3600     !: coefficients for conversion  
     42 
     43#if defined key_cpl_carbon_cycle 
     44   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::  & 
     45      oce_co2            !: ocean carbon flux 
     46   REAL(wp) :: & 
     47      t_atm_co2_flx,  &  !: Total atmospheric carbon flux per year 
     48      t_oce_co2_flx      !: Total ocean carbon flux per year 
     49#endif 
    4150 
    4251   !!* Substitution 
     
    6372      REAL(wp) ::   zfld, zflu, zfld16, zflu16, zfact 
    6473      REAL(wp) ::   zph, zah2, zbot, zdic, zalk, zsch_o2, zalka, zsch_co2 
    65       REAL(wp), DIMENSION(jpi,jpj) ::   zkgco2, zkgo2, zh2co3, ztco2flx 
     74      REAL(wp), DIMENSION(jpi,jpj) ::   zkgco2, zkgo2, zh2co3 
    6675#if defined key_trc_diaadd && defined key_iomput 
    6776      REAL(wp), DIMENSION(jpi,jpj) ::  zcflx, zoflx, zkg, zdelc 
     
    146155      END DO 
    147156 
    148 #if ! defined key_iomput 
    149157      DO jj = 1, jpj 
    150158         DO ji = 1, jpi 
    151  
    152159            ! Compute CO2 flux for the sea and air 
     160#if ! defined key_cpl_carbon_cycle 
    153161            zfld = atcco2 * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) 
    154162            zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 
     163#else 
     164            zfld = atm_co2(ji,jj) * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) 
     165            zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 
     166            ! compute flux of carbon 
     167            oce_co2(ji,jj) = ( zfld - zflu ) * rfact & 
     168               &             * e1t(ji,jj) * e2t(ji,jj) * tmask(ji,jj,1) * 1000. 
     169#endif 
    155170            tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1) 
    156  
    157             ! compute flux of carbon 
    158             ztco2flx(ji,jj) = ( zfld - zflu ) * rfact & 
    159                &             * e1t(ji,jj) * e2t(ji,jj) * tmask(ji,jj,1) * 1000. 
    160171 
    161172            ! Compute O2 flux  
     
    164175            tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + ( zfld16 - zflu16 ) / fse3t(ji,jj,1) 
    165176 
    166 # if defined key_trc_diaadd  
     177#if defined key_trc_diaadd  
    167178            ! Save diagnostics 
    168             trc2d(ji,jj,jp_pcs0_2d    ) = ( zfld - zflu ) * 1000.  * tmask(ji,jj,1) 
     179#  if ! defined key_iomput 
     180            trc2d(ji,jj,jp_pcs0_2d    ) = ( zfld - zflu )     * 1000. * tmask(ji,jj,1) 
    169181            trc2d(ji,jj,jp_pcs0_2d + 1) = ( zfld16 - zflu16 ) * 1000. * tmask(ji,jj,1) 
    170182            trc2d(ji,jj,jp_pcs0_2d + 2) = zkgco2(ji,jj) * tmask(ji,jj,1) 
    171183            trc2d(ji,jj,jp_pcs0_2d + 3) = atcco2 - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) * tmask(ji,jj,1) 
    172 # endif 
    173          END DO 
    174       END DO 
    175       ! 
    176 #else 
    177       DO jj = 1, jpj 
    178          DO ji = 1, jpi 
    179             ! Compute CO2 flux for the sea and air 
    180             zfld = atcco2 * tmask(ji,jj,1) * chemc(ji,jj,1) * zkgco2(ji,jj) 
    181             zflu = zh2co3(ji,jj) * tmask(ji,jj,1) * zkgco2(ji,jj) 
    182             tra(ji,jj,1,jpdic) = tra(ji,jj,1,jpdic) + ( zfld - zflu ) / fse3t(ji,jj,1) 
    183  
    184             ! compute flux of carbon 
    185             ztco2flx(ji,jj) = ( zfld - zflu ) * rfact & 
    186                &             * e1t(ji,jj) * e2t(ji,jj) * tmask(ji,jj,1) * 1000. 
    187  
    188             ! Compute O2 flux  
    189             zfld16 = atcox * chemc(ji,jj,2) *tmask(ji,jj,1) * zkgo2(ji,jj) 
    190             zflu16 = trn(ji,jj,1,jpoxy) * tmask(ji,jj,1) * zkgo2(ji,jj) 
    191             tra(ji,jj,1,jpoxy) = tra(ji,jj,1,jpoxy) + ( zfld16 - zflu16 ) / fse3t(ji,jj,1) 
    192 # if defined key_trc_diaadd  
    193             ! Save diagnostics 
     184#  else 
    194185            zcflx(ji,jj) = ( zfld - zflu ) * 1000.  * tmask(ji,jj,1) 
    195186            zoflx(ji,jj) = ( zfld16 - zflu16 ) * 1000. * tmask(ji,jj,1) 
    196187            zkg  (ji,jj) = zkgco2(ji,jj) * tmask(ji,jj,1) 
    197188            zdelc(ji,jj) = atcco2 - zh2co3(ji,jj) / ( chemc(ji,jj,1) + rtrn ) * tmask(ji,jj,1) 
    198 # endif 
     189#  endif 
     190#endif 
    199191         END DO 
    200192      END DO 
    201 #endif 
    202  
     193 
     194#if defined key_cpl_carbon_cycle 
    203195      ! Total Flux of Carbon 
    204       DO jj = 1, jpj 
     196      DO jj = 1, jpj  
    205197        DO ji = 1, jpi 
    206            tco2flx = tco2flx + ztco2flx(ji,jj) * tmask_i(ji,jj) 
     198           t_atm_co2_flx = t_atm_co2_flx + atm_co2(ji,jj) * tmask_i(ji,jj) 
     199           t_oce_co2_flx = t_oce_co2_flx + oce_co2(ji,jj) * tmask_i(ji,jj) 
    207200        END DO 
    208201      END DO 
    209202 
    210203      IF( MOD( kt, nspyr ) == 0 ) THEN 
    211         IF( lk_mpp ) CALL mpp_sum( tco2flx )   ! sum over the global domain 
    212  
     204        IF( lk_mpp ) THEN 
     205          CALL mpp_sum( t_atm_co2_flx )   ! sum over the global domain 
     206          CALL mpp_sum( t_oce_co2_flx )   ! sum over the global domain 
     207        ENDIF 
    213208        WRITE(numout,*) ' Atmospheric pCO2    :' 
    214         WRITE(numout,*) '-------------------- : ',kt,'  ',atcco2 
     209        WRITE(numout,*) '-------------------- : ',kt,'  ',t_atm_co2_flx 
    215210        WRITE(numout,*) '(ppm)' 
    216211        WRITE(numout,*) 'Total Flux of Carbon :' 
    217         WRITE(numout,*) '-------------------- : ',tco2flx * 12. / 1e15 
     212        WRITE(numout,*) '-------------------- : ',t_oce_co2_flx * 12. / 1e15 
    218213        WRITE(numout,*) '(GtC/an)' 
    219         tco2flx = 0. 
     214        t_atm_co2_flx = 0. 
     215        t_oce_co2_flx = 0. 
    220216      ENDIF 
     217#endif 
    221218 
    222219      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    260257      ENDIF 
    261258 
    262       ! Initialization of total Flux of Carbon 
    263       tco2flx = 0. 
     259#if defined key_cpl_carbon_cycle 
     260      ! Initialization of Flux of Carbon 
     261      oce_co2(:,:) = 0. 
     262      t_atm_co2_flx = 0. 
     263      t_oce_co2_flx = 0. 
     264#endif 
    264265 
    265266   END SUBROUTINE p4z_flx_init 
Note: See TracChangeset for help on using the changeset viewer.