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 3174 – NEMO

Changeset 3174


Ignore:
Timestamp:
2011-11-23T21:48:06+01:00 (12 years ago)
Author:
cetlod
Message:

Add mass conservation checking in PISCES

Location:
branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/TOP_SRC
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90

    r3160 r3174  
    4040   PUBLIC   trc_sms_pisces    ! called in trcsms.F90 
    4141 
     42   LOGICAL ::  ln_check_mass = .false.       !: Flag to check mass conservation  
     43 
     44   INTEGER ::  numno3  !: logical unit for NO3 budget 
     45   INTEGER ::  numalk  !: logical unit for talk budget 
     46   INTEGER ::  numsil  !: logical unit for Si budget 
     47 
    4248   !!---------------------------------------------------------------------- 
    4349   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    7076      IF( kt == nittrc000 )                                                CALL trc_sms_pisces_init       ! Initialization (first time-step only) 
    7177      IF( ln_rsttr .AND. ln_pisdmp .AND. MOD( kt - 1, nn_pisdmp ) == 0 )   CALL trc_sms_pisces_dmp( kt )  ! Relaxation of some tracers 
     78                                                                           CALL trc_sms_pisces_mass_conserv( kt ) 
    7279 
    7380      IF( ndayflxtr /= nday_year ) THEN      ! New days 
     
    101108        CALL lbc_lnk( tra(:,:,:,jn), 'T', 1. ) 
    102109      END DO 
    103  
    104110 
    105111      IF( l_trdtrc ) THEN 
     
    219225   END SUBROUTINE trc_sms_pisces_init 
    220226 
     227   SUBROUTINE trc_sms_pisces_mass_conserv ( kt ) 
     228      !!---------------------------------------------------------------------- 
     229      !!                  ***  ROUTINE trc_sms_pisces_mass_conserv  *** 
     230      !! 
     231      !! ** Purpose :  Mass conservation check  
     232      !! 
     233      !!--------------------------------------------------------------------- 
     234      ! 
     235      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
     236      !! 
     237      REAL(wp) :: zalkbudget, zno3budget, zsilbudget 
     238      ! 
     239      NAMELIST/nampismass/ ln_check_mass 
     240      !!--------------------------------------------------------------------- 
     241 
     242      IF( kt == nittrc000 ) THEN  
     243         REWIND( numnatp )        
     244         READ  ( numnatp, nampismass ) 
     245         IF(lwp) THEN                         ! control print 
     246            WRITE(numout,*) ' ' 
     247            WRITE(numout,*) ' Namelist parameter for mass conservation checking' 
     248            WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
     249            WRITE(numout,*) '    Flag to check mass conservation of NO3/Si/TALK ln_check_mass = ', ln_check_mass 
     250         ENDIF 
     251 
     252         IF( ln_check_mass .AND. lwp) THEN      !   Open budget file of NO3, ALK, Si 
     253            CALL ctl_opn( numno3, 'no3.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     254            CALL ctl_opn( numsil, 'sil.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     255            CALL ctl_opn( numalk, 'talk.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
     256         ENDIF 
     257      ENDIF 
     258 
     259      IF( ln_check_mass ) THEN      !   Compute the budget of NO3, ALK, Si 
     260         zno3budget = glob_sum( (   trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)  & 
     261            &                     + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
     262            &                     + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  & 
     263            &                     + trn(:,:,:,jppoc) + trn(:,:,:,jpgoc)  & 
     264            &                     + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  )  
     265         !  
     266         zsilbudget = glob_sum( (   trn(:,:,:,jpsil) + trn(:,:,:,jpdsi)  & 
     267            &                     + trn(:,:,:,jpbsi)                     ) * cvol(:,:,:)  ) 
     268         !  
     269         zalkbudget = glob_sum( (   trn(:,:,:,jpno3) * rno3              & 
     270            &                     + trn(:,:,:,jptal)                     & 
     271            &                     + trn(:,:,:,jpcal) * 2.                ) * cvol(:,:,:)  ) 
     272 
     273         IF( lwp ) THEN 
     274            WRITE(numno3,9500) kt,  zno3budget / areatot 
     275            WRITE(numsil,9500) kt,  zsilbudget / areatot 
     276            WRITE(numalk,9500) kt,  zalkbudget / areatot 
     277         ENDIF 
     278       ENDIF 
     279 9500  FORMAT(i4,e18.10)      
     280       ! 
     281   END SUBROUTINE trc_sms_pisces_mass_conserv 
     282 
    221283#else 
    222284   !!====================================================================== 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/TOP_SRC/trcini.F90

    r3169 r3174  
    5858      !!--------------------------------------------------------------------- 
    5959      INTEGER ::   jk, jn, jl    ! dummy loop indices 
    60       INTEGER ::   ierr          ! local integer 
    6160      CHARACTER (len=25) :: charout 
    6261      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta   ! 4D  workspace 
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/TOP_SRC/trcstp.F90

    r3166 r3174  
    9898      END DO 
    9999      IF( lwp ) WRITE(numstr,9300) kt,  ztrai / areatot 
    100 9300  FORMAT(' iter :',i4,'    global content :',e18.10) 
     1009300  FORMAT(i4,e18.10) 
    101101      ! 
    102102      IF( nn_timing == 1 )   CALL timing_stop('trc_stp') 
Note: See TracChangeset for help on using the changeset viewer.