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 2819 for branches/2011/dev_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcsed.F90 – NEMO

Ignore:
Timestamp:
2011-08-09T10:29:53+02:00 (13 years ago)
Author:
cetlod
Message:

Improvment of branch dev_r2787_LOCEAN3_TRA_TRP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcsed.F90

    r2715 r2819  
    5757      !!--------------------------------------------------------------------- 
    5858      USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    59       USE wrk_nemo, ONLY: zwork => wrk_3d_2 
    60       USE wrk_nemo, ONLY: zw2d  => wrk_2d_1 ! only used (if defined  
    61                                             ! key_diatrc && defined key_iomput) 
     59      USE wrk_nemo, ONLY: zw2d  => wrk_2d_1, zwork => wrk_3d_2 
    6260      !! 
    6361      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    6462      !! 
    65       INTEGER  ::   ji, jj, jk, jl 
    66       REAL(wp) ::   ztra 
    67       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrbio 
     63      INTEGER  ::   ji, jj, jk, jl, ierr 
     64      REAL(wp) ::   ztra, ze3t 
     65      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  ztrbio 
    6866      CHARACTER (len=25) :: charout 
    6967      !!--------------------------------------------------------------------- 
    70  
    71       IF( ( wrk_in_use(3,2)) .OR. ( wrk_in_use(2,1)) ) THEN 
    72          CALL ctl_stop('trc_sed : requested workspace arrays unavailable.') 
    73          RETURN 
    74       END IF 
    7568 
    7669      IF( kt == nit000 ) THEN 
     
    8073      ENDIF 
    8174 
     75      IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 2) ) THEN 
     76         CALL ctl_stop('trc_sed : requested workspace arrays unavailable.')  ;  RETURN 
     77      END IF 
     78 
     79      IF( l_trdtrc )  THEN 
     80         ALLOCATE( ztrbio(jpi,jpj,jpk) , STAT = ierr )   ! temporary save of trends 
     81         IF( ierr > 0 ) THEN 
     82            CALL ctl_stop( 'trc_sed: unable to allocate ztrbio array' )   ;   RETURN 
     83         ENDIF 
     84         ztrbio(:,:,:) = tra(:,:,:,jp_lob_det) 
     85      ENDIF 
     86 
     87      IF( ln_diatrc .AND. lk_iomput )  zw2d(:,:) = 0. 
     88 
    8289      ! sedimentation of detritus  : upstream scheme 
    8390      ! -------------------------------------------- 
     
    8693      zwork(:,:,1  ) = 0.e0      ! surface value set to zero 
    8794      zwork(:,:,jpk) = 0.e0      ! bottom value  set to zero 
    88  
    89 #if defined key_diatrc && defined key_iomput 
    90       zw2d(:,:) = 0. 
    91 # endif 
    92  
    93       IF( l_trdtrc )THEN 
    94          ALLOCATE( ztrbio(jpi,jpj,jpk) ) 
    95          ztrbio(:,:,:) = tra(:,:,:,jp_lob_det) 
    96       ENDIF 
    9795 
    9896      ! tracer flux at w-point: we use -vsed (downward flux)  with simplification : no e1*e2 
     
    104102      DO jk = 1, jpkm1 
    105103         DO jj = 1, jpj 
    106             DO ji = 1,jpi 
     104            DO ji = 1, jpi 
    107105               ztra  = - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 
    108106               tra(ji,jj,jk,jp_lob_det) = tra(ji,jj,jk,jp_lob_det) + ztra 
    109 #if defined key_diabio 
    110                trbio(ji,jj,jk,jp_lob0_trd + 7) = ztra 
    111 #endif 
    112 #if defined key_diatrc 
    113 # if ! defined key_iomput 
    114                trc2d(ji,jj,jp_lob0_2d + 7) = trc2d(ji,jj,jp_lob0_2d + 7) + ztra * fse3t(ji,jj,jk) * 86400. 
    115 # else 
    116                zw2d(ji,jj) = zw2d(ji,jj) + ztra * fse3t(ji,jj,jk) * 86400. 
    117 # endif 
    118 #endif 
     107               ! 
     108               IF( ln_diabio )  trbio(ji,jj,jk,jp_lob0_trd + 7) = ztra 
     109               IF( ln_diatrc ) THEN 
     110                  ze3t = ztra * fse3t(ji,jj,jk) * 86400. 
     111                  IF( lk_iomput ) THEN   ;  zw2d(ji,jj) = zw2d(ji,jj) + ze3t  
     112                  ELSE                   ;  trc2d(ji,jj,jp_lob0_2d + 7) = trc2d(ji,jj,jp_lob0_2d + 7) + ze3t 
     113                  ENDIF 
     114               ENDIF 
     115               ! 
    119116            END DO 
    120117         END DO 
    121118      END DO 
    122119 
    123 #if defined key_diabio 
    124       jl = jp_lob0_trd + 7 
    125       CALL lbc_lnk (trbio(:,:,1,jl), 'T', 1. )    ! Lateral boundary conditions on trcbio 
    126 #endif 
    127 #if defined key_diatrc 
    128 # if ! defined key_iomput 
    129       jl = jp_lob0_2d + 7 
    130       CALL lbc_lnk( trc2d(:,:,jl), 'T', 1. )      ! Lateral boundary conditions on trc2d 
    131 # else 
    132       CALL lbc_lnk( zw2d(:,:), 'T', 1. )      ! Lateral boundary conditions on zw2d 
    133       CALL iom_put( "TDETSED", zw2d ) 
    134 # endif 
    135 #endif 
    136       ! 
     120      IF( ln_diatrc .AND. lk_iomput )  CALL iom_put( "TDETSED", zw2d ) 
    137121 
    138122      IF( l_trdtrc ) THEN 
     
    140124         jl = jp_lob0_trd + 7 
    141125         CALL trd_mod_trc( ztrbio, jl, kt )   ! handle the trend 
     126         DEALLOCATE( ztrbio )  
    142127      ENDIF 
    143  
    144       IF( l_trdtrc ) DEALLOCATE( ztrbio ) 
    145128 
    146129      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    150133      ENDIF 
    151134 
    152       IF( ( wrk_not_released(3, 2) ) .OR. ( wrk_not_released(2, 1) ) )  & 
     135      IF( ( wrk_not_released(2, 1) ) .OR. ( wrk_not_released(3, 2) ) )  & 
    153136       &         CALL ctl_stop('trc_sed : failed to release workspace arrays.') 
    154137 
Note: See TracChangeset for help on using the changeset viewer.