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 10425 for NEMO/trunk/src/TOP – NEMO

Changeset 10425 for NEMO/trunk/src/TOP


Ignore:
Timestamp:
2018-12-19T22:54:16+01:00 (5 years ago)
Author:
smasson
Message:

trunk: merge back dev_r10164_HPC09_ESIWACE_PREP_MERGE@10424 into the trunk

Location:
NEMO/trunk/src/TOP
Files:
36 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/TOP/C14/trcwri_c14.F90

    r10070 r10425  
    9696     
    9797      IF( iom_use("AtmC14") ) THEN 
    98          zarea = glob_sum( e1e2t(:,:) )           ! global ocean surface 
    99          ztemp = glob_sum( c14sbc(:,:) * e1e2t(:,:) ) 
     98         zarea = glob_sum( 'trcwri_c14', e1e2t(:,:) )           ! global ocean surface 
     99         ztemp = glob_sum( 'trcwri_c14', c14sbc(:,:) * e1e2t(:,:) ) 
    100100         ztemp = ( ztemp / zarea - 1._wp ) * 1000._wp 
    101101         CALL iom_put( "AtmC14" , ztemp )   ! Global atmospheric DeltaC14 [permil] 
    102102      ENDIF 
    103103      IF( iom_use("K_C14") ) THEN 
    104          ztemp = glob_sum ( exch_c14(:,:) * e1e2t(:,:) ) 
     104         ztemp = glob_sum ( 'trcwri_c14', exch_c14(:,:) * e1e2t(:,:) ) 
    105105         ztemp = rsiyea * ztemp / zarea 
    106106         CALL iom_put( "K_C14" , ztemp )   ! global mean exchange velocity for C14/C ratio [m/yr] 
    107107      ENDIF 
    108108      IF( iom_use("K_CO2") ) THEN 
    109          zarea = glob_sum( e1e2t(:,:) )           ! global ocean surface 
    110          ztemp = glob_sum ( exch_co2(:,:) * e1e2t(:,:) ) 
     109         zarea = glob_sum( 'trcwri_c14', e1e2t(:,:) )           ! global ocean surface 
     110         ztemp = glob_sum ( 'trcwri_c14', exch_co2(:,:) * e1e2t(:,:) ) 
    111111         ztemp = 360000._wp * ztemp / zarea       ! cm/h units: directly comparable with literature 
    112112         CALL iom_put( "K_CO2", ztemp )  !  global mean CO2 piston velocity [cm/hr] 
    113113      ENDIF 
    114114      IF( iom_use("C14Inv") ) THEN 
    115          ztemp = glob_sum( trn(:,:,:,jp_c14) * cvol(:,:,:) ) 
     115         ztemp = glob_sum( 'trcwri_c14', trn(:,:,:,jp_c14) * cvol(:,:,:) ) 
    116116         ztemp = atomc14 * xdicsur * ztemp 
    117117         CALL iom_put( "C14Inv", ztemp )  !  Radiocarbon ocean inventory [10^26 atoms] 
  • NEMO/trunk/src/TOP/CFC/trcsms_cfc.F90

    r10068 r10425  
    310310         &      STAT=trc_sms_cfc_alloc ) 
    311311         ! 
    312       IF( trc_sms_cfc_alloc /= 0 ) CALL ctl_warn('trc_sms_cfc_alloc : failed to allocate arrays.') 
     312      IF( trc_sms_cfc_alloc /= 0 ) CALL ctl_stop( 'STOP', 'trc_sms_cfc_alloc : failed to allocate arrays.' ) 
    313313      ! 
    314314   END FUNCTION trc_sms_cfc_alloc 
  • NEMO/trunk/src/TOP/MY_TRC/trcsms_my_trc.F90

    r10068 r10425  
    8181      trc_sms_my_trc_alloc = 0      ! set to zero if no array to be allocated 
    8282      ! 
    83       IF( trc_sms_my_trc_alloc /= 0 ) CALL ctl_warn('trc_sms_my_trc_alloc : failed to allocate arrays') 
     83      IF( trc_sms_my_trc_alloc /= 0 ) CALL ctl_stop( 'STOP', 'trc_sms_my_trc_alloc : failed to allocate arrays' ) 
    8484      ! 
    8585   END FUNCTION trc_sms_my_trc_alloc 
  • NEMO/trunk/src/TOP/PISCES/P2Z/p2zbio.F90

    r10068 r10425  
    341341      ! 
    342342      IF( lk_iomput ) THEN 
    343          CALL lbc_lnk( zw2d(:,:,:),'T', 1. ) 
    344          CALL lbc_lnk_multi( zw3d(:,:,:,1),'T', 1., zw3d(:,:,:,2),'T', 1., zw3d(:,:,:,3),'T', 1. ) 
     343         CALL lbc_lnk( 'p2zbio', zw2d(:,:,:),'T', 1. ) 
     344         CALL lbc_lnk_multi( 'p2zbio', zw3d(:,:,:,1),'T', 1., zw3d(:,:,:,2),'T', 1., zw3d(:,:,:,3),'T', 1. ) 
    345345         ! Save diagnostics 
    346346         CALL iom_put( "TNO3PHY", zw2d(:,:,1) ) 
  • NEMO/trunk/src/TOP/PISCES/P2Z/p2zexp.F90

    r10068 r10425  
    113113      END DO 
    114114 
    115       CALL lbc_lnk( sedpocn, 'T', 1. ) 
     115      CALL lbc_lnk( 'p2zexp', sedpocn, 'T', 1. ) 
    116116  
    117117      ! Oa & Ek: diagnostics depending on jpdia2d !          left as example 
     
    229229         END DO 
    230230      END DO 
    231       CALL lbc_lnk( cmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
    232       areacot = glob_sum( e1e2t(:,:) * cmask(:,:) ) 
     231      CALL lbc_lnk( 'p2zexp', cmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
     232      areacot = glob_sum( 'p2zexp', e1e2t(:,:) * cmask(:,:) ) 
    233233      ! 
    234234      IF( ln_rsttr ) THEN 
     
    248248      ALLOCATE( cmask(jpi,jpj) , dminl(jpi,jpj) , dmin3(jpi,jpj,jpk), & 
    249249         &      sedpocb(jpi,jpj) , sedpocn(jpi,jpj),   STAT=p2z_exp_alloc ) 
    250       IF( p2z_exp_alloc /= 0 ) CALL ctl_warn('p2z_exp_alloc : failed to allocate arrays.') 
     250      IF( p2z_exp_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p2z_exp_alloc : failed to allocate arrays.' ) 
    251251      ! 
    252252   END FUNCTION p2z_exp_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zche.F90

    r10222 r10425  
    823823      p4z_che_alloc = MAXVAL( ierr ) 
    824824      ! 
    825       IF( p4z_che_alloc /= 0 )   CALL ctl_warn('p4z_che_alloc : failed to allocate arrays.') 
     825      IF( p4z_che_alloc /= 0 )   CALL ctl_stop( 'STOP', 'p4z_che_alloc : failed to allocate arrays.' ) 
    826826      ! 
    827827   END FUNCTION p4z_che_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zflx.F90

    r10068 r10425  
    172172      END DO 
    173173 
    174       t_oce_co2_flx     = glob_sum( oce_co2(:,:) )                    !  Total Flux of Carbon 
     174      IF( iom_use("tcflx") .OR. iom_use("tcflxcum") .OR. kt == nitrst   & 
     175         &                 .OR. (ln_check_mass .AND. kt == nitend) )    & 
     176         t_oce_co2_flx  = glob_sum( 'p4zflx', oce_co2(:,:) )                    !  Total Flux of Carbon 
    175177      t_oce_co2_flx_cum = t_oce_co2_flx_cum + t_oce_co2_flx       !  Cumulative Total Flux of Carbon 
    176 !      t_atm_co2_flx     = glob_sum( satmco2(:,:) * e1e2t(:,:) )       ! Total atmospheric pCO2 
     178!      t_atm_co2_flx     = glob_sum( 'p4zflx', satmco2(:,:) * e1e2t(:,:) )       ! Total atmospheric pCO2 
    177179      t_atm_co2_flx     =  atcco2      ! Total atmospheric pCO2 
    178180  
     
    205207           CALL iom_put( "Dpo2"  , zw2d ) 
    206208         ENDIF 
    207          IF( iom_use( "tcflx" ) )  CALL iom_put( "tcflx"    , t_oce_co2_flx * rfact2r )   ! molC/s 
    208          CALL iom_put( "tcflxcum" , t_oce_co2_flx_cum )      ! molC 
     209         CALL iom_put( "tcflx"    , t_oce_co2_flx * rfact2r )   ! molC/s 
     210         CALL iom_put( "tcflxcum" , t_oce_co2_flx_cum       )   ! molC 
    209211         ! 
    210212         DEALLOCATE( zw2d ) 
     
    376378      ALLOCATE( satmco2(jpi,jpj), patm(jpi,jpj), STAT=p4z_flx_alloc ) 
    377379      ! 
    378       IF( p4z_flx_alloc /= 0 )   CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays') 
     380      IF( p4z_flx_alloc /= 0 )   CALL ctl_stop( 'STOP', 'p4z_flx_alloc : failed to allocate arrays' ) 
    379381      ! 
    380382   END FUNCTION p4z_flx_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zlim.F90

    r10227 r10425  
    293293      !!                     ***  ROUTINE p5z_lim_alloc  *** 
    294294      !!---------------------------------------------------------------------- 
    295       USE lib_mpp , ONLY: ctl_warn 
     295      USE lib_mpp , ONLY: ctl_stop 
    296296      !!---------------------------------------------------------------------- 
    297297 
     
    306306         &      xlimsi  (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 
    307307      ! 
    308       IF( p4z_lim_alloc /= 0 ) CALL ctl_warn('p4z_lim_alloc : failed to allocate arrays.') 
     308      IF( p4z_lim_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_lim_alloc : failed to allocate arrays.' ) 
    309309      ! 
    310310   END FUNCTION p4z_lim_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zopt.F90

    r10362 r10425  
    463463                ekg(jpi,jpj,jpk), STAT= p4z_opt_alloc  )  
    464464      ! 
    465       IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 
     465      IF( p4z_opt_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_opt_alloc : failed to allocate arrays.' ) 
    466466      ! 
    467467   END FUNCTION p4z_opt_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zprod.F90

    r10401 r10425  
    340340    ! Total primary production per year 
    341341    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
    342          & tpp = glob_sum( ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
     342         & tpp = glob_sum( 'p4zprod', ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
    343343 
    344344    IF( lk_iomput ) THEN 
     
    529529      ALLOCATE( quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc ) 
    530530      ! 
    531       IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.') 
     531      IF( p4z_prod_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_prod_alloc : failed to allocate arrays.' ) 
    532532      ! 
    533533   END FUNCTION p4z_prod_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zrem.F90

    r10362 r10425  
    363363      ALLOCATE( denitr(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 
    364364      ! 
    365       IF( p4z_rem_alloc /= 0 )   CALL ctl_warn('p4z_rem_alloc: failed to allocate arrays') 
     365      IF( p4z_rem_alloc /= 0 )   CALL ctl_stop( 'STOP', 'p4z_rem_alloc: failed to allocate arrays' ) 
    366366      ! 
    367367   END FUNCTION p4z_rem_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zsbc.F90

    r10416 r10425  
    368368               ztimes_riv = 1._wp / REAL(ntimes_riv, wp)  
    369369               DO jm = 1, ntimes_riv 
    370                   rivinput(ifpr) = rivinput(ifpr) + glob_sum( zriver(:,:,jm) * tmask(:,:,1) * ztimes_riv )  
     370                  rivinput(ifpr) = rivinput(ifpr) + glob_sum( 'p4zsbc', zriver(:,:,jm) * tmask(:,:,1) * ztimes_riv )  
    371371               END DO 
    372372               DEALLOCATE( zriver) 
     
    449449         END DO 
    450450         ! 
    451          CALL lbc_lnk( zcmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
     451         CALL lbc_lnk( 'p4zsbc', zcmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
    452452         ! 
    453453         DO jk = 1, jpk 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zsed.F90

    r10416 r10425  
    504504      ALLOCATE( nitrpot(jpi,jpj,jpk), sdenit(jpi,jpj), STAT=p4z_sed_alloc ) 
    505505      ! 
    506       IF( p4z_sed_alloc /= 0 )   CALL ctl_warn('p4z_sed_alloc: failed to allocate arrays') 
     506      IF( p4z_sed_alloc /= 0 )   CALL ctl_stop( 'STOP', 'p4z_sed_alloc: failed to allocate arrays' ) 
    507507      ! 
    508508   END FUNCTION p4z_sed_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zsink.F90

    r10416 r10425  
    127127     ! Total carbon export per year 
    128128     IF( iom_use( "tcexp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
    129         &   t_oce_co2_exp = glob_sum( ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 
     129        &   t_oce_co2_exp = glob_sum( 'p4zsink', ( sinking(:,:,ik100) + sinking2(:,:,ik100) ) * e1e2t(:,:) * tmask(:,:,1) ) 
    130130     ! 
    131131     IF( lk_iomput ) THEN 
     
    220220      ! 
    221221      p4z_sink_alloc = MAXVAL( ierr ) 
    222       IF( p4z_sink_alloc /= 0 ) CALL ctl_warn('p4z_sink_alloc : failed to allocate arrays.') 
     222      IF( p4z_sink_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_sink_alloc : failed to allocate arrays.' ) 
    223223      ! 
    224224   END FUNCTION p4z_sink_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p4zsms.F90

    r10416 r10425  
    361361            !                                                ! --------------------------- ! 
    362362            ! set total alkalinity, phosphate, nitrate & silicate 
    363             zarea          = 1._wp / glob_sum( cvol(:,:,:) ) * 1e6               
    364  
    365             zalksumn = glob_sum( trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    366             zpo4sumn = glob_sum( trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    367             zno3sumn = glob_sum( trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    368             zsilsumn = glob_sum( trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     363            zarea          = 1._wp / glob_sum( 'p4zsms', cvol(:,:,:) ) * 1e6               
     364 
     365            zalksumn = glob_sum( 'p4zsms', trn(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
     366            zpo4sumn = glob_sum( 'p4zsms', trn(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
     367            zno3sumn = glob_sum( 'p4zsms', trn(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
     368            zsilsumn = glob_sum( 'p4zsms', trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
    369369  
    370370            IF(lwp) WRITE(numout,*) '       TALKN mean : ', zalksumn 
     
    382382            ! 
    383383            IF( .NOT. ln_top_euler ) THEN 
    384                zalksumb = glob_sum( trb(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
    385                zpo4sumb = glob_sum( trb(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
    386                zno3sumb = glob_sum( trb(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
    387                zsilsumb = glob_sum( trb(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
     384               zalksumb = glob_sum( 'p4zsms', trb(:,:,:,jptal) * cvol(:,:,:)  ) * zarea 
     385               zpo4sumb = glob_sum( 'p4zsms', trb(:,:,:,jppo4) * cvol(:,:,:)  ) * zarea * po4r 
     386               zno3sumb = glob_sum( 'p4zsms', trb(:,:,:,jpno3) * cvol(:,:,:)  ) * zarea * rno3 
     387               zsilsumb = glob_sum( 'p4zsms', trb(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
    388388  
    389389               IF(lwp) WRITE(numout,*) ' ' 
     
    449449        ENDIF 
    450450        ! 
    451         no3budget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
     451        no3budget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )   
    452452        no3budget = no3budget / areatot 
    453453        CALL iom_put( "pno3tot", no3budget ) 
     
    467467        ENDIF 
    468468        ! 
    469         po4budget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
     469        po4budget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )   
    470470        po4budget = po4budget / areatot 
    471471        CALL iom_put( "ppo4tot", po4budget ) 
     
    475475         zwork(:,:,:) =  trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) + trn(:,:,:,jpdsi)  
    476476         ! 
    477          silbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
     477         silbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )   
    478478         silbudget = silbudget / areatot 
    479479         CALL iom_put( "psiltot", silbudget ) 
     
    483483         zwork(:,:,:) =  trn(:,:,:,jpno3) * rno3 + trn(:,:,:,jptal) + trn(:,:,:,jpcal) * 2.               
    484484         ! 
    485          alkbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )         ! 
     485         alkbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )         ! 
    486486         alkbudget = alkbudget / areatot 
    487487         CALL iom_put( "palktot", alkbudget ) 
     
    493493            &         + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) )  * ferat3     
    494494         ! 
    495          ferbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
     495         ferbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )   
    496496         ferbudget = ferbudget / areatot 
    497497         CALL iom_put( "pfertot", ferbudget ) 
     
    502502      ! -------------------------------------------------------------------------------- 
    503503      IF( iom_use( "tnfix" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
    504          znitrpottot  = glob_sum ( nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 
     504         znitrpottot  = glob_sum ( 'p4zsms', nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 
    505505         CALL iom_put( "tnfix"  , znitrpottot * xfact3 )  ! Global  nitrogen fixation molC/l  to molN/m3  
    506506      ENDIF 
    507507      ! 
    508508      IF( iom_use( "tdenit" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
    509          zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
    510          zsdenittot = glob_sum ( sdenit(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 
     509         zrdenittot = glob_sum ( 'p4zsms', denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
     510         zsdenittot = glob_sum ( 'p4zsms', sdenit(:,:) * e1e2t(:,:) * tmask(:,:,1) ) 
    511511         CALL iom_put( "tdenit" , ( zrdenittot + zsdenittot ) * xfact3 )  ! Total denitrification molC/l to molN/m3  
    512512      ENDIF 
    513513      ! 
    514514      IF( ln_check_mass .AND. kt == nitend ) THEN   ! Compute the budget of NO3, ALK, Si, Fer 
    515          t_atm_co2_flx  = t_atm_co2_flx / glob_sum( e1e2t(:,:) ) 
     515         t_atm_co2_flx  = t_atm_co2_flx / glob_sum( 'p4zsms', e1e2t(:,:) ) 
    516516         t_oce_co2_flx  = t_oce_co2_flx         * xfact1 * (-1 ) 
    517517         tpp            = tpp           * 1000. * xfact1 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p5zlim.F90

    r10362 r10425  
    535535      !!                     ***  ROUTINE p5z_lim_alloc  *** 
    536536      !!---------------------------------------------------------------------- 
    537       USE lib_mpp , ONLY: ctl_warn 
     537      USE lib_mpp , ONLY: ctl_stop 
    538538      INTEGER ::   ierr(2)        ! Local variables 
    539539      !!---------------------------------------------------------------------- 
     
    559559      p5z_lim_alloc = MAXVAL( ierr ) 
    560560      ! 
    561       IF( p5z_lim_alloc /= 0 ) CALL ctl_warn('p5z_lim_alloc : failed to allocate arrays.') 
     561      IF( p5z_lim_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_lim_alloc : failed to allocate arrays.' ) 
    562562      ! 
    563563   END FUNCTION p5z_lim_alloc 
  • NEMO/trunk/src/TOP/PISCES/P4Z/p5zprod.F90

    r10362 r10425  
    462462    ! Total primary production per year 
    463463    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
    464       & tpp = glob_sum( ( zprorcan(:,:,:) + zprorcad(:,:,:) + zprorcap(:,:,:) ) * cvol(:,:,:) ) 
     464      & tpp = glob_sum( 'p5zprod', ( zprorcan(:,:,:) + zprorcad(:,:,:) + zprorcap(:,:,:) ) * cvol(:,:,:) ) 
    465465 
    466466    IF( lk_iomput ) THEN 
     
    624624      ALLOCATE( zdaylen(jpi,jpj), STAT = p5z_prod_alloc ) 
    625625      ! 
    626       IF( p5z_prod_alloc /= 0 ) CALL ctl_warn('p5z_prod_alloc : failed to allocate arrays.') 
     626      IF( p5z_prod_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_prod_alloc : failed to allocate arrays.' ) 
    627627      ! 
    628628   END FUNCTION p5z_prod_alloc 
  • NEMO/trunk/src/TOP/PISCES/SED/sed.F90

    r10222 r10425  
    154154      !!                    *** ROUTINE sed_alloc *** 
    155155      !!------------------------------------------------------------------- 
    156       USE lib_mpp, ONLY: ctl_warn 
     156      USE lib_mpp, ONLY: ctl_stop 
    157157      !!------------------------------------------------------------------- 
    158158      ! 
     
    166166         &      mol_wgt(jpsol),                                           STAT=sed_alloc ) 
    167167 
    168       IF( sed_alloc /= 0 )   CALL ctl_warn('sed_alloc: failed to allocate arrays') 
     168      IF( sed_alloc /= 0 )   CALL ctl_stop( 'STOP', 'sed_alloc: failed to allocate arrays' ) 
    169169      ! 
    170170   END FUNCTION sed_alloc 
  • NEMO/trunk/src/TOP/PISCES/SED/sed_oce.F90

    r10225 r10425  
    2525      !!                    *** ROUTINE sed_alloc *** 
    2626      !!------------------------------------------------------------------- 
    27       USE lib_mpp, ONLY: ctl_warn 
     27      USE lib_mpp, ONLY: ctl_stop 
    2828      !!------------------------------------------------------------------- 
    2929      ! 
    3030      ALLOCATE( profsed(jpksed) , profsedw(jpksed) , STAT=sed_oce_alloc ) 
    3131 
    32       IF( sed_oce_alloc /= 0 )   CALL ctl_warn('sed_oce_alloc: failed to allocate arrays') 
     32      IF( sed_oce_alloc /= 0 )   CALL ctl_stop( 'STOP', 'sed_oce_alloc: failed to allocate arrays' ) 
    3333      ! 
    3434   END FUNCTION sed_oce_alloc 
  • NEMO/trunk/src/TOP/PISCES/SED/sedadv.F90

    r10222 r10425  
    436436      &         ckpor(jpksed) ,           STAT = sed_adv_alloc ) 
    437437      ! 
    438       IF( sed_adv_alloc /= 0 ) CALL ctl_warn('sed_adv_alloc : failed to allocate arrays.') 
     438      IF( sed_adv_alloc /= 0 ) CALL ctl_stop( 'STOP', 'sed_adv_alloc : failed to allocate arrays.' ) 
    439439      ! 
    440440   END FUNCTION sed_adv_alloc 
  • NEMO/trunk/src/TOP/PISCES/SED/sedrst.F90

    r10333 r10425  
    7878         IF(lwp) WRITE(numsed,*) & 
    7979             '             open sed restart.output NetCDF file: ',TRIM(clpath)//clname 
    80          CALL iom_open( TRIM(clpath)//TRIM(clname), numrsw, ldwrt = .TRUE., kiolib = jprstlib, kdlev = jpksed ) 
     80         CALL iom_open( TRIM(clpath)//TRIM(clname), numrsw, ldwrt = .TRUE., kdlev = jpksed ) 
    8181         lrst_sed = .TRUE. 
    8282      ENDIF 
     
    105105      CHARACTER(len = 20) ::   cltra 
    106106      CHARACTER(LEN=20)   ::   name1 
    107       INTEGER             ::   jlibalt = jprstlib 
    108107      LOGICAL             ::   llok 
    109108      !-------------------------------------------------------------------- 
     
    338337      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    339338      ! 
    340       INTEGER  ::  jlibalt = jprstlib 
    341339      LOGICAL  ::  llok 
    342340      REAL(wp) ::  zkt, zrdttrc1 
     
    353351 
    354352         IF( ln_rst_sed ) THEN 
    355             CALL iom_open( TRIM(cn_sedrst_indir)//'/'//cn_sedrst_in, numrsr, kiolib = jlibalt ) 
     353            CALL iom_open( TRIM(cn_sedrst_indir)//'/'//cn_sedrst_in, numrsr ) 
    356354            CALL iom_get ( numrsr, 'kt', zkt )   ! last time-step of previous run 
    357355 
  • NEMO/trunk/src/TOP/PISCES/sms_pisces.F90

    r10416 r10425  
    131131      !!        *** ROUTINE sms_pisces_alloc *** 
    132132      !!---------------------------------------------------------------------- 
    133       USE lib_mpp , ONLY: ctl_warn 
     133      USE lib_mpp , ONLY: ctl_stop 
    134134      INTEGER ::   ierr(10)        ! Local variables 
    135135      !!---------------------------------------------------------------------- 
     
    186186      sms_pisces_alloc = MAXVAL( ierr ) 
    187187      ! 
    188       IF( sms_pisces_alloc /= 0 )   CALL ctl_warn('sms_pisces_alloc: failed to allocate arrays')  
     188      IF( sms_pisces_alloc /= 0 )   CALL ctl_stop( 'STOP', 'sms_pisces_alloc: failed to allocate arrays' )  
    189189      ! 
    190190   END FUNCTION sms_pisces_alloc 
  • NEMO/trunk/src/TOP/PISCES/trcini_pisces.F90

    r10416 r10425  
    118118      ierr = ierr +  p4z_rem_alloc() 
    119119      ! 
    120       IF( lk_mpp    )   CALL mpp_sum( ierr ) 
     120      CALL mpp_sum( 'trcini_pisces', ierr ) 
    121121      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' ) 
    122122      ! 
     
    311311      ierr = ierr + p2z_exp_alloc() 
    312312      ! 
    313       IF( lk_mpp    )   CALL mpp_sum( ierr ) 
     313      CALL mpp_sum( 'trcini_pisces', ierr ) 
    314314      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'p2z_ini: unable to allocate LOBSTER arrays' ) 
    315315 
  • NEMO/trunk/src/TOP/TRP/trcnxt.F90

    r10097 r10425  
    9797#endif 
    9898      ! Update after tracer on domain lateral boundaries 
    99       CALL lbc_lnk( tra(:,:,:,:), 'T', 1. )    
     99      CALL lbc_lnk( 'trcnxt', tra(:,:,:,:), 'T', 1. )    
    100100 
    101101      IF( ln_bdy )  CALL trc_bdy( kt ) 
     
    164164         ENDIF 
    165165         ! 
    166          CALL lbc_lnk_multi( trb(:,:,:,:), 'T', 1._wp, trn(:,:,:,:), 'T', 1._wp, tra(:,:,:,:), 'T', 1._wp ) 
     166         CALL lbc_lnk_multi( 'trcnxt', trb(:,:,:,:), 'T', 1._wp, trn(:,:,:,:), 'T', 1._wp, tra(:,:,:,:), 'T', 1._wp ) 
    167167      ENDIF 
    168168      ! 
  • NEMO/trunk/src/TOP/TRP/trcrad.F90

    r10068 r10425  
    1919   USE trdtra 
    2020   USE prtctl_trc          ! Print control for debbuging 
     21   USE lib_fortran 
    2122 
    2223   IMPLICIT NONE 
     
    2728 
    2829   LOGICAL , PUBLIC ::   ln_trcrad           !: flag to artificially correct negative concentrations 
     30   REAL(wp), DIMENSION(:,:), ALLOCATABLE::   gainmass 
    2931 
    3032   !!---------------------------------------------------------------------- 
     
    104106         ENDIF 
    105107      ENDIF 
     108      ! 
     109      ALLOCATE( gainmass(jptra,2) ) 
     110      gainmass(:,:) = 0. 
    106111      ! 
    107112   END SUBROUTINE trc_rad_ini 
     
    129134      CHARACTER( len = 1), OPTIONAL          , INTENT(in   ) ::   cpreserv           ! flag to preserve content or not 
    130135      ! 
    131       INTEGER ::   ji, jj, jk, jn     ! dummy loop indices 
    132       LOGICAL ::   lldebug = .FALSE.           ! local logical 
    133       REAL(wp)::   ztrcorb, ztrmasb, zs2rdt    ! temporary scalars 
    134       REAL(wp)::   zcoef  , ztrcorn, ztrmasn   !    -         - 
    135       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrtrdb, ztrtrdn   ! workspace arrays 
    136       !!---------------------------------------------------------------------- 
    137       ! 
    138       IF( l_trdtrc )   ALLOCATE( ztrtrdb(jpi,jpj,jpk), ztrtrdn(jpi,jpj,jpk) ) 
     136      INTEGER ::   ji, ji2, jj, jj2, jk, jn     ! dummy loop indices 
     137      INTEGER ::   icnt 
     138      LOGICAL ::   lldebug = .FALSE.            ! local logical 
     139      REAL(wp)::   zcoef, zs2rdt, ztotmass 
     140      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrneg, ztrpos 
     141      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrtrd   ! workspace arrays 
     142      !!---------------------------------------------------------------------- 
     143      ! 
     144      IF( l_trdtrc )   ALLOCATE( ztrtrd(jpi,jpj,jpk) ) 
     145      zs2rdt = 1. / ( 2. * rdt * REAL( nn_dttrc, wp ) ) 
    139146      ! 
    140147      IF( PRESENT( cpreserv )  ) THEN     !==  total tracer concentration is preserved  ==! 
    141148         ! 
    142          DO jn = jp_sms0, jp_sms1 
    143             ! 
    144             ztrcorb = 0._wp   ;   ztrmasb = 0._wp 
    145             ztrcorn = 0._wp   ;   ztrmasn = 0._wp 
    146             ! 
    147             IF( l_trdtrc ) THEN 
    148                ztrtrdb(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
    149                ztrtrdn(:,:,:) = ptrn(:,:,:,jn)                        ! save input trn for trend computation 
    150             ENDIF 
    151             !                                                         ! sum over the global domain  
    152             ztrcorb = glob_sum( MIN( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:) ) 
    153             ztrcorn = glob_sum( MIN( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:) ) 
    154             ! 
    155             ztrmasb = glob_sum( MAX( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:) ) 
    156             ztrmasn = glob_sum( MAX( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:) ) 
    157             ! 
    158             IF( ztrcorb /= 0 ) THEN 
    159                zcoef = 1. + ztrcorb / ztrmasb 
    160                DO jk = 1, jpkm1 
    161                   ptrb(:,:,jk,jn) = MAX( 0., ptrb(:,:,jk,jn) ) 
    162                   ptrb(:,:,jk,jn) = ptrb(:,:,jk,jn) * zcoef * tmask(:,:,jk) 
    163                END DO 
    164             ENDIF 
    165             ! 
    166             IF( ztrcorn /= 0 ) THEN 
    167                zcoef = 1. + ztrcorn / ztrmasn 
    168                DO jk = 1, jpkm1 
    169                   ptrn(:,:,jk,jn) = MAX( 0., ptrn(:,:,jk,jn) ) 
    170                   ptrn(:,:,jk,jn) = ptrn(:,:,jk,jn) * zcoef * tmask(:,:,jk) 
    171                END DO 
    172             ENDIF 
    173             ! 
    174             IF( l_trdtrc ) THEN 
    175                ! 
    176                zs2rdt = 1. / ( 2. * rdt ) 
    177                ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 
    178                ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt  
    179                CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb )       ! Asselin-like trend handling 
    180                CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn )       ! standard     trend handling 
    181               ! 
    182             ENDIF 
    183             ! 
    184          END DO 
    185          ! 
    186       ELSE                                !==  total CFC content is NOT strictly preserved  ==! 
    187          ! 
    188          DO jn = jp_sms0, jp_sms1   
    189             ! 
    190             IF( l_trdtrc ) THEN 
    191                ztrtrdb(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
    192                ztrtrdn(:,:,:) = ptrn(:,:,:,jn)                        ! save input trn for trend computation 
    193             ENDIF 
     149         ALLOCATE( ztrneg(1:jpi,1:jpj,jp_sms0:jp_sms1), ztrpos(1:jpi,1:jpj,jp_sms0:jp_sms1) ) 
     150 
     151         DO jn = jp_sms0, jp_sms1 
     152            ztrneg(:,:,jn) = SUM( MIN( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:), dim = 3 )   ! sum of the negative values 
     153            ztrpos(:,:,jn) = SUM( MAX( 0., ptrb(:,:,:,jn) ) * cvol(:,:,:), dim = 3 )   ! sum of the positive values 
     154         END DO 
     155         CALL sum3x3( ztrneg ) 
     156         CALL sum3x3( ztrpos ) 
     157          
     158         DO jn = jp_sms0, jp_sms1 
     159            ! 
     160            IF( l_trdtrc )   ztrtrd(:,:,:) = ptrb(:,:,:,jn)                            ! save input trb for trend computation            
    194161            ! 
    195162            DO jk = 1, jpkm1 
    196163               DO jj = 1, jpj 
    197164                  DO ji = 1, jpi 
    198                      ptrn(ji,jj,jk,jn) = MAX( 0. , ptrn(ji,jj,jk,jn) ) 
    199                      ptrb(ji,jj,jk,jn) = MAX( 0. , ptrb(ji,jj,jk,jn) ) 
     165                     IF( ztrneg(ji,jj,jn) /= 0. ) THEN                                 ! if negative values over the 3x3 box 
     166                        ! 
     167                        ptrb(ji,jj,jk,jn) = ptrb(ji,jj,jk,jn) * tmask(ji,jj,jk)   ! really needed? 
     168                        IF( ptrb(ji,jj,jk,jn) < 0. ) ptrb(ji,jj,jk,jn) = 0.       ! supress negative values 
     169                        IF( ptrb(ji,jj,jk,jn) > 0. ) THEN                         ! use positive values to compensate mass gain 
     170                           zcoef = 1. + ztrneg(ji,jj,jn) / ztrpos(ji,jj,jn)       ! ztrpos > 0 as ptrb > 0 
     171                           ptrb(ji,jj,jk,jn) = ptrb(ji,jj,jk,jn) * zcoef 
     172                           IF( zcoef < 0. ) THEN                                  ! if the compensation exceed the positive value 
     173                              gainmass(jn,1) = gainmass(jn,1) - ptrb(ji,jj,jk,jn) * cvol(ji,jj,jk)   ! we are adding mass... 
     174                              ptrb(ji,jj,jk,jn) = 0.                              ! limit the compensation to keep positive value 
     175                           ENDIF 
     176                        ENDIF 
     177                        ! 
     178                     ENDIF 
    200179                  END DO 
    201180               END DO 
     
    203182            ! 
    204183            IF( l_trdtrc ) THEN 
    205                ! 
    206                zs2rdt = 1. / ( 2. * rdt * REAL( nn_dttrc, wp ) ) 
    207                ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 
    208                ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt  
    209                CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrdb )       ! Asselin-like trend handling 
    210                CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrdn )       ! standard     trend handling 
    211               ! 
     184               ztrtrd(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrd(:,:,:) ) * zs2rdt 
     185               CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrd )       ! Asselin-like trend handling 
     186            ENDIF 
     187            ! 
     188         END DO 
     189  
     190         IF( kt == nitend ) THEN 
     191            CALL mpp_sum( 'trcrad', gainmass(:,1) ) 
     192            DO jn = jp_sms0, jp_sms1 
     193               IF( gainmass(jn,1) > 0. ) THEN 
     194                  ztotmass = glob_sum( 'trcrad', ptrb(:,:,:,jn) * cvol(:,:,:) ) 
     195                  IF(lwp) WRITE(numout, '(a, i2, a, D23.16, a, D23.16)') 'trcrad ptrb, traceur ', jn  & 
     196                     &        , ' total mass : ', ztotmass, ', mass gain : ',  gainmass(jn,1) 
     197               END IF 
     198            END DO 
     199         ENDIF 
     200 
     201         DO jn = jp_sms0, jp_sms1 
     202            ztrneg(:,:,jn) = SUM( MIN( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:), dim = 3 )   ! sum of the negative values 
     203            ztrpos(:,:,jn) = SUM( MAX( 0., ptrn(:,:,:,jn) ) * cvol(:,:,:), dim = 3 )   ! sum of the positive values 
     204         END DO 
     205         CALL sum3x3( ztrneg ) 
     206         CALL sum3x3( ztrpos ) 
     207          
     208         DO jn = jp_sms0, jp_sms1 
     209            ! 
     210            IF( l_trdtrc )   ztrtrd(:,:,:) = ptrn(:,:,:,jn)                            ! save input trb for trend computation 
     211            ! 
     212            DO jk = 1, jpkm1 
     213               DO jj = 1, jpj 
     214                  DO ji = 1, jpi 
     215                     IF( ztrneg(ji,jj,jn) /= 0. ) THEN                                 ! if negative values over the 3x3 box 
     216                        ! 
     217                        ptrn(ji,jj,jk,jn) = ptrn(ji,jj,jk,jn) * tmask(ji,jj,jk)   ! really needed? 
     218                        IF( ptrn(ji,jj,jk,jn) < 0. ) ptrn(ji,jj,jk,jn) = 0.       ! supress negative values 
     219                        IF( ptrn(ji,jj,jk,jn) > 0. ) THEN                         ! use positive values to compensate mass gain 
     220                           zcoef = 1. + ztrneg(ji,jj,jn) / ztrpos(ji,jj,jn)       ! ztrpos > 0 as ptrb > 0 
     221                           ptrn(ji,jj,jk,jn) = ptrn(ji,jj,jk,jn) * zcoef 
     222                           IF( zcoef < 0. ) THEN                                  ! if the compensation exceed the positive value 
     223                              gainmass(jn,2) = gainmass(jn,2) - ptrn(ji,jj,jk,jn) * cvol(ji,jj,jk)   ! we are adding mass... 
     224                              ptrn(ji,jj,jk,jn) = 0.                              ! limit the compensation to keep positive value 
     225                           ENDIF 
     226                        ENDIF 
     227                        ! 
     228                     ENDIF 
     229                  END DO 
     230               END DO 
     231            END DO 
     232            ! 
     233            IF( l_trdtrc ) THEN 
     234               ztrtrd(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrd(:,:,:) ) * zs2rdt 
     235               CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrd )       ! standard     trend handling 
     236            ENDIF 
     237            ! 
     238         END DO 
     239  
     240         IF( kt == nitend ) THEN 
     241            CALL mpp_sum( 'trcrad', gainmass(:,2) ) 
     242            DO jn = jp_sms0, jp_sms1 
     243               IF( gainmass(jn,2) > 0. ) THEN 
     244                  ztotmass = glob_sum( 'trcrad', ptrn(:,:,:,jn) * cvol(:,:,:) ) 
     245                  WRITE(numout, '(a, i2, a, D23.16, a, D23.16)') 'trcrad ptrn, traceur ', jn  & 
     246                     &        , ' total mass : ', ztotmass, ', mass gain : ',  gainmass(jn,1) 
     247               END IF 
     248            END DO 
     249         ENDIF 
     250 
     251         DEALLOCATE( ztrneg, ztrpos ) 
     252         ! 
     253      ELSE                                !==  total CFC content is NOT strictly preserved  ==! 
     254         ! 
     255         DO jn = jp_sms0, jp_sms1   
     256            ! 
     257            IF( l_trdtrc )   ztrtrd(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
     258            ! 
     259            WHERE( ptrb(:,:,:,jn) < 0. )   ptrb(:,:,:,jn) = 0. 
     260            ! 
     261            IF( l_trdtrc ) THEN 
     262               ztrtrd(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrd(:,:,:) ) * zs2rdt 
     263               CALL trd_tra( kt, 'TRC', jn, jptra_radb, ztrtrd )       ! Asselin-like trend handling 
     264            ENDIF 
     265            ! 
     266            IF( l_trdtrc )   ztrtrd(:,:,:) = ptrn(:,:,:,jn)                        ! save input trn for trend computation 
     267            ! 
     268            WHERE( ptrn(:,:,:,jn) < 0. )   ptrn(:,:,:,jn) = 0. 
     269            ! 
     270            IF( l_trdtrc ) THEN 
     271               ztrtrd(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrd(:,:,:) ) * zs2rdt 
     272               CALL trd_tra( kt, 'TRC', jn, jptra_radn, ztrtrd )       ! standard     trend handling 
    212273            ENDIF 
    213274            ! 
     
    216277      ENDIF 
    217278      ! 
    218       IF( l_trdtrc )  DEALLOCATE( ztrtrdb, ztrtrdn ) 
     279      IF( l_trdtrc )  DEALLOCATE( ztrtrd ) 
    219280      ! 
    220281   END SUBROUTINE trc_rad_sms 
  • NEMO/trunk/src/TOP/TRP/trcsbc.F90

    r10068 r10425  
    113113 
    114114      ! 0. initialization 
    115       DO jn = 1, jptra 
    116          ! 
    117          IF( l_trdtrc )   ztrtrd(:,:,:) = tra(:,:,:,jn)  ! save trends 
    118          ! 
    119          IF( nn_ice_tr == -1 ) THEN    ! No tracers in sea ice (null concentration in sea ice) 
     115      IF( nn_ice_tr == -1 ) THEN    ! No tracers in sea ice (null concentration in sea ice) 
     116         ! 
     117         DO jn = 1, jptra 
    120118            DO jj = 2, jpj 
    121119               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    123121               END DO 
    124122            END DO 
    125          ELSE 
     123         END DO 
     124         ! 
     125       ELSE 
     126         ! 
     127         DO jn = 1, jptra 
    126128            DO jj = 2, jpj 
    127129               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    143145               END DO 
    144146            END DO 
    145          ENDIF 
    146          ! 
    147          CALL lbc_lnk( sbc_trc(:,:,jn), 'T', 1. ) 
    148          !                                       Concentration dilution effect on tracers due to evaporation & precipitation  
     147         END DO 
     148      ENDIF 
     149      ! 
     150      CALL lbc_lnk( 'trcsbc', sbc_trc(:,:,:), 'T', 1. ) 
     151      !                                       Concentration dilution effect on tracers due to evaporation & precipitation  
     152      DO jn = 1, jptra 
     153         ! 
     154         IF( l_trdtrc )   ztrtrd(:,:,:) = tra(:,:,:,jn)  ! save trends 
     155         ! 
    149156         DO jj = 2, jpj 
    150157            DO ji = fs_2, fs_jpim1   ! vector opt. 
  • NEMO/trunk/src/TOP/TRP/trdmxl_trc.F90

    r10068 r10425  
    6464         &      ndextrd1(jpi*jpj), nidtrd(jptra), nh_t(jptra),  STAT=trd_mxl_trc_alloc) 
    6565         ! 
    66       IF( lk_mpp                )   CALL mpp_sum ( trd_mxl_trc_alloc ) 
    67       IF( trd_mxl_trc_alloc /=0 )   CALL ctl_warn('trd_mxl_trc_alloc: failed to allocate arrays') 
     66      CALL mpp_sum ( 'trdmxl_trc', trd_mxl_trc_alloc ) 
     67      IF( trd_mxl_trc_alloc /=0 )   CALL ctl_stop( 'STOP', 'trd_mxl_trc_alloc: failed to allocate arrays' ) 
    6868      ! 
    6969   END FUNCTION trd_mxl_trc_alloc 
     
    290290            IF( ln_trdtrc(jn) ) THEN 
    291291               DO jl = 1, jpltrd_trc 
    292                   CALL lbc_lnk( tmltrd_trc(:,:,jl,jn), 'T', 1. )        ! lateral boundary conditions 
     292                  CALL lbc_lnk( 'trdmxl_trc', tmltrd_trc(:,:,jl,jn), 'T', 1. )        ! lateral boundary conditions 
    293293               END DO 
    294294            ENDIF 
     
    425425         !-- Lateral boundary conditions 
    426426               IF ( cn_cfg .NE. 'gyre' ) THEN 
    427                   CALL lbc_lnk_multi( ztmltot(:,:,jn) , 'T', 1. , ztmlres(:,:,jn) , 'T', 1., & 
     427                  CALL lbc_lnk_multi( 'trdmxl_trc', ztmltot(:,:,jn) , 'T', 1. , ztmlres(:,:,jn) , 'T', 1., & 
    428428                     &                ztmlatf(:,:,jn) , 'T', 1. , ztmlrad(:,:,jn) , 'T', 1. ) 
    429429               ENDIF 
     
    476476         !-- Lateral boundary conditions  
    477477               IF ( cn_cfg .NE. 'gyre' ) THEN            ! other than GYRE configuration     
    478                   CALL lbc_lnk_multi( ztmltot2(:,:,jn), 'T', 1., ztmlres2(:,:,jn), 'T', 1. ) 
     478                  CALL lbc_lnk_multi( 'trdmxl_trc', ztmltot2(:,:,jn), 'T', 1., ztmlres2(:,:,jn), 'T', 1. ) 
    479479                  DO jl = 1, jpltrd_trc 
    480                      CALL lbc_lnk( ztmltrd2(:,:,jl,jn), 'T', 1. )       ! will be output in the NetCDF trends file 
     480                     CALL lbc_lnk( 'trdmxl_trc', ztmltrd2(:,:,jl,jn), 'T', 1. )       ! will be output in the NetCDF trends file 
    481481                  END DO 
    482482               ENDIF 
     
    776776 
    777777      IF( ( lk_trdmxl_trc ) .AND. ( MOD( nitend-nittrc000+1, nn_trd_trc ) /= 0 ) ) THEN 
    778          WRITE(numout,cform_err) 
    779          WRITE(numout,*) '                Your nitend parameter, nitend = ', nitend 
    780          WRITE(numout,*) '                is no multiple of the trends diagnostics frequency        ' 
    781          WRITE(numout,*) '                          you defined, nn_trd_trc   = ', nn_trd_trc 
    782          WRITE(numout,*) '                This will not allow you to restart from this simulation.  ' 
    783          WRITE(numout,*) '                You should reconsider this choice.                        '  
    784          WRITE(numout,*)  
    785          WRITE(numout,*) '                N.B. the nitend parameter is also constrained to be a     ' 
    786          WRITE(numout,*) '                multiple of the sea-ice frequency parameter (typically 5) ' 
    787          nstop = nstop + 1 
     778         WRITE(ctmp1,*) '                Your nitend parameter, nitend = ', nitend 
     779         WRITE(ctmp2,*) '                is no multiple of the trends diagnostics frequency        ' 
     780         WRITE(ctmp3,*) '                          you defined, nn_trd_trc   = ', nn_trd_trc 
     781         WRITE(ctmp4,*) '                This will not allow you to restart from this simulation.  ' 
     782         WRITE(ctmp5,*) '                You should reconsider this choice.                        '  
     783         WRITE(ctmp6,*)  
     784         WRITE(ctmp7,*) '                N.B. the nitend parameter is also constrained to be a     ' 
     785         WRITE(ctmp8,*) '                multiple of the sea-ice frequency parameter (typically 5) ' 
     786         CALL ctl_stop( ctmp1, ctmp2, ctmp3, ctmp4, ctmp5, ctmp6, ctmp7, ctmp8 ) 
    788787      ENDIF 
    789788 
     
    795794 
    796795      IF( ( ln_trcadv_muscl .OR. ln_trcadv_muscl2 ) .AND. .NOT. ln_trdmxl_trc_instant ) THEN 
    797          WRITE(numout,cform_err) 
    798          WRITE(numout,*) '                Currently, you can NOT use simultaneously tracer MUSCL    ' 
    799          WRITE(numout,*) '                advection and window averaged diagnostics of ML trends.   ' 
    800          WRITE(numout,*) '                WHY? Everything in trdmxl_trc is coded for leap-frog, and ' 
    801          WRITE(numout,*) '                MUSCL scheme is Euler forward for passive tracers (note   ' 
    802          WRITE(numout,*) '                that MUSCL is leap-frog for active tracers T/S).          ' 
    803          WRITE(numout,*) '                In particuliar, entrainment trend would be FALSE. However ' 
    804          WRITE(numout,*) '                this residual is correct for instantaneous ML diagnostics.' 
    805          WRITE(numout,*)  
    806          nstop = nstop + 1 
     796         WRITE(ctmp1,*) '                Currently, you can NOT use simultaneously tracer MUSCL    ' 
     797         WRITE(ctmp2,*) '                advection and window averaged diagnostics of ML trends.   ' 
     798         WRITE(ctmp3,*) '                WHY? Everything in trdmxl_trc is coded for leap-frog, and ' 
     799         WRITE(ctmp4,*) '                MUSCL scheme is Euler forward for passive tracers (note   ' 
     800         WRITE(ctmp5,*) '                that MUSCL is leap-frog for active tracers T/S).          ' 
     801         WRITE(ctmp6,*) '                In particuliar, entrainment trend would be FALSE. However ' 
     802         WRITE(ctmp7,*) '                this residual is correct for instantaneous ML diagnostics.' 
     803         CALL ctl_stop( ctmp1, ctmp2, ctmp3, ctmp4, ctmp5, ctmp6, ctmp7 ) 
    807804      ENDIF 
    808805 
  • NEMO/trunk/src/TOP/TRP/trdmxl_trc_rst.F90

    r10068 r10425  
    5454         IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    5555         IF(lwp) WRITE(numout,*) '             open ocean restart_mld_trc NetCDF  'TRIM(clpath)//TRIM(clname) 
    56          CALL iom_open( TRIM(clpath)//TRIM(clname), nummldw_trc, ldwrt = .TRUE., kiolib = jprstlib ) 
     56         CALL iom_open( TRIM(clpath)//TRIM(clname), nummldw_trc, ldwrt = .TRUE. ) 
    5757      ENDIF 
    5858 
     
    127127      CHARACTER (len=35) :: charout 
    128128      INTEGER ::  jk, jn, jl     ! loop indice 
    129       INTEGER ::  jlibalt = jprstlib 
    130129      LOGICAL ::  llok 
    131130      CHARACTER(LEN=256)  ::   clpath   ! full path to restart file 
     
    140139      clpath = TRIM(cn_trcrst_indir) 
    141140      IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    142       CALL iom_open( TRIM(clpath)//TRIM(cn_trdrst_trc_in), inum, kiolib = jlibalt )  
     141      CALL iom_open( TRIM(clpath)//TRIM(cn_trdrst_trc_in), inum )  
    143142       
    144143      IF( ln_trdmxl_trc_instant ) THEN  
  • NEMO/trunk/src/TOP/TRP/trdtrc_oce.F90

    r10068 r10425  
    117117      !!         *** ROUTINE trd_trc_oce_alloc *** 
    118118      !!---------------------------------------------------------------------- 
    119       USE lib_mpp, ONLY: ctl_warn 
     119      USE lib_mpp, ONLY: ctl_stop 
    120120      INTEGER :: ierr(2) 
    121121      !!---------------------------------------------------------------------- 
     
    146146      trd_trc_oce_alloc = MAXVAL(ierr) 
    147147      ! 
    148       IF( trd_trc_oce_alloc /= 0 )   CALL ctl_warn('trd_trc_oce_alloc: failed to allocate arrays') 
     148      IF( trd_trc_oce_alloc /= 0 )   CALL ctl_stop( 'STOP', 'trd_trc_oce_alloc: failed to allocate arrays' ) 
    149149      ! 
    150150# if defined key_trdmxl_trc 
  • NEMO/trunk/src/TOP/trc.F90

    r10222 r10425  
    141141      !!                    *** ROUTINE trc_alloc *** 
    142142      !!------------------------------------------------------------------- 
    143       USE lib_mpp, ONLY: ctl_warn 
     143      USE lib_mpp, ONLY: ctl_stop 
    144144      !!------------------------------------------------------------------- 
    145145      INTEGER :: ierr(4) 
     
    166166      !  
    167167      trc_alloc = MAXVAL( ierr ) 
    168       IF( trc_alloc /= 0 )   CALL ctl_warn('trc_alloc: failed to allocate arrays') 
     168      IF( trc_alloc /= 0 )   CALL ctl_stop( 'STOP', 'trc_alloc: failed to allocate arrays' ) 
    169169      ! 
    170170   END FUNCTION trc_alloc 
  • NEMO/trunk/src/TOP/trcbdy.F90

    r10069 r10425  
    7171            END SELECT 
    7272            ! Boundary points should be updated 
    73             CALL lbc_bdy_lnk( tra(:,:,:,jn), 'T', 1., ib_bdy ) 
     73            CALL lbc_bdy_lnk( 'trcbdy', tra(:,:,:,jn), 'T', 1., ib_bdy ) 
    7474            ! 
    7575         END DO 
  • NEMO/trunk/src/TOP/trcini.F90

    r10375 r10425  
    7272      CALL trc_ice_ini   ! Tracers in sea ice 
    7373      ! 
    74       IF(lwp) CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea ) 
     74      IF(lwm) CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea ) 
    7575      ! 
    7676      CALL trc_ini_state  !  passive tracers initialisation : from a restart or from clim 
     
    119119      END DO 
    120120      !                          ! total volume of the ocean  
    121       areatot = glob_sum( cvol(:,:,:) ) 
     121      areatot = glob_sum( 'trcini', cvol(:,:,:) ) 
    122122      ! 
    123123      trai(:) = 0._wp            ! initial content of all tracers 
    124124      DO jn = 1, jptra 
    125          trai(jn) = trai(jn) + glob_sum( trn(:,:,:,jn) * cvol(:,:,:)   ) 
     125         trai(jn) = trai(jn) + glob_sum( 'trcini', trn(:,:,:,jn) * cvol(:,:,:)   ) 
    126126      END DO 
    127127 
     
    292292#endif 
    293293      ! 
    294       IF( lk_mpp    )   CALL mpp_sum( ierr ) 
     294      CALL mpp_sum( 'trcini', ierr ) 
    295295      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'top_alloc : unable to allocate standard ocean arrays' ) 
    296296      ! 
  • NEMO/trunk/src/TOP/trcnam.F90

    r10068 r10425  
    2323   USE trdtrc_oce  ! 
    2424   USE iom         ! I/O manager 
     25#if defined key_mpp_mpi 
     26   USE lib_mpp, ONLY: ncom_dttrc 
     27#endif 
    2528 
    2629   IMPLICIT NONE 
     
    7679      ENDIF 
    7780      ! 
    78       rdttrc = rdt * FLOAT( nn_dttrc )          ! passive tracer time-step 
     81      rdttrc = rdt * FLOAT( nn_dttrc )          ! passive tracer time-step       
    7982      !  
    8083      IF(lwp) THEN                              ! control print 
     
    128131      ENDIF 
    129132      ! 
    130     END SUBROUTINE trc_nam_run 
     133#if defined key_mpp_mpi 
     134      ncom_dttrc = nn_dttrc    ! make nn_fsbc available for lib_mpp 
     135#endif 
     136      ! 
     137   END SUBROUTINE trc_nam_run 
    131138 
    132139 
  • NEMO/trunk/src/TOP/trcrst.F90

    r10222 r10425  
    2323   USE iom 
    2424   USE daymod 
     25   USE lib_mpp 
    2526    
    2627   IMPLICIT NONE 
     
    8788         IF(lwp) WRITE(numout,*) & 
    8889             '             open trc restart.output NetCDF file: ',TRIM(clpath)//clname 
    89          CALL iom_open( TRIM(clpath)//TRIM(clname), numrtw, ldwrt = .TRUE., kiolib = jprstlib ) 
     90         CALL iom_open( TRIM(clpath)//TRIM(clname), numrtw, ldwrt = .TRUE. ) 
    9091         lrst_trc = .TRUE. 
    9192      ENDIF 
     
    116117      END DO 
    117118      ! 
     119      CALL iom_delay_rst( 'READ', 'TOP', numrtr )   ! read only TOP delayed global communication variables 
     120       
    118121   END SUBROUTINE trc_rst_read 
    119122 
     
    127130      !! 
    128131      INTEGER  :: jn 
    129       REAL(wp) :: zarak0 
    130132      !!---------------------------------------------------------------------- 
    131133      ! 
     
    141143      END DO 
    142144      ! 
     145      CALL iom_delay_rst( 'WRITE', 'TOP', numrtw )   ! save only TOP delayed global communication variables 
     146     
    143147      IF( kt == nitrst ) THEN 
    144148          CALL trc_rst_stat            ! statistics 
     
    184188      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    185189      ! 
    186       INTEGER  ::  jlibalt = jprstlib 
    187190      LOGICAL  ::  llok 
    188191      REAL(wp) ::  zrdttrc1, zkt, zndastp, zdayfrac, ksecs, ktime 
     
    199202 
    200203         IF( ln_rsttr ) THEN 
    201             CALL iom_open( TRIM(cn_trcrst_indir)//'/'//cn_trcrst_in, numrtr, kiolib = jlibalt ) 
     204            CALL iom_open( TRIM(cn_trcrst_indir)//'/'//cn_trcrst_in, numrtr ) 
    202205            CALL iom_get ( numrtr, 'kt', zkt )   ! last time-step of previous run 
    203206 
     
    316319      ! 
    317320      DO jn = 1, jptra 
    318          ztraf = glob_sum( trn(:,:,:,jn) * zvol(:,:,:) ) 
     321         ztraf = glob_sum( 'trcrst', trn(:,:,:,jn) * zvol(:,:,:) ) 
    319322         zmin  = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
    320323         zmax  = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
    321324         IF( lk_mpp ) THEN 
    322             CALL mpp_min( zmin )      ! min over the global domain 
    323             CALL mpp_max( zmax )      ! max over the global domain 
     325            CALL mpp_min( 'trcrst', zmin )      ! min over the global domain 
     326            CALL mpp_max( 'trcrst', zmax )      ! max over the global domain 
    324327         END IF 
    325328         zmean  = ztraf / areatot 
  • NEMO/trunk/src/TOP/trcstp.F90

    r10068 r10425  
    2020   USE trdtrc_oce 
    2121   USE trdmxl_trc 
     22   USE sms_pisces,  ONLY : ln_check_mass 
    2223   ! 
    2324   USE prtctl_trc     ! Print control for debbuging 
     
    7374            cvol(:,:,jk) = e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) 
    7475         END DO 
    75          areatot         = glob_sum( cvol(:,:,:) ) 
     76         IF ( ln_ctl .OR. kt == nitrst .OR. ( ln_check_mass .AND. kt == nitend )              & 
     77            & .OR. iom_use( "pno3tot" ) .OR. iom_use( "ppo4tot" ) .OR. iom_use( "psiltot" )   & 
     78            & .OR. iom_use( "palktot" ) .OR. iom_use( "pfertot" ) )                           & 
     79            &     areatot = glob_sum( 'trcstp', cvol(:,:,:) ) 
    7680      ENDIF 
    7781      ! 
     
    105109      ENDIF 
    106110      ! 
    107       ztrai = 0._wp                                                   !  content of all tracers 
    108       DO jn = 1, jptra 
    109          ztrai = ztrai + glob_sum( trn(:,:,:,jn) * cvol(:,:,:)   ) 
    110       END DO 
    111       IF( lwp ) WRITE(numstr,9300) kt,  ztrai / areatot 
     111      IF (ln_ctl ) THEN 
     112         ztrai = 0._wp                                                   !  content of all tracers 
     113         DO jn = 1, jptra 
     114            ztrai = ztrai + glob_sum( 'trcstp', trn(:,:,:,jn) * cvol(:,:,:)   ) 
     115         END DO 
     116         IF( lwm ) WRITE(numstr,9300) kt,  ztrai / areatot 
     117      ENDIF 
    1121189300  FORMAT(i10,D23.16) 
    113119      ! 
  • NEMO/trunk/src/TOP/trcsub.F90

    r10068 r10425  
    308308 
    309309      ierr =  trc_sub_alloc    () 
    310       IF( lk_mpp    )   CALL mpp_sum( ierr ) 
     310      CALL mpp_sum( 'trcsub', ierr ) 
    311311      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'top_sub_alloc : unable to allocate standard ocean arrays' ) 
    312312 
     
    510510         IF( ln_bdy ) THEN 
    511511            ssha(:,:) = ssha(:,:) * bdytmask(:,:) 
    512             CALL lbc_lnk( ssha, 'T', 1. )  
     512            CALL lbc_lnk( 'trcsub', ssha, 'T', 1. )  
    513513         ENDIF 
    514514      ENDIF 
     
    535535      !!                    *** ROUTINE trc_sub_alloc *** 
    536536      !!------------------------------------------------------------------- 
    537       USE lib_mpp, ONLY: ctl_warn 
     537      USE lib_mpp, ONLY: ctl_stop 
    538538      INTEGER ::  ierr(3) 
    539539      !!------------------------------------------------------------------- 
     
    577577      trc_sub_alloc = MAXVAL( ierr ) 
    578578      ! 
    579       IF( trc_sub_alloc /= 0 )   CALL ctl_warn('trc_sub_alloc: failed to allocate arrays') 
     579      IF( trc_sub_alloc /= 0 )   CALL ctl_stop( 'STOP', 'trc_sub_alloc: failed to allocate arrays' ) 
    580580      ! 
    581581   END FUNCTION trc_sub_alloc 
Note: See TracChangeset for help on using the changeset viewer.