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 433 for trunk/NEMO/TOP_SRC/trcrst.F90 – NEMO

Ignore:
Timestamp:
2006-04-10T17:40:29+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_044 : CT : update the passive tracers TOP component and the standard GYRE configuration

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/TOP_SRC/trcrst.F90

    r352 r433  
    1919   USE sms 
    2020   USE trctrp_lec    
     21   USE lib_mpp 
    2122    
    2223   IMPLICIT NONE 
     
    8990      REAL(wp), DIMENSION(3) :: zinfo 
    9091 
    91 #if defined key_trc_pisces && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 ) 
    92       REAL(wp) , DIMENSION(jpi,jpj,jpk) ::   zvolk       
     92#if defined key_trc_pisces  
     93#if ! defined key_cfg_1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 ) 
    9394      REAL(wp) ::   zareatot, zpo4tot 
     95#endif 
    9496#endif 
    9597 
     
    247249#if defined key_trc_pisces  
    248250 
    249 #if defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 
    250  
    251       zvolk(:,:,:) = 0. 
    252       zareatot     = 0. 
    253       DO jk = 1, jpkm1 
    254          DO jj = 2, jpjm1 
    255             DO ji = 2, jpim1 
    256                zvolk(ji,jj,jk) = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) 
    257                zareatot        = zareatot + zvolk(ji,jj,jk) 
    258             ENDDO 
    259          ENDDO 
    260       ENDDO 
    261  
     251#if ! defined key_cfg_1d && ( defined key_orca_r4 || defined key_orca_r2 || defined key_orca_r05 || defined key_orca_r025 )  
     252 
     253      zareatot = 0. 
     254      DO jk = 1, jpk 
     255         DO jj = 1, jpj 
     256            DO ji = 1, jpi 
     257               zareatot = zareatot + tmask(ji,jj,jk) * tmask_i(ji,jj) * & 
     258                  &                 e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)  
     259            END DO 
     260         END DO 
     261      END DO 
     262 
     263      IF( lk_mpp ) THEN  
     264         CALL mpp_sum( zareatot )     ! sum over the global domain   
     265      END IF 
    262266 
    263267      zpo4tot = 0. 
    264       DO jk = 1, jpkm1 
    265          DO jj = 2, jpjm1 
    266             DO ji = 2, jpim1 
    267                zpo4tot = zpo4tot + trn(ji,jj,jk,jptal) * zvolk(ji,jj,jk) 
     268      DO jk = 1, jpk 
     269         DO jj = 1, jpj 
     270            DO ji = 1, jpi 
     271               zpo4tot = zpo4tot + trn(ji,jj,jk,jptal) * tmask(ji,jj,jk) * tmask_i(ji,jj) *   & 
     272                  &                e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    268273            END DO 
    269274         END DO 
    270275      END DO 
     276 
     277      IF( lk_mpp ) THEN  
     278         CALL mpp_sum( zpo4tot )     ! sum over the global domain   
     279      END IF 
    271280 
    272281      WRITE(0,*) 'TALK moyen ', zpo4tot/zareatot*1E6 
     
    274283      trn(:,:,:,jptal) = trn(:,:,:,jptal)*2391./zpo4tot 
    275284 
    276  
    277285      zpo4tot = 0. 
    278       DO jk = 1, jpkm1 
    279          DO jj = 2, jpjm1 
    280             DO ji = 2, jpim1 
    281                zpo4tot = zpo4tot + trn(ji,jj,jk,jppo4) * zvolk(ji,jj,jk) 
     286      DO jk = 1, jpk 
     287         DO jj = 1, jpj 
     288            DO ji = 1, jpi 
     289               zpo4tot = zpo4tot + trn(ji,jj,jk,jppo4) * tmask(ji,jj,jk) * tmask_i(ji,jj) *   & 
     290                  &                e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    282291            END DO 
    283292         END DO 
    284293      END DO 
     294 
     295      IF( lk_mpp ) THEN  
     296         CALL mpp_sum( zpo4tot )     ! sum over the global domain   
     297      END IF 
     298 
    285299 
    286300      WRITE(0,*) 'PO4 moyen ', zpo4tot/zareatot*1E6/122. 
     
    288302      trn(:,:,:,jppo4) = trn(:,:,:,jppo4)*2.165/zpo4tot 
    289303 
    290  
    291304      zpo4tot = 0. 
    292       DO jk = 1, jpkm1 
    293          DO jj = 2, jpjm1 
    294             DO ji = 2, jpim1 
    295                zpo4tot = zpo4tot + trn(ji,jj,jk,jpno3) * zvolk(ji,jj,jk) 
     305      DO jk = 1, jpk 
     306         DO jj = 1, jpj 
     307            DO ji = 1, jpi 
     308               zpo4tot = zpo4tot + trn(ji,jj,jk,jpno3) * tmask(ji,jj,jk) * tmask_i(ji,jj) *   & 
     309                  &                e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    296310            END DO 
    297311         END DO 
    298312      END DO 
     313 
     314      IF( lk_mpp ) THEN  
     315         CALL mpp_sum( zpo4tot )     ! sum over the global domain   
     316      END IF 
     317 
    299318 
    300319      WRITE(0,*) 'NO3 moyen ', zpo4tot/zareatot*1E6/7.6 
     
    303322 
    304323      zpo4tot = 0. 
    305       DO jk = 1, jpkm1 
    306          DO jj = 2, jpjm1 
    307             DO ji = 2, jpim1 
    308                zpo4tot = zpo4tot + trn(ji,jj,jk,jpsil) * zvolk(ji,jj,jk) 
     324      DO jk = 1, jpk 
     325         DO jj = 1, jpj 
     326            DO ji = 1, jpi 
     327               zpo4tot = zpo4tot + trn(ji,jj,jk,jpsil) * tmask(ji,jj,jk) * tmask_i(ji,jj) *   & 
     328                  &                e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    309329            END DO 
    310330         END DO 
    311331      END DO 
     332 
     333      IF( lk_mpp ) THEN  
     334         CALL mpp_sum( zpo4tot )     ! sum over the global domain   
     335      END IF 
    312336 
    313337      WRITE(0,*) 'SiO3 moyen ', zpo4tot/zareatot*1E6 
     
    402426 
    403427      REAL(wp) :: zdate0, zinfo(3),zdiag_var,    & 
    404          zdiag_varmin, zdiag_varmax 
     428         zdiag_varmin, zdiag_varmax, zdiag_tot, zder 
    405429 
    406430 
     
    412436         IF(lwp) WRITE(numout,*) 'trc_wri : write passive tracers restart.output NetCDF file' 
    413437         IF(lwp) WRITE(numout,*) '~~~~~~~' 
     438        
     439 
     440         areatot = 0. 
     441         DO jk = 1, jpk 
     442            DO jj = 1, jpj 
     443               DO ji = 1, jpi 
     444                  areatot = areatot + tmask(ji,jj,jk)*tmask_i(ji,jj)*e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk)  
     445               END DO 
     446            END DO 
     447         END DO 
     448 
     449         IF( lk_mpp ) THEN  
     450             CALL mpp_sum(areatot)     ! sum over the global domain   
     451         END IF 
     452 
     453         trai = 0. 
     454         DO jn = 1, jptra 
     455            DO jk = 1,jpk 
     456               DO jj = 1, jpj 
     457                  DO ji = 1, jpi 
     458                     trai=trai+tmask(ji,jj,jk)*trn(ji,jj,jk,jn)*     & 
     459                        &    tmask_i(ji,jj)* e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)  
     460                  END DO 
     461               END DO 
     462            END DO 
     463         END DO 
     464 
     465         IF( lk_mpp ) THEN  
     466             CALL mpp_sum(trai)         ! sum over the global domain   
     467         END IF 
     468 
     469         IF (lwp) WRITE(numout,*) 'Integral of all tracers over the full domain at NIT000 =',trai 
     470 
    414471      ENDIF 
    415472 
     
    452509            IF(cexper(jc:jc) /= ' ') ic = jc 
    453510         END DO 
    454          WRITE(cln,'("_",i2.2,i2.2,i2.2,"_restart.trc")') nyear, nmonth, nday 
     511         WRITE(cln,'("_",i4.4,i2.2,i2.2,"_restart.trc")') nyear, nmonth, nday 
    455512         clname=cexper(1:ic)//cln 
    456513         ic=1 
     
    469526         ! -------------------- 
    470527 
     528         IF (lwp) WRITE(numout,*) '----TRACER STAT----' 
     529         zdiag_tot=0. 
    471530         DO jn=1,jptra 
    472531            clname='TRN'//ctrcnm(jn) 
     
    476535            zdiag_varmin=0. 
    477536            zdiag_varmax=0. 
    478             IF (lwp) WRITE(numout,*) '----TRACER STAT----' 
    479  
    480             DO ji=1,jpi 
    481                DO jj=1,jpj 
     537 
     538            DO ji=1, jpi 
     539               DO jj=1, jpj 
    482540                  DO jk=1,jpk 
    483  
    484                      zdiag_var=zdiag_var+tmask(ji,jj,jk)*trn(ji,jj,jk,jn) 
    485  
    486                      IF (tmask(ji,jj,jk).EQ.1.) THEN 
    487                         IF (zdiag_varmin.GT.trn(ji,jj,jk,jn))        & 
    488                            zdiag_varmin =  trn(ji,jj,jk,jn) 
    489                         IF (zdiag_varmax.LT.trn(ji,jj,jk,jn))        & 
    490                            zdiag_varmax =  trn(ji,jj,jk,jn) 
    491  
    492                      ENDIF 
     541                    zdiag_var=zdiag_var+tmask(ji,jj,jk)*trn(ji,jj,jk,jn)*     & 
     542                               tmask_i(ji,jj)* e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk)  
    493543 
    494544                  END DO 
     
    496546            END DO 
    497547 
    498  
    499             zdiag_var=zdiag_var/(jpi*jpj*jpk) 
    500  
    501             IF(lwp) WRITE(numout,*) 'MEAN NO ',jn,' =',zdiag_var,'MIN= '  & 
     548            zdiag_varmin=MINVAL(trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.))) 
     549            zdiag_varmax=MAXVAL(trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.))) 
     550 
     551            IF( lk_mpp ) THEN  
     552               CALL mpp_min(zdiag_varmin)      ! min over the global domain   
     553               CALL mpp_max(zdiag_varmax)      ! max over the global domain   
     554               CALL mpp_sum(zdiag_var)         ! sum over the global domain   
     555            END IF 
     556 
     557            zdiag_tot=zdiag_tot+zdiag_var 
     558            zdiag_var=zdiag_var/areatot 
     559 
     560            IF (lwp) WRITE(numout,*) 'MEAN NO ',jn,ctrcnm(jn),' =',zdiag_var,'MIN= '  & 
    502561               ,zdiag_varmin,'MAX= ',zdiag_varmax 
    503562 
    504563         END DO 
     564 
     565         zdiag_tot=zdiag_tot 
     566         zder=((zdiag_tot-trai)/trai)*100._wp 
     567         IF (lwp) WRITE(numout,*) 'Integral of all tracers over the full domain  =',zdiag_tot   
     568         IF (lwp) WRITE(numout,*) 'Drift of the sum of all tracers =',zder, '%'   
    505569 
    506570         DO jn=1,jptra 
     
    508572            CALL restput(nutwrs,clname,jpi,jpj,jpk,0,trb(:,:,:,jn)) 
    509573         END DO 
    510  
    511574 
    512575#if defined key_trc_lobster1 
Note: See TracChangeset for help on using the changeset viewer.