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 12193 for NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p4zsms.F90 – NEMO

Ignore:
Timestamp:
2019-12-11T17:15:54+01:00 (4 years ago)
Author:
davestorkey
Message:

2019/dev_r11943_MERGE_2019: Merge in dev_r12072_TOP-01_ENHANCE-11_cethe

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p4zsms.F90

    r11960 r12193  
    1717   USE p4zlys          ! Calcite saturation 
    1818   USE p4zflx          ! Gas exchange 
    19    USE p4zsbc          ! External source of nutrients 
     19   USE p4zbc           ! External source of nutrients 
    2020   USE p4zsed          ! Sedimentation 
    2121   USE p4zint          ! time interpolation 
     
    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 
     
    6464      REAL(wp) ::  ztra 
    6565      CHARACTER (len=25) :: charout 
     66      REAL(wp), ALLOCATABLE, DIMENSION(:,:    ) :: zw2d 
     67      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:  ) :: zw3d 
     68      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ztrdt   ! 4D workspace 
     69 
    6670      !!--------------------------------------------------------------------- 
    6771      ! 
     
    8690      rfact = r2dttrc 
    8791      ! 
     92      ! trends computation initialisation 
     93      IF( l_trdtrc )  THEN 
     94         ALLOCATE( ztrdt(jpi,jpj,jpk,jp_pisces) )  !* store now fields before applying the Asselin filter 
     95         ztrdt(:,:,:,:)  = tr(:,:,:,:,Kmm) 
     96      ENDIF 
     97      ! 
     98 
    8899      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + 1 ) ) THEN 
    89100         rfactr  = 1. / rfact 
     
    91102         rfact2r = 1. / rfact2 
    92103         xstep = rfact2 / rday         ! Time step duration for biology 
     104         xfact = 1.e+3 * rfact2r 
    93105         IF(lwp) WRITE(numout,*)  
    94106         IF(lwp) WRITE(numout,*) '    Passive Tracer  time step    rfact  = ', rfact, ' rdt = ', rdt 
     
    103115      ENDIF 
    104116      ! 
    105       IF( ll_sbc ) CALL p4z_sbc( kt, Kmm )   ! external sources of nutrients  
     117      IF( ll_bc )    CALL p4z_bc( kt, Kbb, Kmm, Krhs )   ! external sources of nutrients  
    106118      ! 
    107119#if ! defined key_sed_off 
     
    135147         END DO 
    136148        ! 
     149        IF(  iom_use( 'INTdtAlk' ) .OR. iom_use( 'INTdtDIC' ) .OR. iom_use( 'INTdtFer' ) .OR.  & 
     150          &  iom_use( 'INTdtDIN' ) .OR. iom_use( 'INTdtDIP' ) .OR. iom_use( 'INTdtSil' ) )  THEN 
     151          ! 
     152          ALLOCATE( zw3d(jpi,jpj,jpk), zw2d(jpi,jpj) ) 
     153          zw3d(:,:,jpk) = 0. 
     154          DO jk = 1, jpkm1 
     155              zw3d(:,:,jk) = xnegtr(:,:,jk) * xfact * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 
     156          ENDDO 
     157          ! 
     158          zw2d(:,:) = 0. 
     159          DO jk = 1, jpkm1 
     160             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jptal,Krhs) 
     161          ENDDO 
     162          CALL iom_put( 'INTdtAlk', zw2d ) 
     163          ! 
     164          zw2d(:,:) = 0. 
     165          DO jk = 1, jpkm1 
     166             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpdic,Krhs) 
     167          ENDDO 
     168          CALL iom_put( 'INTdtDIC', zw2d ) 
     169          ! 
     170          zw2d(:,:) = 0. 
     171          DO jk = 1, jpkm1 
     172             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * rno3 * ( tr(:,:,jk,jpno3,Krhs) + tr(:,:,jk,jpnh4,Krhs) ) 
     173          ENDDO 
     174          CALL iom_put( 'INTdtDIN', zw2d ) 
     175          ! 
     176          zw2d(:,:) = 0. 
     177          DO jk = 1, jpkm1 
     178             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * po4r * tr(:,:,jk,jppo4,Krhs) 
     179          ENDDO 
     180          CALL iom_put( 'INTdtDIP', zw2d ) 
     181          ! 
     182          zw2d(:,:) = 0. 
     183          DO jk = 1, jpkm1 
     184             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpfer,Krhs) 
     185          ENDDO 
     186          CALL iom_put( 'INTdtFer', zw2d ) 
     187          ! 
     188          zw2d(:,:) = 0. 
     189          DO jk = 1, jpkm1 
     190             zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpsil,Krhs) 
     191          ENDDO 
     192          CALL iom_put( 'INTdtSil', zw2d ) 
     193          ! 
     194          DEALLOCATE( zw3d, zw2d ) 
     195        ENDIF 
     196        ! 
    137197         DO jn = jp_pcs0, jp_pcs1 
    138198            tr(:,:,:,jn,Krhs) = 0._wp 
     
    145205         ENDIF 
    146206      END DO 
    147  
    148207      ! 
    149208      IF( l_trdtrc ) THEN 
    150209         DO jn = jp_pcs0, jp_pcs1 
     210           ztrdt(:,:,:,jn) = ( tr(:,:,:,jn,Kbb) - ztrdt(:,:,:,jn) ) * rfact2r  
    151211           CALL trd_trc( tr(:,:,:,jn,Krhs), jn, jptra_sms, kt, Kmm )   ! save trends 
    152212         END DO 
     213         DEALLOCATE( ztrdt )  
    153214      END IF 
    154215#endif 
Note: See TracChangeset for help on using the changeset viewer.