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 777 for branches/dev_001_GM/NEMO/TOP_SRC/LOBSTER/trcexp.F90 – NEMO

Ignore:
Timestamp:
2007-12-19T19:40:57+01:00 (16 years ago)
Author:
gm
Message:

dev_001_GM - LOBSTER in F90 encapsulation of LOBSTER routines in module - compilation OK

File:
1 moved

Legend:

Unmodified
Added
Removed
  • branches/dev_001_GM/NEMO/TOP_SRC/LOBSTER/trcexp.F90

    r774 r777  
    1 CCC $Header$  
    2       SUBROUTINE trcexp(kt) 
    3 #if defined key_top && defined key_lobster 
    4 CCC--------------------------------------------------------------------- 
    5 CCC 
    6 CCC                       ROUTINE trcexp 
    7 CCC                     ****************** 
    8 CCC 
    9 CC 
    10 CC     PURPOSE. 
    11 CC     -------- 
    12 CC          *TRCEXP* MODELS EXPORT OF BIOGENIC MATTER (POC ''SOFT 
    13 CC                   TISSUE'') AND ITS DISTRIBUTION IN WATER COLUMN 
    14 CC 
    15 CC     METHOD. 
    16 CC     ------- 
    17 CC          IN THE SURFACE LAYER POC IS PRODUCED ACCORDING TO 
    18 CC     NURTRIENTS AVAILABLE AND GROWTH CONDITIONS. NUTRIENT UPTAKE 
    19 CC     KINETICS FOLLOW MICHAELIS-MENTON FORMULATION.  
    20 CC     THE TOTAL PARTICLE AMOUNT PRODUCED, IS DISTRIBUTED IN THE WATER 
    21 CC     COLUMN BELOW THE SURFACE LAYER. 
    22 CC 
    23 CC     EXTERNALS. 
    24 CC     ---------- 
    25 CC          NONE. 
    26 CC 
    27 CC     REFERENCE. 
    28 CC     ---------- 
    29 CC 
    30 CC   MODIFICATIONS: 
    31 CC   -------------- 
    32 CC      original      : 1999    O. Aumont 
    33 CC      modifications : 1999    C. Le Quere 
    34 CC      additions   : 01-05 (O. Aumont, E. Kestenare): 
    35 CC                           add sediment computations 
    36 CC                  :  05-06  (AS. Kremeur) new temporal integration for sedpoc 
    37 CC --------------------------------------------------------------------- 
    38 c ------ 
    39 CC parameters and commons 
    40 CC ====================== 
    41 CDIR$ NOLIST 
    42       USE oce_trc 
    43       USE trp_trc 
    44       USE sms 
    45       USE lbclnk 
    46       USE trc 
    47       USE trctrp_lec 
     1MODULE trcexp 
     2   !!====================================================================== 
     3   !!                         ***  MODULE p4sed  *** 
     4   !! TOP :   PISCES Compute loss of organic matter in the sediments 
     5   !!====================================================================== 
     6   !! History :    -   !  1999    (O. Aumont, C. Le Quere)  original code 
     7   !!              -   !  2001-05 (O. Aumont, E. Kestenare) add sediment computations 
     8   !!             1.0  !  2005-06 (A.-S. Kremeur) new temporal integration for sedpoc 
     9   !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90 
     10   !!---------------------------------------------------------------------- 
     11#if defined key_lobster 
     12   !!---------------------------------------------------------------------- 
     13   !!   'key_lobster'                                     LOBSTER bio-model 
     14   !!---------------------------------------------------------------------- 
     15   !!   trc_exp        :  Compute loss of organic matter in the sediments 
     16   !!---------------------------------------------------------------------- 
     17   USE oce_trc         ! 
     18   USE trp_trc 
     19   USE sms 
     20   USE lbclnk 
     21   USE trc 
     22   USE trctrp_lec 
    4823 
    49       IMPLICIT NONE 
    50 CDIR$ LIST 
    51 CC---------------------------------------------------------------------- 
    52 CC local declarations 
    53 CC ================== 
    54 C 
    55       INTEGER kt 
    56       INTEGER ji, jj, jk, zkbot(jpi,jpj) 
    57       REAL zwork(jpi,jpj), zgeolpoc, zfact 
    58 CC---------------------------------------------------------------------- 
    59 CC statement functions 
    60 CC =================== 
    61 CDIR$ NOLIST 
    62 #include "domzgr_substitute.h90" 
    63 CDIR$ LIST 
    64 C 
    65 C VERTICAL DISTRIBUTION OF NEWLY PRODUCED BIOGENIC 
    66 C POC IN THE WATER COLUMN 
    67 C (PARTS OF NEWLY FORMED MATTER REMAINING IN THE DIFFERENT 
    68 C LAYERS IS DETERMINED BY DMIN3 DEFINED IN common.passivetrc.*.h 
    69 C ---------------------------------------------------------------------- 
    70 C 
    71 C 
    72       DO jk = 1,jpkm1 
    73         DO jj = 2,jpjm1 
    74           DO ji = 2,jpim1 
    75             tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3)+ 
    76      &          (1./fse3t(ji,jj,jk))* 
    77      &          dmin3(ji,jj,jk) *fbod(ji,jj) 
    78           ENDDO 
    79         ENDDO 
    80       ENDDO 
    81 C 
    82 C     Find the last level of the water column 
    83 C     Compute fluxes due to sinking particles (slow) 
    84 C    
    85       zkbot = jpk 
    86       zwork = 0. 
    87 C 
    88 C 
    89       DO jk = 1,jpkm1 
    90         DO jj = 2,jpjm1 
    91           DO ji = 2,jpim1 
     24   IMPLICIT NONE 
     25   PRIVATE 
     26 
     27   PUBLIC   trc_exp    ! called in p4zprg.F90 
     28 
     29   !!* Substitution 
     30#  include "domzgr_substitute.h90" 
     31   !!---------------------------------------------------------------------- 
     32   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)  
     33   !! $Id:$  
     34   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     35   !!---------------------------------------------------------------------- 
     36 
     37CONTAINS 
     38 
     39   SUBROUTINE trc_exp( kt ) 
     40      !!--------------------------------------------------------------------- 
     41      !!                     ***  ROUTINE trc_exp  *** 
     42      !! 
     43      !! ** Purpose :   MODELS EXPORT OF BIOGENIC MATTER (POC ''SOFT 
     44      !!              TISSUE'') AND ITS DISTRIBUTION IN WATER COLUMN 
     45      !! 
     46      !! ** Method  : - IN THE SURFACE LAYER POC IS PRODUCED ACCORDING TO 
     47      !!              NURTRIENTS AVAILABLE AND GROWTH CONDITIONS. NUTRIENT UPTAKE 
     48      !!              KINETICS FOLLOW MICHAELIS-MENTON FORMULATION.  
     49      !!              THE TOTAL PARTICLE AMOUNT PRODUCED, IS DISTRIBUTED IN THE WATER 
     50      !!              COLUMN BELOW THE SURFACE LAYER. 
     51      !!--------------------------------------------------------------------- 
     52      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
     53      !! 
     54      INTEGER  ::   ji, jj, jk 
     55      REAL(wp) ::   zgeolpoc, zfact 
     56      INTEGER , DIMENSION(jpi,jpj) ::   ikbot 
     57      REAL(wp), DIMENSION(jpi,jpj) ::   zwork 
     58      !!--------------------------------------------------------------------- 
     59 
     60      IF( kt == nit000 ) THEN 
     61         IF(lwp) WRITE(numout,*) 
     62         IF(lwp) WRITE(numout,*) ' trc_exp: LOBSTER export' 
     63         IF(lwp) WRITE(numout,*) ' ~~~~~~~' 
     64      ENDIF 
     65 
     66! VERTICAL DISTRIBUTION OF NEWLY PRODUCED BIOGENIC 
     67! POC IN THE WATER COLUMN 
     68! (PARTS OF NEWLY FORMED MATTER REMAINING IN THE DIFFERENT 
     69! LAYERS IS DETERMINED BY DMIN3 DEFINED IN common.passivetrc.*.h 
     70! ---------------------------------------------------------------------- 
     71 
     72      DO jk = 1, jpkm1 
     73         DO jj = 2, jpjm1 
     74            DO ji = 2, jpim1 
     75               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3)   & 
     76     &                             + (1./fse3t(ji,jj,jk)) * dmin3(ji,jj,jk) * fbod(ji,jj) 
     77            END DO 
     78         END DO 
     79      END DO 
     80 
     81!     Find the last level of the water column 
     82!     Compute fluxes due to sinking particles (slow) 
    9283    
    93              IF ( tmask(ji,jj,jk) .eq. 1 .and. 
    94      .            tmask(ji,jj,jk+1). eq. 0 ) THEN 
    95                   zkbot(ji,jj) = jk 
     84      ikbot(:,:) = jpk 
     85      zwork(:,:) = 0.e0 
     86 
     87!!gm ikbot already exist in opa... 
     88      DO jk = 1, jpkm1 
     89         DO jj = 2, jpjm1 
     90            DO ji = 2, jpim1 
     91               IF( tmask(ji,jj,jk) == 1 .AND.  tmask(ji,jj,jk+1) == 0 ) THEN 
     92                  ikbot(ji,jj) = jk 
    9693                  zwork(ji,jj) = vsed * trn(ji,jj,jk,jpdet) 
    97               ENDIF 
    98      
    99              ENDDO 
    100          ENDDO 
    101       ENDDO 
    102 C 
    103 C     Initialization 
    104       zgeolpoc = 0. 
     94               ENDIF 
     95            END DO 
     96         END DO 
     97      END DO 
    10598 
    106 C     Release of nutrients from the "simple" sediment 
    107 C 
    108         DO jj = 2,jpjm1 
    109           DO ji = 2,jpim1 
    110              tra(ji,jj,zkbot(ji,jj),jpno3) =  
    111      .          tra(ji,jj,zkbot(ji,jj),jpno3) + 
    112      .               sedlam*sedpocn(ji,jj)/fse3t(ji,jj,zkbot(ji,jj)) 
     99      zgeolpoc = 0.e0         !     Initialization 
    113100 
    114 C     Deposition of organic matter in the sediment 
    115 C 
    116              zgeolpoc = zgeolpoc + sedlostpoc*sedpocn(ji,jj)* 
    117      .                             e1t(ji,jj)*e2t(ji,jj) 
     101      ! Release of nutrients from the "simple" sediment 
     102      DO jj = 2, jpjm1 
     103         DO ji = 2, jpim1 
     104            tra(ji,jj,ikbot(ji,jj),jpno3) = tra(ji,jj,ikbot(ji,jj),jpno3)   & 
     105               &                          + sedlam * sedpocn(ji,jj) / fse3t(ji,jj,ikbot(ji,jj)) 
    118106 
    119              sedpoca(ji,jj) = zwork(ji,jj)*rdt + 
    120      .                       dminl(ji,jj)*fbod(ji,jj)*rdt - 
    121      .                       sedlam*sedpocn(ji,jj)*rdt - 
    122      .                       sedlostpoc*sedpocn(ji,jj)*rdt 
    123 C 
    124              ENDDO 
    125          ENDDO 
    126 C 
    127         DO jj = 2,jpjm1 
    128           DO ji = 2,jpim1 
    129              tra(ji,jj,1,jpno3) = tra(ji,jj,1,jpno3) + zgeolpoc* 
    130      .                            cmask(ji,jj)/areacot/fse3t(ji,jj,1) 
    131            ENDDO 
    132          ENDDO 
     107            !     Deposition of organic matter in the sediment 
     108            zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1t(ji,jj) * e2t(ji,jj) 
    133109 
    134          CALL lbc_lnk( sedpocn, 'T', 1. ) 
     110!!gm factorisationof rdt just bellow... 
     111            sedpoca(ji,jj) = zwork(ji,jj) * rdt + dminl(ji,jj) * fbod(ji,jj) * rdt   & 
     112               &           - sedlam * sedpocn(ji,jj) * rdt - sedlostpoc * sedpocn(ji,jj) * rdt 
     113 
     114         END DO 
     115      END DO 
     116 
     117      DO jj = 2,jpjm1 
     118         DO ji = 2,jpim1 
     119            tra(ji,jj,1,jpno3) = tra(ji,jj,1,jpno3) + zgeolpoc * cmask(ji,jj) / areacot / fse3t(ji,jj,1) 
     120         END DO 
     121      END DO 
     122 
     123      CALL lbc_lnk( sedpocn, 'T', 1. ) 
    135124  
    136 C Oa & Ek: diagnostics depending on jpdia2d 
    137 C          left as example 
    138 #     if defined key_trc_diaadd 
    139            do jj=1,jpj 
    140              do ji=1,jpi 
    141               trc2d(ji,jj,19)=sedpocn(ji,jj) 
    142              end do 
    143            end do 
    144 #     endif 
     125      ! Oa & Ek: diagnostics depending on jpdia2d !          left as example 
     126# if defined key_trc_diaadd 
     127      trc2d(:,:,19) = sedpocn(:,:) 
     128# endif 
    145129 
    146 c      ! 1. Leap-frog scheme (only in explicit case, otherwise the  
    147 c      ! -------------------  time stepping is already done in trczdf) 
    148        IF(l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd)) THEN 
    149          zfact = 2. * rdttra(jk) * FLOAT(ndttrc)  
    150          IF( neuler == 0 .AND. kt == nittrc000 )  
    151      .     zfact = rdttra(jk) * FLOAT(ndttrc)  
    152          sedpoca(:,:) = ( sedpocb(:,:) + zfact * sedpoca(:,:) ) 
     130      ! Leap-frog scheme (only in explicit case, otherwise the  
     131      ! ----------------  time stepping is already done in trczdf) 
     132      IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN 
     133         zfact = 2. * rdttra(jk) * FLOAT( ndttrc )  
     134         IF( neuler == 0 .AND. kt == nittrc000 )   zfact = rdttra(jk) * FLOAT(ndttrc)  
     135         sedpoca(:,:) =  sedpocb(:,:) + zfact * sedpoca(:,:)  
    153136      ENDIF 
    154137 
    155138       
    156 c      ! 2. Time filter and swap of arrays 
    157 c      ! --------------------------------- 
    158       IF ( ln_trcadv_cen2 .OR. ln_trcadv_tvd  ) THEN          
    159           IF( neuler == 0 .AND. kt == nittrc000 ) THEN 
    160               DO jj = 1, jpj 
    161                 DO ji = 1, jpi 
     139      ! Time filter and swap of arrays 
     140      ! ------------------------------ 
     141      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd  ) THEN         ! centred or tvd scheme 
     142         IF( neuler == 0 .AND. kt == nittrc000 ) THEN 
     143            DO jj = 1, jpj 
     144               DO ji = 1, jpi 
    162145                  sedpocb(ji,jj) = sedpocn(ji,jj) 
    163146                  sedpocn(ji,jj) = sedpoca(ji,jj) 
    164                   sedpoca(ji,jj) = 0. 
    165                 END DO 
    166               END DO 
     147                  sedpoca(ji,jj) = 0.e0 
     148               END DO 
     149            END DO 
    167150         ELSE 
    168              DO jj = 1, jpj 
     151            DO jj = 1, jpj 
    169152               DO ji = 1, jpi 
    170                  sedpocb(ji,jj) = atfp*(sedpocb(ji,jj)+sedpoca(ji,jj))  
    171      .                          + atfp1 * sedpocn(ji,jj) 
    172                  sedpocn(ji,jj) = sedpoca(ji,jj) 
    173                  sedpoca(ji,jj) = 0. 
     153                  sedpocb(ji,jj) = atfp  * ( sedpocb(ji,jj) + sedpoca(ji,jj) )    & 
     154                     &           + atfp1 *  sedpocn(ji,jj) 
     155                  sedpocn(ji,jj) = sedpoca(ji,jj) 
     156                  sedpoca(ji,jj) = 0.e0 
    174157               END DO 
    175              END DO 
     158            END DO 
    176159         ENDIF 
    177           
    178       ELSE 
    179 c         !  case of smolar scheme or muscl 
    180          DO jj = 1, jpj 
    181             DO ji = 1, jpi 
    182                sedpocb(ji,jj) = sedpoca(ji,jj) 
    183                sedpocn(ji,jj) = sedpoca(ji,jj) 
    184                sedpoca(ji,jj) = 0. 
    185             END DO 
    186          END DO 
    187           
     160      ELSE                                                   !  case of smolar scheme or muscl 
     161         sedpocb(:,:) = sedpoca(:,:) 
     162         sedpocn(:,:) = sedpoca(:,:) 
     163         sedpoca(:,:) = 0.e0 
    188164      ENDIF 
     165      ! 
     166   END SUBROUTINE trc_exp 
    189167 
    190 #endif 
    191       RETURN 
    192       END 
     168#else 
     169   !!====================================================================== 
     170   !!  Dummy module :                                   No PISCES bio-model 
     171   !!====================================================================== 
     172CONTAINS 
     173   SUBROUTINE trc_exp( kt )                   ! Empty routine 
     174      INTEGER, INTENT( in ) ::   kt 
     175      WRITE(*,*) 'trc_exp: You should not have seen this print! error?', kt 
     176   END SUBROUTINE trc_exp 
     177#endif  
     178 
     179   !!====================================================================== 
     180END MODULE  trcexp 
Note: See TracChangeset for help on using the changeset viewer.