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 2457 for branches/nemo_v3_3_beta/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsed.F90 – NEMO

Ignore:
Timestamp:
2010-12-07T10:51:47+01:00 (14 years ago)
Author:
cetlod
Message:

Improve TOP & OFF components in v3.3beta, see ticket #774

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsed.F90

    r2403 r2457  
    1919   USE sms_pisces 
    2020   USE lib_mpp 
     21   USE lib_fortran 
    2122   USE prtctl_trc 
    2223   USE p4zbio 
     
    4849 
    4950   !! * Module variables 
    50    INTEGER ::                   & 
    51      ryyss,                     &  !: number of seconds per year 
    52      rmtss                         !: number of seconds per month 
    53  
     51   REAL(wp) :: ryyss               !: number of seconds per year  
     52   REAL(wp) :: ryyss1              !: inverse of ryyss 
     53   REAL(wp) :: rmtss               !: number of seconds per month 
     54   REAL(wp) :: rday1               !: inverse of rday 
     55 
     56   INTEGER , PARAMETER :: & 
     57        jpmth = 12, jpyr = 1 
    5458   INTEGER ::                   & 
    5559      numdust,                  &  !: logical unit for surface fluxes data 
    5660      nflx1 , nflx2,            &  !: first and second record used 
    5761      nflx11, nflx12      ! ??? 
    58    REAL(wp), DIMENSION(jpi,jpj,2) ::    &  !: 
    59      dustmo                                !: 2 consecutive set of dust fields  
    60    REAL(wp), DIMENSION(jpi,jpj)   ::    & 
    61      rivinp, cotdep, nitdep, dust 
    62    REAL(wp), DIMENSION(jpi,jpj,jpk)  ::   & 
    63      ironsed 
     62   REAL(wp), DIMENSION(jpi,jpj,jpmth) ::  dustmo    !: set of dust fields 
     63   REAL(wp), DIMENSION(jpi,jpj)      ::  rivinp, cotdep, nitdep, dust  
     64   REAL(wp), DIMENSION(jpi,jpj)      ::  e1e2t 
     65   REAL(wp), DIMENSION(jpi,jpj,jpk)  ::  ironsed  
    6466   REAL(wp) :: sumdepsi, rivalkinput, rivpo4input, nitdepinput 
    6567 
     
    7476CONTAINS 
    7577 
    76    SUBROUTINE p4z_sed(kt, jnt) 
     78   SUBROUTINE p4z_sed( kt, jnt ) 
    7779      !!--------------------------------------------------------------------- 
    7880      !!                     ***  ROUTINE p4z_sed  *** 
     
    8587      !!--------------------------------------------------------------------- 
    8688      INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
    87       INTEGER  ::   ji, jj, jk 
    88       INTEGER  ::   ikt 
     89      INTEGER  ::   ji, jj, jk, ikt 
    8990#if ! defined key_sed 
    9091      REAL(wp) ::   zsumsedsi, zsumsedpo4, zsumsedcal 
     92      REAL(wp) ::   zrivalk, zrivsil, zrivpo4 
    9193#endif 
    92       REAL(wp) ::   zconctmp , zdenitot  , znitrpottot 
    93       REAL(wp) ::   zlim, zconctmp2, zfact, zrivalk 
     94      REAL(wp) ::   zdenitot, znitrpottot, zlim, zfact 
     95      REAL(wp) ::   zwsbio3, zwsbio4, zwscal 
    9496      REAL(wp), DIMENSION(jpi,jpj)     ::   zsidep 
     97      REAL(wp), DIMENSION(jpi,jpj)     ::   zwork, zwork1 
    9598      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   znitrpot, zirondep 
    96 #if defined key_diatrc  
    97       REAL(wp) :: zrfact2 
    98 # if defined key_iomput 
    99      REAL(wp), DIMENSION(jpi,jpj)    ::    zw2d  
    100 # endif 
    101 #endif 
    10299      CHARACTER (len=25) :: charout 
    103100      !!--------------------------------------------------------------------- 
    104101 
    105       IF( ( jnt == 1 ) .AND. ( ln_dustfer ) )  CALL p4z_sbc( kt ) 
    106  
    107       zirondep(:,:,:) = 0.e0          ! Initialisation of variables used to compute deposition 
    108       zsidep  (:,:)   = 0.e0 
     102      IF( jnt == 1  .AND.  ln_dustfer  )  CALL p4z_sbc( kt ) 
    109103 
    110104      ! Iron and Si deposition at the surface 
     
    113107      DO jj = 1, jpj 
    114108         DO ji = 1, jpi 
    115             zirondep(ji,jj,1) = ( dustsolub * dust(ji,jj) / ( 55.85 * rmtss ) + 3.e-10 / ryyss )   & 
     109            zirondep(ji,jj,1) = ( dustsolub * dust(ji,jj) / ( 55.85 * rmtss ) + 3.e-10 * ryyss1 )   & 
    116110               &             * rfact2 / fse3t(ji,jj,1) 
    117111            zsidep  (ji,jj)   = 8.8 * 0.075 * dust(ji,jj) * rfact2 / ( fse3t(ji,jj,1) * 28.1 * rmtss ) 
     
    147141 
    148142#if ! defined key_sed 
    149       ! Initialisation of variables used to compute Sinking Speed 
    150       zsumsedsi  = 0.e0 
    151       zsumsedpo4 = 0.e0 
    152       zsumsedcal = 0.e0 
    153  
    154143      ! Loss of biogenic silicon, Caco3 organic carbon in the sediments.  
    155144      ! First, the total loss is computed. 
     
    158147      DO jj = 1, jpj 
    159148         DO ji = 1, jpi 
    160             ikt = MAX( mbathy(ji,jj)-1, 1 ) 
    161             zfact = e1t(ji,jj) * e2t(ji,jj) / rday * tmask_i(ji,jj) 
     149            ikt = mbkt(ji,jj)  
    162150# if defined key_kriest 
    163             zsumsedsi  = zsumsedsi  + zfact * trn(ji,jj,ikt,jpdsi) * wscal (ji,jj,ikt) 
    164             zsumsedpo4 = zsumsedpo4 + zfact * trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) 
     151            zwork (ji,jj) = trn(ji,jj,ikt,jpdsi) * wscal (ji,jj,ikt) 
     152            zwork1(ji,jj) = trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) 
    165153# else 
    166             zsumsedsi  = zsumsedsi  + zfact *  trn(ji,jj,ikt,jpdsi) * wsbio4(ji,jj,ikt) 
    167             zsumsedpo4 = zsumsedpo4 + zfact *( trn(ji,jj,ikt,jpgoc) * wsbio4(ji,jj,ikt)   & 
    168                &       + trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt) ) 
     154            zwork (ji,jj) = trn(ji,jj,ikt,jpdsi) * wsbio4(ji,jj,ikt) 
     155            zwork1(ji,jj) = trn(ji,jj,ikt,jpgoc) * wsbio4(ji,jj,ikt) + trn(ji,jj,ikt,jppoc) * wsbio3(ji,jj,ikt)  
    169156# endif 
    170             zsumsedcal = zsumsedcal + zfact *  trn(ji,jj,ikt,jpcal) * wscal (ji,jj,ikt) * 2.e0 
    171          END DO 
    172       END DO 
    173  
    174       IF( lk_mpp ) THEN 
    175          CALL mpp_sum( zsumsedsi  )   ! sums over the global domain 
    176          CALL mpp_sum( zsumsedcal )   ! sums over the global domain 
    177          CALL mpp_sum( zsumsedpo4 )   ! sums over the global domain 
    178       ENDIF 
    179  
     157         END DO 
     158      END DO 
     159      zsumsedsi  = glob_sum( zwork (:,:) * e1e2t(:,:) ) * rday1 
     160      zsumsedpo4 = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * rday1 
     161      DO jj = 1, jpj 
     162         DO ji = 1, jpi 
     163            ikt = mbkt(ji,jj)  
     164            zwork (ji,jj) = trn(ji,jj,ikt,jpcal) * wscal (ji,jj,ikt) 
     165         END DO 
     166      END DO 
     167      zsumsedcal = glob_sum( zwork (:,:) * e1e2t(:,:) ) * 2.0 * rday1 
    180168#endif 
    181169 
     
    188176      DO jj = 1, jpj 
    189177         DO ji = 1, jpi 
    190             ikt = MAX( mbathy(ji,jj) - 1, 1 ) 
    191 # if ! defined key_kriest 
    192             zconctmp = trn(ji,jj,ikt,jpdsi) * xstep / fse3t(ji,jj,ikt) * wscal (ji,jj,ikt)  
     178            ikt = mbkt(ji,jj) 
     179            zfact = xstep / fse3t(ji,jj,ikt) 
     180            zwsbio3 = 1._wp - zfact * wsbio3(ji,jj,ikt) 
     181            zwsbio4 = 1._wp - zfact * wsbio4(ji,jj,ikt) 
     182            zwscal  = 1._wp - zfact * wscal (ji,jj,ikt) 
     183            ! 
     184# if defined key_kriest 
     185            trn(ji,jj,ikt,jpdsi) = trn(ji,jj,ikt,jpdsi) * zwsbio4 
     186            trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) * zwsbio4 
     187            trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) * zwsbio3 
     188            trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) * zwsbio3 
    193189# else 
    194             zconctmp = trn(ji,jj,ikt,jpdsi) * xstep / fse3t(ji,jj,ikt) * wsbio4(ji,jj,ikt) 
     190            trn(ji,jj,ikt,jpdsi) = trn(ji,jj,ikt,jpdsi) * zwscal  
     191            trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) * zwsbio4 
     192            trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) * zwsbio3 
     193            trn(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) * zwsbio4 
     194            trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) * zwsbio3 
    195195# endif 
    196             trn(ji,jj,ikt,jpdsi) = trn(ji,jj,ikt,jpdsi) - zconctmp 
     196            trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) * zwscal 
     197         END DO 
     198      END DO 
    197199 
    198200#if ! defined key_sed 
    199             zrivalk = ( 1.- ( sumdepsi + rivalkinput / ryyss / 6. ) / zsumsedsi ) 
    200             trn(ji,jj,ikt,jpsil) = trn(ji,jj,ikt,jpsil) + zconctmp  * zrivalk  
    201 #endif 
    202          END DO 
    203       END DO 
    204  
     201      zrivsil =  1._wp - ( sumdepsi + rivalkinput * ryyss1 / 6. ) / zsumsedsi  
     202      zrivalk =  1._wp - ( rivalkinput * ryyss1 ) / zsumsedcal  
     203      zrivpo4 =  1._wp - ( rivpo4input * ryyss1 ) / zsumsedpo4  
    205204      DO jj = 1, jpj 
    206205         DO ji = 1, jpi 
    207             ikt = MAX( mbathy(ji,jj) - 1, 1 ) 
    208             zconctmp = trn(ji,jj,ikt,jpcal) * wscal(ji,jj,ikt) * xstep / fse3t(ji,jj,ikt) 
    209             trn(ji,jj,ikt,jpcal) = trn(ji,jj,ikt,jpcal) - zconctmp 
    210 #if ! defined key_sed 
    211             zrivalk = ( 1.- ( rivalkinput / ryyss ) / zsumsedcal ) 
    212             trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + zconctmp * zrivalk * 2.0 
    213             trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zconctmp * zrivalk  
    214 #endif 
    215          END DO 
    216       END DO 
    217  
    218       DO jj = 1, jpj 
    219          DO ji = 1, jpi 
    220             ikt = MAX( mbathy(ji,jj) - 1, 1 ) 
     206            ikt = mbkt(ji,jj) 
    221207            zfact = xstep / fse3t(ji,jj,ikt) 
    222 # if ! defined key_kriest 
    223             zconctmp  = trn(ji,jj,ikt,jpgoc) 
    224             zconctmp2 = trn(ji,jj,ikt,jppoc) 
    225             trn(ji,jj,ikt,jpgoc) = trn(ji,jj,ikt,jpgoc) - zconctmp  * wsbio4(ji,jj,ikt) * zfact 
    226             trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - zconctmp2 * wsbio3(ji,jj,ikt) * zfact 
    227 #if ! defined key_sed 
    228             trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc)    & 
    229             &      + ( zconctmp  * wsbio4(ji,jj,ikt) + zconctmp2 * wsbio3(ji,jj,ikt) ) * zfact   & 
    230             &      * ( 1.- rivpo4input / (ryyss * zsumsedpo4 ) ) 
    231 #endif 
    232             trn(ji,jj,ikt,jpbfe) = trn(ji,jj,ikt,jpbfe) - trn(ji,jj,ikt,jpbfe) * wsbio4(ji,jj,ikt) * zfact 
    233             trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * wsbio3(ji,jj,ikt) * zfact 
    234  
     208            zwsbio3 = zfact * wsbio3(ji,jj,ikt) 
     209            zwsbio4 = zfact * wsbio4(ji,jj,ikt) 
     210            zwscal  = zfact * wscal (ji,jj,ikt) 
     211            trn(ji,jj,ikt,jptal) =  trn(ji,jj,ikt,jptal) + trn(ji,jj,ikt,jpcal) * zwscal  * zrivalk * 2.0 
     212            trn(ji,jj,ikt,jpdic) =  trn(ji,jj,ikt,jpdic) + trn(ji,jj,ikt,jpcal) * zwscal  * zrivalk 
     213# if defined key_kriest 
     214            trn(ji,jj,ikt,jpsil) =  trn(ji,jj,ikt,jpsil) + trn(ji,jj,ikt,jpdsi) * zwsbio4 * zrivsil  
     215            trn(ji,jj,ikt,jpdoc) =  trn(ji,jj,ikt,jpdoc) + trn(ji,jj,ikt,jppoc) * zwsbio3 * zrivpo4  
    235216# else 
    236             zconctmp  = trn(ji,jj,ikt,jpnum) 
    237             zconctmp2 = trn(ji,jj,ikt,jppoc) 
    238             trn(ji,jj,ikt,jpnum) = trn(ji,jj,ikt,jpnum) - zconctmp  * wsbio4(ji,jj,ikt) * zfact  
    239             trn(ji,jj,ikt,jppoc) = trn(ji,jj,ikt,jppoc) - zconctmp2 * wsbio3(ji,jj,ikt) * zfact  
    240 #if ! defined key_sed 
    241             trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + ( zconctmp2 * wsbio3(ji,jj,ikt) )   
    242             &                     * zfact * ( 1.- rivpo4input / ( ryyss * zsumsedpo4 ) ) 
    243 #endif 
    244             trn(ji,jj,ikt,jpsfe) = trn(ji,jj,ikt,jpsfe) - trn(ji,jj,ikt,jpsfe) * wsbio3(ji,jj,ikt) * zfact  
     217            trn(ji,jj,ikt,jpsil) =  trn(ji,jj,ikt,jpsil) + trn(ji,jj,ikt,jpdsi) * zwscal  * zrivsil  
     218            trn(ji,jj,ikt,jpdoc) =  trn(ji,jj,ikt,jpdoc)   & 
     219            &                     + ( trn(ji,jj,ikt,jppoc) * zwsbio3 + trn(ji,jj,ikt,jpgoc) * zwsbio4 ) * zrivpo4 
    245220# endif 
    246221         END DO 
    247222      END DO 
     223# endif 
    248224 
    249225      ! Nitrogen fixation (simple parameterization). The total gain 
     
    252228      ! ------------------------------------------------------------- 
    253229 
    254       zdenitot = 0.e0 
    255       DO jk = 1, jpkm1 
    256          DO jj = 1,jpj 
    257             DO ji = 1,jpi 
    258                zdenitot = zdenitot + denitr(ji,jj,jk) * rdenit * cvol(ji,jj,jk) * xnegtr(ji,jj,jk) 
    259             END DO 
    260          END DO 
    261       END DO 
    262  
    263       IF( lk_mpp )   CALL mpp_sum( zdenitot )      ! sum over the global domain 
     230      zdenitot = glob_sum( denitr(:,:,:)  * cvol(:,:,:) * xnegtr(:,:,:) ) * rdenit 
    264231 
    265232      ! Potential nitrogen fixation dependant on temperature and iron 
     
    274241               zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 
    275242               IF( zlim <= 0.2 )   zlim = 0.01 
    276                znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) / rday )   & 
     243               znitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * rday1 )   & 
    277244# if defined key_degrad 
    278245               &                  * facvol(ji,jj,jk)   & 
     
    284251      END DO 
    285252 
    286       znitrpottot = 0.e0 
    287       DO jk = 1, jpkm1 
    288          DO jj = 1, jpj 
    289             DO ji = 1, jpi 
    290                znitrpottot = znitrpottot + znitrpot(ji,jj,jk) * cvol(ji,jj,jk) 
    291             END DO 
    292          END DO 
    293       END DO 
    294  
    295       IF( lk_mpp )   CALL mpp_sum( znitrpottot )  ! sum over the global domain 
     253      znitrpottot = glob_sum( znitrpot(:,:,:) * cvol(:,:,:) ) 
    296254 
    297255      ! Nitrogen change due to nitrogen fixation 
     
    301259         DO jj = 1, jpj 
    302260            DO ji = 1, jpi 
    303 # if ! defined key_c1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 ) 
    304 !!             zfact = znitrpot(ji,jj,jk) * zdenitot / znitrpottot 
    305261               zfact = znitrpot(ji,jj,jk) * 1.e-7 
    306 # else 
    307                zfact = znitrpot(ji,jj,jk) * 1.e-7 
    308 # endif 
    309262               trn(ji,jj,jk,jpnh4) = trn(ji,jj,jk,jpnh4) + zfact 
    310263               trn(ji,jj,jk,jpoxy) = trn(ji,jj,jk,jpoxy) + zfact   * o2nit 
     
    315268 
    316269#if defined key_diatrc 
    317       zrfact2 = 1.e+3 * rfact2r 
     270      zfact = 1.e+3 * rfact2r 
    318271#  if  ! defined key_iomput 
    319       trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1)         * zrfact2 * fse3t(:,:,1) * tmask(:,:,1) 
    320       trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * 1.e-7 * zrfact2 * fse3t(:,:,1) * tmask(:,:,1) 
    321 # else 
    322       ! surface downward net flux of iron 
    323       zw2d(:,:)   =  ( zirondep(:,:,1) + ironsed(:,:,1) * rfact2 ) * zrfact2 * fse3t(:,:,1) * tmask(:,:,1)  
    324       IF( jnt == nrdttrc ) CALL iom_put( "Irondep", zw2d ) 
    325       ! nitrogen fixation at surface 
    326       zw2d(:,:)   =  znitrpot(:,:,1) * 1.e-7 * zrfact2  * fse3t(:,:,1) * tmask(:,:,1) 
    327       IF( jnt == nrdttrc ) CALL iom_put( "Nfix" , zw2d ) 
    328 # endif 
    329 # endif 
     272      trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1)         * zfact * fse3t(:,:,1) * tmask(:,:,1) 
     273      trc2d(:,:,jp_pcs0_2d + 12) = znitrpot(:,:,1) * 1.e-7 * zfact * fse3t(:,:,1) * tmask(:,:,1) 
     274#  else 
     275      zwork (:,:)  =  ( zirondep(:,:,1) + ironsed(:,:,1) * rfact2 ) * zfact * fse3t(:,:,1) * tmask(:,:,1)  
     276      zwork1(:,:)  =  znitrpot(:,:,1) * 1.e-7                       * zfact * fse3t(:,:,1) * tmask(:,:,1) 
     277      IF( jnt == nrdttrc ) THEN 
     278         CALL iom_put( "Irondep", zwork  )  ! surface downward net flux of iron 
     279         CALL iom_put( "Nfix"   , zwork1 )  ! nitrogen fixation at surface 
     280      ENDIF 
     281#  endif 
     282#endif 
    330283      ! 
    331284       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    337290   END SUBROUTINE p4z_sed 
    338291 
    339    SUBROUTINE p4z_sbc(kt) 
     292   SUBROUTINE p4z_sbc( kt ) 
    340293 
    341294      !!---------------------------------------------------------------------- 
     
    354307 
    355308      !! * Local declarations 
    356       INTEGER ::   & 
    357          imois, imois2,       &  ! temporary integers 
    358          i15  , iman             !    "          " 
    359       REAL(wp) ::   & 
    360          zxy                     !    "         " 
    361  
     309      INTEGER :: imois, i15, iman  
     310      REAL(wp) :: zxy 
    362311 
    363312      !!--------------------------------------------------------------------- 
     
    370319      imois = nmonth + i15 - 1 
    371320      IF( imois == 0 ) imois = iman 
    372       imois2 = nmonth 
    373  
    374       ! 1. first call kt=nit000 
    375       ! ----------------------- 
    376  
    377       IF( kt == nit000 ) THEN 
    378          ! initializations 
    379          nflx1  = 0 
    380          nflx11 = 0 
    381          ! open the file 
    382          IF(lwp) THEN 
    383             WRITE(numout,*) ' ' 
    384             WRITE(numout,*) ' **** Routine p4z_sbc' 
    385          ENDIF 
    386          CALL iom_open ( 'dust.orca.nc', numdust ) 
    387       ENDIF 
    388  
    389  
    390      ! Read monthly file 
    391       ! ---------------- 
    392  
     321 
     322      ! Calendar computation 
    393323      IF( kt == nit000 .OR. imois /= nflx1 ) THEN 
    394324 
    395          ! Calendar computation 
     325         IF( kt == nit000 )  nflx1  = 0 
    396326 
    397327         ! nflx1 number of the first file record used in the simulation 
     
    399329 
    400330         nflx1 = imois 
    401          nflx2 = nflx1+1 
     331         nflx2 = nflx1 + 1 
    402332         nflx1 = MOD( nflx1, iman ) 
    403333         nflx2 = MOD( nflx2, iman ) 
    404334         IF( nflx1 == 0 )   nflx1 = iman 
    405335         IF( nflx2 == 0 )   nflx2 = iman 
    406          IF(lwp) WRITE(numout,*) 'first record file used nflx1 ',nflx1 
    407          IF(lwp) WRITE(numout,*) 'last  record file used nflx2 ',nflx2 
    408  
    409          ! Read monthly fluxes data 
    410  
    411          ! humidity 
    412          CALL iom_get ( numdust, jpdom_data, 'dust', dustmo(:,:,1), nflx1 ) 
    413          CALL iom_get ( numdust, jpdom_data, 'dust', dustmo(:,:,2), nflx2 ) 
     336         IF(lwp) WRITE(numout,*)  
     337         IF(lwp) WRITE(numout,*) ' p4z_sbc : first record file used nflx1 ',nflx1 
     338         IF(lwp) WRITE(numout,*) ' p4z_sbc : last  record file used nflx2 ',nflx2 
    414339 
    415340      ENDIF 
    416341 
    417      ! 3. at every time step interpolation of fluxes 
     342      ! 3. at every time step interpolation of fluxes 
    418343      ! --------------------------------------------- 
    419344 
    420345      zxy = FLOAT( nday + 15 - 30 * i15 ) / 30 
    421       dust(:,:) = ( (1.-zxy) * dustmo(:,:,1) + zxy * dustmo(:,:,2) ) 
    422  
    423       IF( kt == nitend ) CALL iom_close (numdust) 
     346      dust(:,:) = ( (1.-zxy) * dustmo(:,:,nflx1) + zxy * dustmo(:,:,nflx2) ) 
    424347 
    425348   END SUBROUTINE p4z_sbc 
     
    440363      !!---------------------------------------------------------------------- 
    441364 
    442       INTEGER ::   ji, jj, jk, jm 
    443       INTEGER , PARAMETER ::   jpmois = 12, jpan = 1 
     365      INTEGER :: ji, jj, jk, jm 
    444366      INTEGER :: numriv, numbath, numdep 
    445367 
     
    449371      REAL(wp) , DIMENSION (jpi,jpj)     ::   riverdoc, river, ndepo 
    450372      REAL(wp) , DIMENSION (jpi,jpj,jpk) ::   cmask 
    451       REAL(wp) , DIMENSION(jpi,jpj,12)    ::   zdustmo 
    452373 
    453374      NAMELIST/nampissed/ ln_dustfer, ln_river, ln_ndepo, ln_sedinput, sedfeinput, dustsolub 
     
    475396         IF(lwp) WRITE(numout,*) '    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' 
    476397         CALL iom_open ( 'dust.orca.nc', numdust ) 
    477          DO jm = 1, jpmois 
    478             CALL iom_get( numdust, jpdom_data, 'dust', zdustmo(:,:,jm), jm ) 
     398         DO jm = 1, jpmth 
     399            CALL iom_get( numdust, jpdom_data, 'dust', dustmo(:,:,jm), jm ) 
    479400         END DO 
    480401         CALL iom_close( numdust ) 
    481402      ELSE 
    482          zdustmo(:,:,:) = 0.e0 
     403         dustmo(:,:,:) = 0.e0 
    483404         dust(:,:) = 0.0 
    484405      ENDIF 
     
    490411         IF(lwp) WRITE(numout,*) '    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    491412         CALL iom_open ( 'river.orca.nc', numriv ) 
    492          CALL iom_get  ( numriv, jpdom_data, 'riverdic', river   (:,:), jpan ) 
    493          CALL iom_get  ( numriv, jpdom_data, 'riverdoc', riverdoc(:,:), jpan ) 
     413         CALL iom_get  ( numriv, jpdom_data, 'riverdic', river   (:,:), jpyr ) 
     414         CALL iom_get  ( numriv, jpdom_data, 'riverdoc', riverdoc(:,:), jpyr ) 
    494415         CALL iom_close( numriv ) 
    495416      ELSE 
     
    504425         IF(lwp) WRITE(numout,*) '    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    505426         CALL iom_open ( 'ndeposition.orca.nc', numdep ) 
    506          CALL iom_get  ( numdep, jpdom_data, 'ndep', ndepo(:,:), jpan ) 
     427         CALL iom_get  ( numdep, jpdom_data, 'ndep', ndepo(:,:), jpyr ) 
    507428         CALL iom_close( numdep ) 
    508429      ELSE 
     
    517438         IF(lwp) WRITE(numout,*) '       from bathy.orca.nc file ' 
    518439         CALL iom_open ( 'bathy.orca.nc', numbath ) 
    519          CALL iom_get  ( numbath, jpdom_data, 'bathy', cmask(:,:,:), jpan ) 
     440         CALL iom_get  ( numbath, jpdom_data, 'bathy', cmask(:,:,:), jpyr ) 
    520441         CALL iom_close( numbath ) 
    521442         ! 
     
    547468 
    548469 
    549       ! Number of seconds per year and per month 
    550       ryyss = nyear_len(1) * rday 
    551       rmtss = ryyss / raamo 
     470      !                                    ! Number of seconds per year and per month 
     471      ryyss  = nyear_len(1) * rday 
     472      rmtss  = ryyss / raamo 
     473      rday1  = 1. / rday 
     474      ryyss1 = 1. / ryyss 
     475      !                                    ! ocean surface cell 
     476      e1e2t(:,:) = e1t(:,:) * e2t(:,:) 
    552477 
    553478      ! total atmospheric supply of Si 
    554479      ! ------------------------------ 
    555480      sumdepsi = 0.e0 
    556       DO jm = 1, jpmois 
    557          DO jj = 2, jpjm1 
    558             DO ji = fs_2, fs_jpim1 
    559                sumdepsi = sumdepsi + zdustmo(ji,jj,jm) / (12.*rmtss) * 8.8        & 
    560                   &     * 0.075/28.1 * e1t(ji,jj) * e2t(ji,jj) * tmask(ji,jj,1) * tmask_i(ji,jj) 
    561             END DO 
    562          END DO 
    563       END DO 
    564       IF( lk_mpp )  CALL mpp_sum( sumdepsi )  ! sum over the global domain 
     481      DO jm = 1, jpmth 
     482         zcoef = 1. / ( 12. * rmtss ) * 8.8 * 0.075 / 28.1         
     483         sumdepsi = sumdepsi + glob_sum( dustmo(:,:,jm) * e1e2t(:,:) ) * zcoef 
     484      ENDDO 
    565485 
    566486      ! N/P and Si releases due to coastal rivers 
     
    568488      DO jj = 1, jpj 
    569489         DO ji = 1, jpi 
    570             zcoef = ryyss * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,1) * tmask(ji,jj,1) * tmask_i(ji,jj) 
     490            zcoef = ryyss * e1e2t(ji,jj)  * fse3t(ji,jj,1) * tmask(ji,jj,1)  
    571491            cotdep(ji,jj) =  river(ji,jj)                  *1E9 / ( 12. * zcoef + rtrn ) 
    572492            rivinp(ji,jj) = (river(ji,jj)+riverdoc(ji,jj)) *1E9 / ( 31.6* zcoef + rtrn ) 
     
    577497      CALL lbc_lnk( cotdep , 'T', 1. )  ;  CALL lbc_lnk( rivinp , 'T', 1. )  ;  CALL lbc_lnk( nitdep , 'T', 1. ) 
    578498 
    579       rivpo4input = 0.e0 
    580       rivalkinput = 0.e0 
    581       nitdepinput = 0.e0 
    582       DO jj = 2 , jpjm1 
    583          DO ji = fs_2, fs_jpim1 
    584             zcoef = cvol(ji,jj,1) * ryyss 
    585             rivpo4input = rivpo4input + rivinp(ji,jj) * zcoef 
    586             rivalkinput = rivalkinput + cotdep(ji,jj) * zcoef 
    587             nitdepinput = nitdepinput + nitdep(ji,jj) * zcoef 
    588          END DO 
    589      END DO 
    590       IF( lk_mpp ) THEN 
    591          CALL mpp_sum( rivpo4input )  ! sum over the global domain 
    592          CALL mpp_sum( rivalkinput )  ! sum over the global domain 
    593          CALL mpp_sum( nitdepinput )  ! sum over the global domain 
    594       ENDIF 
     499      rivpo4input = glob_sum( rivinp(:,:) * cvol(:,:,1) ) * ryyss 
     500      rivalkinput = glob_sum( cotdep(:,:) * cvol(:,:,1) ) * ryyss 
     501      nitdepinput = glob_sum( nitdep(:,:) * cvol(:,:,1) ) * ryyss 
    595502 
    596503 
Note: See TracChangeset for help on using the changeset viewer.