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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    • Property svn:keywords set to Id
    r4624 r6225  
    2525   PUBLIC   p4z_sbc_init    
    2626 
    27    !! * Shared module variables 
    2827   LOGICAL , PUBLIC  :: ln_dust     !: boolean for dust input from the atmosphere 
    2928   LOGICAL , PUBLIC  :: ln_solub    !: boolean for variable solubility of atmospheric iron 
     
    4544   LOGICAL , PUBLIC  :: ll_sbc 
    4645 
    47    !! * Module variables 
    4846   LOGICAL  ::  ll_solub 
    4947 
     
    8078   REAL(wp), PUBLIC :: rivdininput, rivdipinput, rivdsiinput 
    8179 
    82    REAL(wp) :: ryyss                    !: number of seconds per year  
    83  
    84    !!* Substitution 
    85 #  include "top_substitute.h90" 
     80   !! * Substitutions 
     81#  include "vectopt_loop_substitute.h90" 
    8682   !!---------------------------------------------------------------------- 
    8783   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    88    !! $Header:$  
     84   !! $Id$  
    8985   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    9086   !!---------------------------------------------------------------------- 
    91  
    9287CONTAINS 
    9388 
     
    118113         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN 
    119114            CALL fld_read( kt, 1, sf_dust ) 
    120             dust(:,:) = sf_dust(1)%fnow(:,:,1) 
     115            IF( nn_ice_tr == -1 .AND. .NOT. ln_ironice ) THEN 
     116               dust(:,:) = sf_dust(1)%fnow(:,:,1) 
     117            ELSE 
     118               dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.0 - fr_i(:,:) ) 
     119            ENDIF 
    121120         ENDIF 
    122121      ENDIF 
     
    137136            DO jj = 1, jpj 
    138137               DO ji = 1, jpi 
    139                   zcoef = ryyss * cvol(ji,jj,1)  
     138                  zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
    140139                  rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
    141140                     &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     
    159158            DO jj = 1, jpj 
    160159               DO ji = 1, jpi 
    161                   nitdep(ji,jj) = sf_ndepo(1)%fnow(ji,jj,1) / rno3 / ( 14E6 * ryyss * fse3t(ji,jj,1) + rtrn ) 
     160                  nitdep(ji,jj) = sf_ndepo(1)%fnow(ji,jj,1) / rno3 / ( 14E6 * ryyss * e3t_n(ji,jj,1) + rtrn ) 
    162161               END DO 
    163162            END DO 
     
    188187      INTEGER  :: ierr, ierr1, ierr2, ierr3 
    189188      INTEGER  :: ios                 ! Local integer output status for namelist read 
     189      INTEGER  :: ik50                !  last level where depth less than 50 m 
     190      INTEGER  :: isrow             ! index for ORCA1 starting row 
    190191      REAL(wp) :: zexpide, zdenitide, zmaskt 
    191192      REAL(wp) :: ztimes_dust, ztimes_riv, ztimes_ndep  
     
    208209      IF( nn_timing == 1 )  CALL timing_start('p4z_sbc_init') 
    209210      ! 
    210       ryyss   = nyear_len(1) * rday    ! number of seconds per year and per month 
    211       ! 
    212211      !                            !* set file information 
    213212      REWIND( numnatp_ref )              ! Namelist nampissbc in reference namelist : Pisces external sources of nutrients 
     
    219218902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp ) 
    220219      IF(lwm) WRITE ( numonp, nampissbc ) 
     220 
     221      IF ( ( nn_ice_tr >= 0 ) .AND. ln_ironice ) THEN 
     222         IF(lwp) THEN 
     223            WRITE(numout,*) ' ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 
     224            WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 
     225            WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 
     226            ln_ironice = .FALSE. 
     227         ENDIF 
     228      ENDIF 
    221229 
    222230      IF(lwp) THEN 
     
    250258      ENDIF 
    251259 
     260      ! set the number of level over which river runoffs are applied  
     261      ! online configuration : computed in sbcrnf 
     262      IF( lk_offline ) THEN 
     263        nk_rnf(:,:) = 1 
     264        h_rnf (:,:) = gdept_n(:,:,1) 
     265      ENDIF 
     266 
    252267      ! dust input from the atmosphere 
    253268      ! ------------------------------ 
     
    361376         rivalkinput = 0._wp 
    362377      END IF  
    363  
    364378      ! nutrient input from dust 
    365379      ! ------------------------ 
     
    413427         CALL iom_close( numiron ) 
    414428         ! 
    415          DO jk = 1, 5 
     429         ik50 = 5        !  last level where depth less than 50 m 
     430         DO jk = jpkm1, 1, -1 
     431            IF( gdept_1d(jk) > 50. )  ik50 = jk - 1 
     432         END DO 
     433         IF (lwp) WRITE(numout,*) 
     434         IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ',  ik50,' ', gdept_1d(ik50+1) 
     435         IF (lwp) WRITE(numout,*) 
     436         DO jk = 1, ik50 
    416437            DO jj = 2, jpjm1 
    417438               DO ji = fs_2, fs_jpim1 
     
    424445            END DO 
    425446         END DO 
    426          IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 
    427             ii0 = 176   ;   ii1 =  176        ! Southern Island : Kerguelen 
    428             ij0 =  37   ;   ij1 =   37  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    429             ! 
    430             ii0 = 119   ;   ii1 =  119        ! South Georgia 
    431             ij0 =  29   ;   ij1 =   29  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    432             ! 
    433             ii0 = 111   ;   ii1 =  111        ! Falklands 
    434             ij0 =  35   ;   ij1 =   35  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    435             ! 
    436             ii0 = 168   ;   ii1 =  168        ! Crozet 
    437             ij0 =  40   ;   ij1 =   40  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    438             ! 
    439             ii0 = 119   ;   ii1 =  119        ! South Orkney 
    440             ij0 =  28   ;   ij1 =   28  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    441             ! 
    442             ii0 = 140   ;   ii1 =  140        ! Bouvet Island 
    443             ij0 =  33   ;   ij1 =   33  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    444             ! 
    445             ii0 = 178   ;   ii1 =  178        ! Prince edwards 
    446             ij0 =  34   ;   ij1 =   34  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    447             ! 
    448             ii0 =  43   ;   ii1 =   43        ! Balleny islands 
    449             ij0 =  21   ;   ij1 =   21  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
    450          ENDIF 
     447         ! 
    451448         CALL lbc_lnk( zcmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
     449         ! 
    452450         DO jk = 1, jpk 
    453451            DO jj = 1, jpj 
    454452               DO ji = 1, jpi 
    455                   zexpide   = MIN( 8.,( fsdept(ji,jj,jk) / 500. )**(-1.5) ) 
     453                  zexpide   = MIN( 8.,( gdept_n(ji,jj,jk) / 500. )**(-1.5) ) 
    456454                  zdenitide = -0.9543 + 0.7662 * LOG( zexpide ) - 0.235 * LOG( zexpide )**2 
    457455                  zcmask(ji,jj,jk) = zcmask(ji,jj,jk) * MIN( 1., EXP( zdenitide ) / 0.5 ) 
     
    463461         ironsed(:,:,jpk) = 0._wp 
    464462         DO jk = 1, jpkm1 
    465             ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( fse3t(:,:,jk) * rday ) 
     463            ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( e3t_n(:,:,jk) * rday ) 
    466464         END DO 
    467465         DEALLOCATE( zcmask) 
     
    517515 
    518516   !!====================================================================== 
    519 END MODULE  p4zsbc 
     517END MODULE p4zsbc 
Note: See TracChangeset for help on using the changeset viewer.