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

Ignore:
Timestamp:
2008-06-20T17:17:41+02:00 (16 years ago)
Author:
cetlod
Message:

style of all top namelist has been modified ; update modules to take it into account, see ticket:196

File:
1 edited

Legend:

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

    r1100 r1119  
    3333   INTEGER, PUBLIC ::   numrtr, numrtw   !: logical unit for trc restart (read and write) 
    3434 
    35 #if defined key_pisces 
    36    REAL(wp) ::  & 
    37      alkmean = 2426. ,  & ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 
    38      po4mean = 2.165 ,  & ! mean value of phosphates 
    39      no3mean = 30.90 ,  & ! mean value of nitrate 
    40      siomean = 91.51      ! mean value of silicate 
    41 #endif 
    4235 
    4336   !! * Substitutions 
     
    9891      INTEGER  ::   iarak0 
    9992      REAL(wp) ::   zkt, zarak0 
    100 # if defined key_pisces  
    101       REAL(wp) ::   ztrasum 
    102       INTEGER  ::   ji, jj, jk 
    103       REAL(wp) ::   caralk, bicarb, co3 
    104 # endif 
    10593      !!---------------------------------------------------------------------- 
    10694 
     
    172160      CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) )  
    173161      CALL iom_get( numrtr, jpdom_autoglo, 'Silicamax', xksimax(:,:) ) 
     162      CALL trc_rst_ini  ! Initialisation of some variables 
    174163#endif 
    175164 
     
    181170#endif 
    182171 
    183 #if defined key_pisces  
    184          !                                                         ! --------------------------- ! 
    185          IF( cp_cfg == "orca" .AND. .NOT. lk_trc_c1d ) THEN      ! ORCA condiguration (not 1D) ! 
    186             !                                                      ! --------------------------- ! 
    187             ! set total alkalinity, phosphate, NO3 & silicate 
    188             ! total alkalinity 
    189             ! ----------------------------------------------- 
    190             ztrasum = 0.e0              
    191             DO jk = 1, jpk 
    192                DO jj = 1, jpj 
    193                   DO ji = 1, jpi 
    194                      ztrasum = ztrasum + trn(ji,jj,jk,jptal) * tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
    195 #  if defined key_off_degrad 
    196                         &              * facvol(ji,jj,jk)   & 
    197 #  endif 
    198                         &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    199                   END DO 
    200                END DO 
    201             END DO 
    202             IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain   
    203  
    204  
    205             ztrasum = ztrasum / areatot * 1.e6 
    206             IF(lwp) WRITE(numout,*) 'TALK moyen ', ztrasum 
    207             trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / ztrasum 
    208              
    209             ! phosphate 
    210             ! --------- 
    211             ztrasum = 0.e0 
    212             DO jk = 1, jpk 
    213                DO jj = 1, jpj 
    214                   DO ji = 1, jpi 
    215                      ztrasum = ztrasum + trn(ji,jj,jk,jppo4) * tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
    216 #  if defined key_off_degrad 
    217                      &              * facvol(ji,jj,jk)   & 
    218 #  endif 
    219                      &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    220                   END DO 
    221                END DO 
    222             END DO 
    223             IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain   
    224              
    225             ztrasum = ztrasum / areatot * 1.e6 / 122. 
    226             IF(lwp) WRITE(numout,*) 'PO4 moyen ', ztrasum  
    227             trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / ztrasum 
    228              
    229             ! NO3 
    230             ! --- 
    231             ztrasum = 0.e0 
    232             DO jk = 1, jpk 
    233                DO jj = 1, jpj 
    234                   DO ji = 1, jpi 
    235                      ztrasum = ztrasum + trn(ji,jj,jk,jpno3) * tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
    236 #  if defined key_off_degrad 
    237                      &              * facvol(ji,jj,jk)   & 
    238 #  endif 
    239                      &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    240                   END DO 
    241                END DO 
    242             END DO 
    243             IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain   
    244              
    245             ztrasum = ztrasum / areatot * 1.e6 / 7.6 
    246             IF(lwp) WRITE(numout,*) 'NO3 moyen ', ztrasum  
    247             trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / ztrasum 
    248  
    249             ! Silicate 
    250             ! -------- 
    251             ztrasum = 0.e0 
    252             DO jk = 1, jpk 
    253                DO jj = 1, jpj 
    254                   DO ji = 1, jpi 
    255                      ztrasum = ztrasum + trn(ji,jj,jk,jpsil) * tmask(ji,jj,jk) * tmask_i(ji,jj)   & 
    256 #  if defined key_off_degrad 
    257                      &              * facvol(ji,jj,jk)   & 
    258 #  endif 
    259                      &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    260                   END DO 
    261                END DO 
    262             END DO 
    263             IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain   
    264              
    265             IF(lwp) WRITE(numout,*) 'SiO3 moyen ', ztrasum / areatot * 1.e6 
    266             ztrasum = ztrasum / areatot * 1.e6 
    267             trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * siomean / ztrasum )  
    268             ! 
    269          ENDIF 
    270  
    271 !#if defined key_kriest 
    272 !      !! Initialize number of particles from a standart restart file 
    273 !      !! The name of big organic particles jpgoc has been only change 
    274 !      !! and replace by jpnum but the values here are concentration 
    275 !      trn(:,:,:,jppoc) = trn(:,:,:,jppoc) + trn(:,:,:,jpnum) 
    276 !      trn(:,:,:,jpnum) = trn(:,:,:,jppoc) / ( 6. * xkr_massp ) 
    277 !#endif 
    278          !!  Set hi (???) from  total alcalinity, borat (???), akb3 (???) and ak23 (???) 
    279          !!  --------------------------------------------------------------------- 
    280          DO jk = 1, jpk 
    281             DO jj = 1, jpj 
    282                DO ji = 1,jpi 
    283                   caralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.e-8 / ( rtrn + akb3(ji,jj,jk) ) ) 
    284                   co3    = ( caralk - trn(ji,jj,jk,jpdic) ) *       tmask(ji,jj,jk)   & 
    285                      &   +             0.5e-3               * ( 1.- tmask(ji,jj,jk) ) 
    286                   bicarb = 2.* trn(ji,jj,jk,jpdic) - caralk 
    287                   hi(ji,jj,jk) = ( ak23(ji,jj,jk) * bicarb / co3 )   *       tmask(ji,jj,jk)   & 
    288                      &         +             1.0e-9                  * ( 1.- tmask(ji,jj,jk) ) 
    289                END DO 
    290             END DO 
    291          END DO 
    292 #endif 
    293  
    294172      CALL iom_close( numrtr ) 
    295173      ! 
     
    306184      !! 
    307185      INTEGER  :: ji, jj, jk, jn 
    308       REAL(wp) :: zdiag_var, zdiag_varmin, zdiag_varmax, zdiag_tot 
    309       REAL(wp) :: zder 
    310186      !!---------------------------------------------------------------------- 
    311187 
     
    352228 
    353229       IF( kt == nitrst ) THEN 
    354           IF(lwp) WRITE(numout,*) '----TRACER STAT----' 
    355  
    356           zdiag_tot = 0.e0 
    357           DO jn = 1, jptra 
    358              zdiag_var    = 0.e0 
    359              zdiag_varmin = 0.e0 
    360              zdiag_varmax = 0.e0 
    361              DO ji = 1, jpi 
    362                 DO jj = 1, jpj 
    363                    DO jk = 1,jpk 
    364                       zdiag_var = zdiag_var + trn(ji,jj,jk,jn) * tmask(ji,jj,jk) * tmask_i(ji,jj)   & 
    365 #if defined key_off_degrad 
    366                          &   * facvol(ji,jj,jk)   & 
    367 #endif 
    368                          &   * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    369                    END DO 
    370                 END DO 
    371              END DO 
    372               
    373              zdiag_varmin = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
    374              zdiag_varmax = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
    375              IF( lk_mpp ) THEN 
    376                 CALL mpp_min( zdiag_varmin )      ! min over the global domain 
    377                 CALL mpp_max( zdiag_varmax )      ! max over the global domain 
    378                 CALL mpp_sum( zdiag_var    )      ! sum over the global domain 
    379              END IF 
    380              zdiag_tot = zdiag_tot + zdiag_var 
    381              zdiag_var = zdiag_var / areatot 
    382              IF(lwp) WRITE(numout,*) '   MEAN NO ', jn, ctrcnm(jn), ' = ', zdiag_var,   & 
    383                 &                    ' MIN = ', zdiag_varmin, ' MAX = ', zdiag_varmax 
    384           END DO 
    385            
    386           zder = ( ( zdiag_tot - trai ) / ( trai + 1.e-12 )  ) * 100._wp 
    387           IF(lwp) WRITE(numout,*) '   Integral of all tracers over the full domain  = ', zdiag_tot 
    388           IF(lwp) WRITE(numout,*) '   Drift of the sum of all tracers =', zder, ' %' 
    389            
     230          CALL trc_rst_stat            ! statistics 
    390231          CALL iom_close( numrtw )     ! close the restart file (only at last time step) 
    391232          lrst_trc = .FALSE. 
     
    393234      ! 
    394235   END SUBROUTINE trc_rst_wri 
     236 
     237# if defined key_pisces  
     238 
     239   SUBROUTINE trc_rst_ini  
     240      !!---------------------------------------------------------------------- 
     241      !!                    ***  trc_rst_ini  *** 
     242      !! 
     243      !! ** purpose  : Initialisation of some variables ( hi 
     244      !!---------------------------------------------------------------------- 
     245      INTEGER  :: ji, jj, jk, jn   
     246      REAL(wp) ::  & 
     247         alkmean = 2426. ,  & ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 
     248         po4mean = 2.165 ,  & ! mean value of phosphates 
     249         no3mean = 30.90 ,  & ! mean value of nitrate 
     250         siomean = 91.51      ! mean value of silicate 
     251       
     252      REAL(wp) ::   ztrasum 
     253      REAL(wp) ::   caralk, bicarb, co3 
     254 
     255      IF(lwp)  WRITE(numout,*) 
     256 
     257      IF( cp_cfg == "orca" .AND. .NOT. lk_trc_c1d ) THEN      ! ORCA condiguration (not 1D) ! 
     258         !                                                    ! --------------------------- ! 
     259         ! set total alkalinity, phosphate, NO3 & silicate 
     260 
     261         ! total alkalinity 
     262         ztrasum = 0.e0              
     263         DO jk = 1, jpk 
     264            DO jj = 1, jpj 
     265               DO ji = 1, jpi 
     266                  ztrasum = ztrasum + trn(ji,jj,jk,jptal) * tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
     267#  if defined key_off_degrad 
     268                     &              * facvol(ji,jj,jk)   & 
     269#  endif 
     270                     &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     271               END DO 
     272            END DO 
     273         END DO 
     274         IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain   
     275          
     276         ztrasum = ztrasum / areatot * 1.e6 
     277         IF(lwp) WRITE(numout,*) '       TALK mean : ', ztrasum 
     278         trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / ztrasum 
     279             
     280         ! phosphate 
     281         ztrasum = 0.e0 
     282         DO jk = 1, jpk 
     283            DO jj = 1, jpj 
     284               DO ji = 1, jpi 
     285                  ztrasum = ztrasum + trn(ji,jj,jk,jppo4) * tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
     286#  if defined key_off_degrad 
     287                     &              * facvol(ji,jj,jk)   & 
     288#  endif 
     289                     &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     290               END DO 
     291            END DO 
     292         END DO 
     293         IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain   
     294          
     295         ztrasum = ztrasum / areatot * 1.e6 / 122. 
     296         IF(lwp) WRITE(numout,*) '       PO4  mean : ', ztrasum 
     297         trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / ztrasum 
     298         
     299         ! Nitrates           
     300         ztrasum = 0.e0 
     301         DO jk = 1, jpk 
     302            DO jj = 1, jpj 
     303               DO ji = 1, jpi 
     304                  ztrasum = ztrasum + trn(ji,jj,jk,jpno3) * tmask(ji,jj,jk) * tmask_i(ji,jj)  & 
     305#  if defined key_off_degrad 
     306                     &              * facvol(ji,jj,jk)   & 
     307#  endif 
     308                     &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     309               END DO 
     310            END DO 
     311         END DO 
     312         IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain   
     313          
     314         ztrasum = ztrasum / areatot * 1.e6 / 7.6 
     315         IF(lwp) WRITE(numout,*) '       NO3  mean : ', ztrasum 
     316         trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / ztrasum 
     317          
     318         ! Silicate 
     319         ztrasum = 0.e0 
     320         DO jk = 1, jpk 
     321            DO jj = 1, jpj 
     322               DO ji = 1, jpi 
     323                  ztrasum = ztrasum + trn(ji,jj,jk,jpsil) * tmask(ji,jj,jk) * tmask_i(ji,jj)   & 
     324#  if defined key_off_degrad 
     325                     &              * facvol(ji,jj,jk)   & 
     326#  endif 
     327                     &              * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     328               END DO 
     329            END DO 
     330         END DO 
     331         IF( lk_mpp )   CALL mpp_sum( ztrasum )     ! sum over the global domain   
     332         ztrasum = ztrasum / areatot * 1.e6 
     333         IF(lwp) WRITE(numout,*) '       SiO3 mean : ', ztrasum 
     334         trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * siomean / ztrasum )  
     335         ! 
     336      ENDIF 
     337 
     338!#if defined key_kriest 
     339!     !! Initialize number of particles from a standart restart file 
     340!     !! The name of big organic particles jpgoc has been only change 
     341!     !! and replace by jpnum but the values here are concentration 
     342!     trn(:,:,:,jppoc) = trn(:,:,:,jppoc) + trn(:,:,:,jpnum) 
     343!     trn(:,:,:,jpnum) = trn(:,:,:,jppoc) / ( 6. * xkr_massp ) 
     344!#endif 
     345      !!  Set hi (???) from  total alcalinity, borat (???), akb3 (???) and ak23 (???) 
     346      !!  --------------------------------------------------------------------- 
     347      DO jk = 1, jpk 
     348         DO jj = 1, jpj 
     349            DO ji = 1,jpi 
     350               caralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.e-8 / ( rtrn + akb3(ji,jj,jk) ) ) 
     351               co3    = ( caralk - trn(ji,jj,jk,jpdic) ) *       tmask(ji,jj,jk)   & 
     352                  &   +             0.5e-3               * ( 1.- tmask(ji,jj,jk) ) 
     353               bicarb = 2.* trn(ji,jj,jk,jpdic) - caralk 
     354               hi(ji,jj,jk) = ( ak23(ji,jj,jk) * bicarb / co3 )   *       tmask(ji,jj,jk)   & 
     355                  &         +             1.0e-9                  * ( 1.- tmask(ji,jj,jk) ) 
     356            END DO 
     357         END DO 
     358      END DO 
     359 
     360   END SUBROUTINE trc_rst_ini 
     361 
     362#endif 
     363      !!---------------------------------------------------------------------- 
     364 
     365   SUBROUTINE trc_rst_stat 
     366      !!---------------------------------------------------------------------- 
     367      !!                    ***  trc_rst_stat  *** 
     368      !! 
     369      !! ** purpose  :   Compute tracers statistics 
     370      !!---------------------------------------------------------------------- 
     371 
     372      INTEGER  :: ji, jj, jk, jn 
     373      REAL(wp) :: zdiag_var, zdiag_varmin, zdiag_varmax, zdiag_tot 
     374      REAL(wp) :: zder 
     375      !!---------------------------------------------------------------------- 
     376 
     377 
     378      IF( lwp ) THEN 
     379         WRITE(numout,*)  
     380         WRITE(numout,*) '           ----TRACER STAT----             ' 
     381         WRITE(numout,*)  
     382      ENDIF 
     383       
     384      zdiag_tot = 0.e0 
     385      DO jn = 1, jptra 
     386         zdiag_var    = 0.e0 
     387         zdiag_varmin = 0.e0 
     388         zdiag_varmax = 0.e0 
     389         DO ji = 1, jpi 
     390            DO jj = 1, jpj 
     391               DO jk = 1,jpk 
     392                  zdiag_var = zdiag_var + trn(ji,jj,jk,jn) * tmask(ji,jj,jk) * tmask_i(ji,jj)   & 
     393#if defined key_off_degrad 
     394                     &   * facvol(ji,jj,jk)   & 
     395#endif 
     396                     &   * e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
     397               END DO 
     398            END DO 
     399         END DO 
     400          
     401         zdiag_varmin = MINVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
     402         zdiag_varmax = MAXVAL( trn(:,:,:,jn), mask= ((tmask*SPREAD(tmask_i,DIM=3,NCOPIES=jpk).NE.0.)) ) 
     403         IF( lk_mpp ) THEN 
     404            CALL mpp_min( zdiag_varmin )      ! min over the global domain 
     405            CALL mpp_max( zdiag_varmax )      ! max over the global domain 
     406            CALL mpp_sum( zdiag_var    )      ! sum over the global domain 
     407         END IF 
     408         zdiag_tot = zdiag_tot + zdiag_var 
     409         zdiag_var = zdiag_var / areatot 
     410         IF(lwp) WRITE(numout,*) '   MEAN NO ', jn, ctrcnm(jn), ' = ', zdiag_var,   & 
     411            &                    ' MIN = ', zdiag_varmin, ' MAX = ', zdiag_varmax 
     412      END DO 
     413       
     414      zder = ( ( zdiag_tot - trai ) / ( trai + 1.e-12 )  ) * 100._wp 
     415      IF(lwp) WRITE(numout,*) '   Integral of all tracers over the full domain  = ', zdiag_tot 
     416      IF(lwp) WRITE(numout,*) '   Drift of the sum of all tracers =', zder, ' %' 
     417       
     418   END SUBROUTINE trc_rst_stat 
    395419 
    396420#else 
Note: See TracChangeset for help on using the changeset viewer.