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 6453 for branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90 – NEMO

Ignore:
Timestamp:
2016-04-08T10:10:11+02:00 (8 years ago)
Author:
aumont
Message:

New developments of PISCES (QUOTA, ligands, lability, ...)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    r6204 r6453  
    66   !! History :   3.5  !  2012-07 (O. Aumont, C. Ethe) Original code 
    77   !!---------------------------------------------------------------------- 
    8 #if defined key_pisces 
     8#if defined key_pisces || defined key_pisces_quota 
    99   !!---------------------------------------------------------------------- 
    1010   !!   'key_pisces'                                       PISCES bio-model 
     
    4242   REAL(wp), PUBLIC  :: concfediaz  !: Fe half-saturation Cste for diazotrophs  
    4343   REAL(wp)          :: hratio      !: Fe:3He ratio assumed for vent iron supply 
     44#if defined key_ligand 
     45   REAL(wp), PUBLIC  :: fep_rats    !: Fep/Fer ratio from sed  sources 
     46   REAL(wp), PUBLIC  :: fep_rath    !: Fep/Fer ratio from hydro sources 
     47#endif 
    4448 
    4549   LOGICAL , PUBLIC  :: ll_sbc 
     
    7276   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdic, rivalk    !: river input fields 
    7377   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdin, rivdip    !: river input fields 
     78#if defined key_pisces_quota 
     79   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdon, rivdop    !: river input fields 
     80   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdoc    !: river input fields 
     81#endif 
    7482   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdsi    !: river input fields 
    7583   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: nitdep    !: atmospheric N deposition  
     
    8088   REAL(wp), PUBLIC :: rivdininput, rivdipinput, rivdsiinput 
    8189 
    82  
    8390   !!* Substitution 
    8491#  include "top_substitute.h90" 
    8592   !!---------------------------------------------------------------------- 
    8693   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    87    !! $Id$  
     94   !! $Header:$  
    8895   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    8996   !!---------------------------------------------------------------------- 
     
    140147            DO jj = 1, jpj 
    141148               DO ji = 1, jpi 
    142                   zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
     149                  zcoef = ryyss * cvol(ji,jj,1)  
    143150                  rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
    144                      &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     151                     &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     152#if defined key_pisces_quota 
     153                  rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) ) & 
     154                     &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     155                  rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) ) & 
     156                     &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
     157                  rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) ) & 
     158                     &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     159                  rivdoc(ji,jj) = ( sf_river(jr_doc)%fnow(ji,jj,1) ) & 
     160                     &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     161                  rivdon(ji,jj) = ( sf_river(jr_don)%fnow(ji,jj,1) ) & 
     162                     &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
     163                  rivdop(ji,jj) = ( sf_river(jr_dop)%fnow(ji,jj,1) ) & 
     164                     &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     165#else 
    145166                  rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) + sf_river(jr_doc)%fnow(ji,jj,1) ) & 
    146                      &              * 1.E3         / ( 12. * zcoef + rtrn ) 
     167                     &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
    147168                  rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) + sf_river(jr_don)%fnow(ji,jj,1) ) & 
    148                      &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) 
     169                     &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
    149170                  rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) + sf_river(jr_dop)%fnow(ji,jj,1) ) & 
    150                      &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) 
     171                     &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     172#endif 
    151173                  rivdsi(ji,jj) =   sf_river(jr_dsi)%fnow(ji,jj,1)                                    & 
    152                      &              * 1.E3        / ( 28.1 * zcoef + rtrn ) 
     174                     &              * 1.E3 / ( 28.1 * zcoef + rtrn ) * tmask(ji,jj,1) 
    153175               END DO 
    154176            END DO 
     
    192214      INTEGER  :: ios                 ! Local integer output status for namelist read 
    193215      INTEGER  :: ik50                !  last level where depth less than 50 m 
    194       INTEGER  :: isrow             ! index for ORCA1 starting row 
    195216      REAL(wp) :: zexpide, zdenitide, zmaskt 
    196217      REAL(wp) :: ztimes_dust, ztimes_riv, ztimes_ndep  
     
    208229        &                sn_riverdip, sn_riverdop, sn_riverdsi, sn_ndepo, sn_ironsed, sn_hydrofe, & 
    209230        &                ln_dust, ln_solub, ln_river, ln_ndepo, ln_ironsed, ln_ironice, ln_hydrofe,    & 
    210         &                sedfeinput, dustsolub, icefeinput, wdust, mfrac, nitrfix, diazolight, concfediaz, hratio 
     231        &                sedfeinput, dustsolub, icefeinput, wdust, mfrac, nitrfix, diazolight, concfediaz,   & 
     232#if defined key_ligand 
     233        &                fep_rats, fep_rath,                     & 
     234#endif 
     235        &                hratio 
    211236      !!---------------------------------------------------------------------- 
    212237      ! 
     
    222247902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp ) 
    223248      IF(lwm) WRITE ( numonp, nampissbc ) 
    224  
    225       IF ( ( nn_ice_tr >= 0 ) .AND. ln_ironice ) THEN 
    226          IF(lwp) THEN 
    227             WRITE(numout,*) ' ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 
    228             WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 
    229             WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 
    230             ln_ironice = .FALSE. 
    231          ENDIF 
    232       ENDIF 
    233249 
    234250      IF(lwp) THEN 
     
    252268         WRITE(numout,*) '    fe half-saturation cste for diazotrophs  concfediaz  = ', concfediaz 
    253269         WRITE(numout,*) '    Fe to 3He ratio assumed for vent iron supply hratio  = ', hratio 
     270#if defined key_ligand 
     271         WRITE(numout,*) '    Fep/Fer ratio from sed sources                       = ', fep_rats 
     272         WRITE(numout,*) '    Fep/Fer ratio from sed hydro sources                 = ', fep_rath 
     273#endif 
    254274      END IF 
    255275 
     
    337357         ! 
    338358         ALLOCATE( rivdic(jpi,jpj), rivalk(jpi,jpj), rivdin(jpi,jpj), rivdip(jpi,jpj), rivdsi(jpi,jpj) )  
     359#if defined key_pisces_quota 
     360         ALLOCATE( rivdon(jpi,jpj), rivdop(jpi,jpj), rivdoc(jpi,jpj) ) 
     361#endif 
    339362         ! 
    340363         ALLOCATE( sf_river(jpriv), rivinput(jpriv), STAT=ierr1 )           !* allocate and fill sf_river (forcing structure) with sn_river_ 
     
    380403         rivalkinput = 0._wp 
    381404      END IF  
     405 
    382406      ! nutrient input from dust 
    383407      ! ------------------------ 
     
    449473            END DO 
    450474         END DO 
    451          ! 
     475         IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 
     476            ii0 = 176   ;   ii1 =  176        ! Southern Island : Kerguelen 
     477            ij0 =  37   ;   ij1 =   37  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
     478            ! 
     479            ii0 = 119   ;   ii1 =  119        ! South Georgia 
     480            ij0 =  29   ;   ij1 =   29  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
     481            ! 
     482            ii0 = 111   ;   ii1 =  111        ! Falklands 
     483            ij0 =  35   ;   ij1 =   35  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
     484            ! 
     485            ii0 = 168   ;   ii1 =  168        ! Crozet 
     486            ij0 =  40   ;   ij1 =   40  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
     487            ! 
     488            ii0 = 119   ;   ii1 =  119        ! South Orkney 
     489            ij0 =  28   ;   ij1 =   28  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
     490            ! 
     491            ii0 = 140   ;   ii1 =  140        ! Bouvet Island 
     492            ij0 =  33   ;   ij1 =   33  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
     493            ! 
     494            ii0 = 178   ;   ii1 =  178        ! Prince edwards 
     495            ij0 =  34   ;   ij1 =   34  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
     496            ! 
     497            ii0 =  43   ;   ii1 =   43        ! Balleny islands 
     498            ij0 =  21   ;   ij1 =   21  ;   zcmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  0.3_wp   
     499         ENDIF 
    452500         CALL lbc_lnk( zcmask , 'T', 1. )      ! lateral boundary conditions on cmask   (sign unchanged) 
    453          ! 
    454501         DO jk = 1, jpk 
    455502            DO jj = 1, jpj 
     
    457504                  zexpide   = MIN( 8.,( fsdept(ji,jj,jk) / 500. )**(-1.5) ) 
    458505                  zdenitide = -0.9543 + 0.7662 * LOG( zexpide ) - 0.235 * LOG( zexpide )**2 
    459                   zcmask(ji,jj,jk) = zcmask(ji,jj,jk) * MIN( 1., EXP( zdenitide ) / 0.5 ) 
     506                  zcmask(ji,jj,jk) = zcmask(ji,jj,jk) * MIN( 1., EXP( zdenitide ) / 0.5 ) * tmask(ji,jj,jk) 
    460507               END DO 
    461508            END DO 
     
    465512         ironsed(:,:,jpk) = 0._wp 
    466513         DO jk = 1, jpkm1 
    467             ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( fse3t(:,:,jk) * rday ) 
     514            ironsed(:,:,jk) = sedfeinput * zcmask(:,:,jk) / ( fse3t(:,:,jk) * rday )  
    468515         END DO 
    469516         DEALLOCATE( zcmask) 
     
    483530         CALL iom_close( numhydro ) 
    484531         ! 
    485          hydrofe(:,:,:) = ( hydrofe(:,:,:) * hratio ) / ( cvol(:,:,:) * ryyss + rtrn ) / 1000._wp 
     532         hydrofe(:,:,:) = ( hydrofe(:,:,:) * hratio ) / ( cvol(:,:,:) * ryyss + rtrn ) / 1000._wp * tmask(:,:,:) 
    486533         ! 
    487534      ENDIF 
     
    519566 
    520567   !!====================================================================== 
    521 END MODULE p4zsbc 
     568END MODULE  p4zsbc 
Note: See TracChangeset for help on using the changeset viewer.