Ignore:
Timestamp:
2013-11-04T13:54:28+01:00 (8 years ago)
Author:
cetlod
Message:

merge in trunk changes between r3853 and r3940 and commit the changes, see ticket #1169

Location:
branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90

    r4147 r4148  
    263263               zdep    = MIN( 1., 1000. / fsdept(ji,jj,jk) ) 
    264264               zlam1b  = xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 
    265                zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep *zfecoll 
     265               zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trn(ji,jj,jk,jpfer) 
    266266 
    267267               !  Compute the coagulation of colloidal iron. This parameterization  
     
    278278               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 
    279279#else 
    280                zlam1b = 3.53E3 *   trn(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) + 1E-4 * ( 1. - zlamfac ) * zdep  
     280               zlam1b = 3.53E3 *   trn(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
    281281               zaggdfeb = zlam1b * zstep * zfecoll 
    282282               ! 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90

    r4147 r4148  
    109109         ! then the first atmospheric CO2 record read is at years(1) 
    110110         zyr_dec = REAL( nyear + nn_offset, wp ) + REAL( nday_year, wp ) / REAL( nyear_len(1), wp ) 
    111          jm = 2 
    112          DO WHILE( jm <= nmaxrec .AND. years(jm-1) < zyr_dec .AND. years(jm) >= zyr_dec ) ;  jm = jm + 1 ;  END DO 
     111         jm = 1 
     112         DO WHILE( jm <= nmaxrec .AND. years(jm) < zyr_dec ) ;  jm = jm + 1 ;  END DO 
    113113         iind = jm  ;   iindm1 = jm - 1 
    114114         zdco2dt = ( atcco2h(iind) - atcco2h(iindm1) ) / ( years(iind) - years(iindm1) + rtrn ) 
     
    196196      END DO 
    197197 
    198       t_oce_co2_flx = t_oce_co2_flx + glob_sum( oce_co2(:,:) )            ! Cumulative Total Flux of Carbon 
    199       t_atm_co2_flx = glob_sum( satmco2(:,:) * patm(:,:) * e1e2t(:,:) )   ! Total atmospheric pCO2 
     198      t_oce_co2_flx = t_oce_co2_flx + glob_sum( oce_co2(:,:) )      ! Cumulative Total Flux of Carbon 
     199      t_atm_co2_flx = glob_sum( satmco2(:,:) * e1e2t(:,:) )         ! Total atmospheric pCO2 
    200200 
    201201      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r4147 r4148  
    5454   !!---------------------------------------------------------------------- 
    5555   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    56    !! $Id: p4zmeso.F90 3295 2012-01-30 15:49:07Z cetlod $  
     56   !! $Id: p4zmeso.F90 3160 2011-11-20 14:27:18Z cetlod $  
    5757   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    5858   !!---------------------------------------------------------------------- 
     
    7272      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
    7373      REAL(wp) :: zgraze2 , zdenom, zdenom2, zncratio 
    74       REAL(wp) :: zfact   , zstep, zfood, zfoodlim 
     74      REAL(wp) :: zfact   , zstep, zfood, zfoodlim, zproport 
     75      REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2 
    7576      REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotf 
    76       REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2, zmortzgoc, zgrasrat 
     77      REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2, zgrasrat 
    7778#if defined key_kriest 
    7879      REAL znumpoc 
     
    8081      REAL(wp) :: zrespz2, ztortz2, zgrazd, zgrazz, zgrazpof 
    8182      REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 
    82       REAL(wp) :: zgrazfff, zgrazffe 
     83      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 
     84      CHARACTER (len=25) :: charout 
    8385      REAL(wp) :: zrfact2 
    8486      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing 
    85       CHARACTER (len=25) :: charout 
     87 
    8688      !!--------------------------------------------------------------------- 
    8789      ! 
    8890      IF( nn_timing == 1 )  CALL timing_start('p4z_meso') 
    8991      ! 
    90       IF( ln_diatrc .AND. lk_iomput )  CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    91       ! 
     92      IF( ln_diatrc .AND. lk_iomput ) THEN 
     93         CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     94         zgrazing(:,:,:) = 0._wp 
     95      ENDIF 
     96 
    9297      DO jk = 1, jpkm1 
    9398         DO jj = 1, jpj 
     
    118123 
    119124               zfood     = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc  
    120                zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood , xthresh2 ) ) 
     125               zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 
    121126               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
    122127               zdenom2   = zdenom / ( zfood + rtrn ) 
     
    135140               !  ---------------------------------- 
    136141# if ! defined key_kriest 
    137                zgrazffe  = grazflux * zstep * wsbio4(ji,jj,jk)          & 
    138                  &                 * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 
    139                zgrazfff  = zgrazffe * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     142               zgrazffeg = grazflux  * zstep * wsbio4(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 
     143               zgrazfffg = zgrazffeg * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     144# endif 
     145               zgrazffep = grazflux  * zstep *  wsbio3(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 
     146               zgrazfffp = zgrazffep * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
     147              ! 
     148# if ! defined key_kriest 
     149              zgraztot  = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 
     150              ! Compute the proportion of filter feeders 
     151              zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztot) 
     152              ! Compute fractionation of aggregates. It is assumed that diatoms based aggregates are more prone to fractionation 
     153              ! since they are more porous (marine snow instead of fecal pellets) 
     154              zratio    = trn(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn ) 
     155              zratio2   = zratio * zratio 
     156              zfrac     = zproport * zgrazffeg * ( 0.1 + 3.9 * zratio2 / ( 1.**2 + zratio2 ) ) 
     157 
     158              zfracfe   = zfrac * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     159 
     160              zgrazffep = zproport * zgrazffep 
     161              zgrazffeg = zproport * zgrazffeg 
     162              zgrazfffp = zproport * zgrazfffp 
     163              zgrazfffg = zproport * zgrazfffg 
     164              zgraztot  = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 
     165              zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 
    140166# else 
    141                zgrazffe = grazflux * zstep * wsbio3(ji,jj,jk)     & 
    142                  &                 * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 
    143                zgrazfff   = zgrazffe * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
     167              zgraztot  = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep 
     168              ! Compute the proportion of filter feeders 
     169              zproport  = zgrazffep / ( zgraztot + rtrn ) 
     170              zgrazffep = zproport * zgrazffep 
     171              zgrazfffp = zproport * zgrazfffp 
     172              zgraztot  = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep 
     173              zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp 
    144174# endif 
    145               ! 
    146               zgraztot   = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffe 
    147               zgraztotf  = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfff  
    148175 
    149176              ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
     
    159186               zepshert  = epsher2 * MIN( 1., zncratio ) 
    160187               zepsherv  = zepshert * MIN( 1., zgrasrat / ferat3 ) 
    161                zgrarem2  = zgraztot * ( 1. - zepsherv - unass2 ) + zrespz2  & 
    162                &    + ( 1. - zepsherv - unass2 ) /( 1. - zepsherv + rtrn) * ztortz2 
    163                zgrafer2  = zgraztot * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv )    & 
    164                &    + ferat3 * ( zrespz2 + ( 1. - zepsherv - unass2 ) /( 1. - zepsherv + rtrn) * ztortz2 ) 
     188               zgrarem2  =  zgraztot * ( 1. - zepsherv - unass2 ) + zrespz2  & 
     189                  &       + ( 1. - zepsherv - unass2 ) /( 1. - zepsherv ) * ztortz2 
     190               zgrafer2  =  zgraztot * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv )    & 
     191                  &       + ferat3 * ( zrespz2 + ( 1. - zepsherv - unass2 ) /( 1. - zepsherv ) * ztortz2 ) 
    165192               zgrapoc2  = zgraztot * unass2 
    166193 
     
    174201               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 
    175202               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig               
    176 #if defined key_kriest 
    177                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc2 
    178                tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc2 * xkr_dmeso 
    179                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass2 
    180 #else 
    181                tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zgrapoc2 
    182                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zgraztotf * unass2 
    183 #endif 
     203 
    184204               zmortz2 = ztortz2 + zrespz2 
    185                zmortzgoc = unass2 / ( 1. - zepsherv + rtrn ) * ztortz2 
     205               zmortzgoc = unass2 / ( 1. - zepsherv ) * ztortz2 
    186206               tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz2 + zepsherv * zgraztot  
    187207               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazd 
     
    205225#if defined key_kriest 
    206226               znumpoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
    207                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffe 
    208                tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc & 
    209                   &    + zmortzgoc  * xkr_dmeso - zgrazffe * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn ) 
    210                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz2 - zgrazfff - zgrazpof 
     227               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 
     228               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso      & 
     229               &                   + zmortzgoc * xkr_dmeso - zgrazffep * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn ) 
     230               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz2 - zgrazfffp - zgrazpof + zgraztotf * unass2 
    211231#else 
    212                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc 
    213                tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffe 
    214                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof 
    215                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfff 
     232               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 
     233               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 
     234               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 
     235               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg + zgraztotf * unass2 - zfracfe 
    216236#endif 
    217  
    218237            END DO 
    219238         END DO 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90

    r4147 r4148  
    201201                      zconctemp2  = trn(ji,jj,jk,jpdia) - zconctemp 
    202202                      ! 
    203                       zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( enano(ji,jj,jk) ) ) 
     203                      zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -0.21 * enano(ji,jj,jk) ) ) 
    204204                      zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    205205 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    r3751 r4148  
    6969      REAL(wp) ::  zwflux, zfminus, zfplus 
    7070      REAL(wp) ::  zlim, zfact, zfactcal 
    71       REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit 
     71      REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zdenitt, zolimit 
    7272      REAL(wp) ::  zsiloss, zcaloss, zwsbio3, zwsbio4, zwscal, zdep, zwstpoc 
    7373      REAL(wp) ::  ztrfer, ztrpo4, zwdust 
     
    105105            DO ji = 1, jpi 
    106106               zdep    = rfact2 / fse3t(ji,jj,1) 
    107     !           zwflux  = ( emps(ji,jj) - emp(ji,jj) ) & 
    108     !           &        * tsn(ji,jj,1,jp_sal) / ( tsn(ji,jj,1,jp_sal) - 6.0 ) / 1000. 
    109                zwflux = 0. 
    110                zfminus = MIN( 0., -zwflux ) * trn(ji,jj,1,jpfer) * zdep 
    111                zfplus  = MAX( 0., -zwflux ) * 10E-9 * zdep 
     107               zwflux  = fmmflx(ji,jj) / 1000._wp 
     108               zfminus = MIN( 0._wp, -zwflux ) * trn(ji,jj,1,jpfer) * zdep 
     109               zfplus  = MAX( 0._wp, -zwflux ) * icefeinput * zdep 
    112110               zironice(ji,jj) =  zfplus + zfminus 
    113111            END DO 
     
    135133         ENDIF 
    136134         zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 28.1  * rmtss ) 
    137          zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 31.   * rmtss ) 
     135         zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 31.   * rmtss ) / po4r  
    138136         !                                              ! Iron solubilization of particles in the water column 
    139137         zwdust = 0.005 / ( wdust * 55.85 * 30.42 ) / ( 45. * rday )  
     
    246244#endif 
    247245 
    248       ! THEN this loss is scaled at each bottom grid cell for 
    249       ! equilibrating the total budget of silica in the ocean. 
    250       ! Thus, the amount of silica lost in the sediments equal 
    251       ! the supply at the surface (dust+rivers) 
     246      ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean. 
     247      ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 
    252248      ! ------------------------------------------------------ 
    253249#if ! defined key_sed 
     
    302298 
    303299#if ! defined key_sed 
    304             zpdenit  = MIN( ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     300            ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
     301            ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
     302            zpdenit  = MIN( 0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
    305303            z1pdenit = zwstpoc * zrivno3 - zpdenit 
    306             trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit 
    307             trn(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit 
    308             trn(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit 
    309             trn(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * zpdenit 
    310             trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * ( 1. + rdenit ) * zpdenit 
    311             trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit 
     304            zolimit = MIN( ( trn(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
     305            zdenitt = MIN(  0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
     306            trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
     307            trn(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
     308            trn(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
     309            trn(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 
     310            trn(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut 
     311            trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 
     312            trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
    312313            zwork4(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 
    313314#endif 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90

    r4147 r4148  
    156156            DO ji = 1, jpi 
    157157               IF( tmask(ji,jj,jk) == 1 ) THEN 
    158                  zwsmax = 0.8 * fse3t(ji,jj,jk) / xstep 
     158                 zwsmax = 0.5 * fse3t(ji,jj,jk) / xstep 
    159159                 wsbio3(ji,jj,jk) = MIN( wsbio3(ji,jj,jk), zwsmax * FLOAT( iiter1 ) ) 
    160160                 wsbio4(ji,jj,jk) = MIN( wsbio4(ji,jj,jk), zwsmax * FLOAT( iiter2 ) ) 
     
    217217               zaggdoc  = ( ( 0.369 * 0.3 * trn(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * zfact       & 
    218218               &            + 2.4 * zstep * trn(ji,jj,jk,jppoc) ) * 0.3 * trn(ji,jj,jk,jpdoc) 
    219 !               zaggdoc  = ( 0.83 * trn(ji,jj,jk,jpdoc) + 271. * trn(ji,jj,jk,jppoc) ) * zfact * trn(ji,jj,jk,jpdoc) 
    220219               ! transfer of DOC to GOC :  
    221220               ! 1st term is shear aggregation 
    222221               ! 2nd term is differential settling  
    223222               zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trn(ji,jj,jk,jpgoc) * 0.3 * trn(ji,jj,jk,jpdoc) 
    224 !               zaggdoc2 = 1.07e4 * zfact * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpdoc) 
    225223               ! tranfer of DOC to POC due to brownian motion 
    226 !               zaggdoc3 =   0.02 * ( 16706. * trn(ji,jj,jk,jppoc) + 231. * trn(ji,jj,jk,jpdoc) ) * zstep * trn(ji,jj,jk,jpdoc) 
    227224               zaggdoc3 =  ( 5095. * trn(ji,jj,jk,jppoc) + 114. * 0.3 * trn(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trn(ji,jj,jk,jpdoc) 
    228225 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r4147 r4148  
    7777      ! 
    7878      IF( ln_rsttr .AND. kt == nittrc000 )                         CALL p4z_rst( nittrc000, 'READ' )  !* read or initialize all required fields  
    79       IF( ln_rsttr  .AND. ln_pisclo )                              CALL p4z_clo            ! damping on closed seas 
    8079      IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt )      ! Relaxation of some tracers 
    8180      ! 
     
    165164      NAMELIST/nampiskrp/ xkr_eta, xkr_zeta, xkr_ncontent, xkr_mass_min, xkr_mass_max 
    166165#endif 
    167       NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp, ln_pisclo 
     166      NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp 
    168167      NAMELIST/nampismass/ ln_check_mass 
    169168      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    234233         WRITE(numout,*) '    Relaxation of tracer to glodap mean value             ln_pisdmp      =', ln_pisdmp 
    235234         WRITE(numout,*) '    Frequency of Relaxation                               nn_pisdmp      =', nn_pisdmp 
    236          WRITE(numout,*) '    Restoring of tracer to initial value  on closed seas  ln_pisclo      =', ln_pisclo 
    237235         WRITE(numout,*) ' ' 
    238236      ENDIF 
     
    436434   END SUBROUTINE p4z_chk_mass 
    437435 
    438    SUBROUTINE p4z_clo    
    439       !!--------------------------------------------------------------------- 
    440       !!                  ***  ROUTINE p4z_clo  *** 
    441       !! 
    442       !! ** Purpose :   Closed sea domain initialization 
    443       !! 
    444       !! ** Method  :   if a closed sea is located only in a model grid point 
    445       !!                we restore to initial data 
    446       !! 
    447       !! ** Action  :   ictsi1(), ictsj1() : south-west closed sea limits (i,j) 
    448       !!                ictsi2(), ictsj2() : north-east Closed sea limits (i,j) 
    449       !!---------------------------------------------------------------------- 
    450       INTEGER, PARAMETER           ::   npicts   = 4        ! number of closed sea 
    451       INTEGER, DIMENSION(npicts)   ::   ictsi1, ictsj1      ! south-west closed sea limits (i,j) 
    452       INTEGER, DIMENSION(npicts)   ::   ictsi2, ictsj2      ! north-east closed sea limits (i,j) 
    453       INTEGER :: ji, jj, jk, jn, jl, jc                     ! dummy loop indices 
    454       INTEGER :: ierr                                       ! local integer 
    455       REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta     ! 4D  workspace 
    456       !!---------------------------------------------------------------------- 
    457  
    458       IF(lwp) WRITE(numout,*) 
    459       IF(lwp) WRITE(numout,*)' p4z_clo : closed seas ' 
    460       IF(lwp) WRITE(numout,*)'~~~~~~~' 
    461  
    462       ! initial values 
    463       ictsi1(:) = 1  ;  ictsi2(:) = 1  
    464       ictsj1(:) = 1  ;  ictsj2(:) = 1  
    465  
    466       ! set the closed seas (in data domain indices) 
    467       ! ------------------- 
    468  
    469       IF( cp_cfg == "orca" ) THEN 
    470          ! 
    471          SELECT CASE ( jp_cfg ) 
    472          !                                           ! ======================= 
    473          CASE ( 2 )                                  !  ORCA_R2 configuration 
    474             !                                        ! ======================= 
    475             !                                            ! Caspian Sea 
    476             ictsi1(1)   =  11  ;  ictsj1(1)   = 103 
    477             ictsi2(1)   =  17  ;  ictsj2(1)   = 112 
    478             !                                            ! Great North American Lakes 
    479             ictsi1(2)   =  97  ;  ictsj1(2)   = 107 
    480             ictsi2(2)   = 103  ;  ictsj2(2)   = 111 
    481             !                                            ! Black Sea 1 : west part of the Black Sea 
    482             ictsi1(3)   = 174  ; ictsj1(3)   = 107 
    483             ictsi2(3)   = 181  ; ictsj2(3)   = 112 
    484             !                                            ! Black Sea 2 : est part of the Black Sea 
    485             ictsi1(4)   =   2  ;  ictsj1(4)   = 107 
    486             ictsi2(4)   =   6  ;  ictsj2(4)   = 112 
    487             !                                        ! ======================= 
    488          CASE ( 4 )                                  !  ORCA_R4 configuration 
    489             !                                        ! ======================= 
    490             !                                            ! Caspian Sea 
    491             ictsi1(1)   =  4  ;  ictsj1(1)   = 53 
    492             ictsi2(1)   =  4  ;  ictsj2(1)   = 56 
    493             !                                            ! Great North American Lakes 
    494             ictsi1(2)   = 49  ;  ictsj1(2)   = 55 
    495             ictsi2(2)   = 51  ;  ictsj2(2)   = 56 
    496             !                                            ! Black Sea 
    497             ictsi1(3)   = 88  ;  ictsj1(3)   = 55 
    498             ictsi2(3)   = 91  ;  ictsj2(3)   = 56 
    499             !                                            ! Baltic Sea 
    500             ictsi1(4)   = 75  ;  ictsj1(4)   = 59 
    501             ictsi2(4)   = 76  ;  ictsj2(4)   = 61 
    502             !                                        ! ======================= 
    503             !                                        ! ======================= 
    504          CASE ( 025 )                                ! ORCA_R025 configuration 
    505             !                                        ! ======================= 
    506                                                      ! Caspian + Aral sea 
    507             ictsi1(1)   = 1330 ; ictsj1(1)   = 645 
    508             ictsi2(1)   = 1400 ; ictsj2(1)   = 795 
    509             !                                        ! Azov Sea 
    510             ictsi1(2)   = 1284 ; ictsj1(2)   = 722 
    511             ictsi2(2)   = 1304 ; ictsj2(2)   = 747 
    512             ! 
    513          END SELECT 
    514          ! 
    515       ENDIF 
    516  
    517       ! convert the position in local domain indices 
    518       ! -------------------------------------------- 
    519       DO jc = 1, npicts  
    520          ictsi1(jc)   = mi0( ictsi1(jc) ) 
    521          ictsj1(jc)   = mj0( ictsj1(jc) ) 
    522  
    523          ictsi2(jc)   = mi1( ictsi2(jc) ) 
    524          ictsj2(jc)   = mj1( ictsj2(jc) ) 
    525       END DO 
    526  
    527       ! Restore close seas values to initial data 
    528       IF( ln_trcdta .AND. nb_trcdta > 0 )  THEN   ! Initialisation of tracer from a file that may also be used for damping 
    529          ! 
    530          CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )   ! Memory allocation 
    531          ! 
    532          CALL trc_dta( nittrc000, ztrcdta )   ! read tracer data at nittrc000 
    533          ! 
    534          DO jn = 1, jptra 
    535             IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    536                 jl = n_trc_index(jn) 
    537                 DO jc = 1, npicts 
    538                    DO jk = 1, jpkm1 
    539                       DO jj = ictsj1(jc), ictsj2(jc) 
    540                          DO ji = ictsi1(jc), ictsi2(jc) 
    541                             trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk,jl) * tmask(ji,jj,jk) 
    542                             trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
    543                          ENDDO 
    544                       ENDDO 
    545                    ENDDO 
    546                 ENDDO 
    547              ENDIF 
    548           ENDDO 
    549           CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 
    550       ENDIF 
    551       ! 
    552    END SUBROUTINE p4z_clo 
    553436#else 
    554437   !!====================================================================== 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90

    r4147 r4148  
    5858   LOGICAL  ::  ln_pisdmp          !: restoring or not of nutrients to a mean value 
    5959   INTEGER  ::  nn_pisdmp          !: frequency of relaxation or not of nutrients to a mean value 
    60    LOGICAL  ::  ln_pisclo          !: Restoring or not of nutrients to initial value on closed seas 
    6160 
    6261   !!* Mass conservation 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90

    r4147 r4148  
    1111   !!            3.3  !  2010-06  (C. Ethe, G. Madec) merge TRA-TRC  
    1212   !!---------------------------------------------------------------------- 
    13 #if  defined key_top && defined key_trcdmp  
    14    !!---------------------------------------------------------------------- 
    15    !!   key_trcdmp                                         internal damping 
     13#if  defined key_top  
    1614   !!---------------------------------------------------------------------- 
    1715   !!   trc_dmp      : update the tracer trend with the internal damping 
     
    2523   USE prtctl_trc      ! Print control for debbuging 
    2624   USE trdtra 
     25   USE trdmod_oce 
    2726 
    2827   IMPLICIT NONE 
     
    3029 
    3130   PUBLIC trc_dmp            ! routine called by step.F90 
     31   PUBLIC trc_dmp_clo        ! routine called by step.F90 
    3232   PUBLIC trc_dmp_alloc      ! routine called by nemogcm.F90 
    3333 
    34    LOGICAL , PUBLIC, PARAMETER ::   lk_trcdmp = .TRUE.   !: internal damping flag 
    35  
    36    !                          !!* Namelist namtrc_dmp : passive tracer newtonian damping * 
    37    INTEGER  ::   nn_hdmp_tr    ! = 0/-1/'latitude' for damping over passive tracer 
    38    INTEGER  ::   nn_zdmp_tr    ! = 0/1/2 flag for damping in the mixed layer 
    39    REAL(wp) ::   rn_surf_tr    ! surface time scale for internal damping        [days] 
    40    REAL(wp) ::   rn_bot_tr     ! bottom time scale for internal damping         [days] 
    41    REAL(wp) ::   rn_dep_tr     ! depth of transition between rn_surf and rn_bot [meters] 
    42    INTEGER  ::   nn_file_tr    ! = 1 create a damping.coeff NetCDF file  
    43  
    4434   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   restotr   ! restoring coeff. on tracers (s-1) 
     35 
     36   INTEGER, PARAMETER           ::   npncts   = 5        ! number of closed sea 
     37   INTEGER, DIMENSION(npncts)   ::   nctsi1, nctsj1      ! south-west closed sea limits (i,j) 
     38   INTEGER, DIMENSION(npncts)   ::   nctsi2, nctsj2      ! north-east closed sea limits (i,j) 
    4539 
    4640   !! * Substitutions 
     
    8680      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    8781      !! 
    88       INTEGER  ::   ji, jj, jk, jn       ! dummy loop indices 
     82      INTEGER  ::   ji, jj, jk, jn, jl       ! dummy loop indices 
    8983      REAL(wp) ::   ztra                 ! temporary scalars 
    9084      CHARACTER (len=22) :: charout 
    9185      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrtrd 
     86      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta   ! 4D  workspace 
    9287      !!---------------------------------------------------------------------- 
    9388      ! 
     
    9994 
    10095      IF( l_trdtrc )   CALL wrk_alloc( jpi, jpj, jpk, ztrtrd )   ! temporary save of trends 
    101  
    102       ! 1. Newtonian damping trends on tracer fields 
    103       ! -------------------------------------------- 
    104       ! Initialize the input fields for newtonian damping 
    105       CALL trc_dta( kt ) 
    106       !                                                          ! =========== 
    107       DO jn = 1, jptra                                           ! tracer loop 
    108          !                                                       ! =========== 
    109          IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn)    ! save trends  
    110  
    111          IF( lutini(jn) ) THEN 
     96      ! 
     97      IF( nb_trcdta > 0 ) THEN  ! Initialisation of tracer from a file that may also be used for damping 
     98         ! 
     99         CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
     100         CALL trc_dta( kt, ztrcdta )   ! read tracer data at nit000 
     101         !                                                          ! =========== 
     102         DO jn = 1, jptra                                           ! tracer loop 
     103            !                                                       ! =========== 
     104            IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn)    ! save trends  
    112105            ! 
    113             SELECT CASE ( nn_zdmp_trc ) 
    114             ! 
    115             CASE( 0 )                !==  newtonian damping throughout the water column  ==! 
    116                DO jk = 1, jpkm1 
    117                   DO jj = 2, jpjm1 
    118                      DO ji = fs_2, fs_jpim1   ! vector opt. 
    119                         ztra = restotr(ji,jj,jk) * ( trdta(ji,jj,jk,jn) - trb(ji,jj,jk,jn) ) 
    120                         tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
     106            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
     107                
     108               jl = n_trc_index(jn)  
     109 
     110               SELECT CASE ( nn_zdmp_tr ) 
     111               ! 
     112               CASE( 0 )                !==  newtonian damping throughout the water column  ==! 
     113                  DO jk = 1, jpkm1 
     114                     DO jj = 2, jpjm1 
     115                        DO ji = fs_2, fs_jpim1   ! vector opt. 
     116                           ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) - trb(ji,jj,jk,jn) ) 
     117                           tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
     118                        END DO 
    121119                     END DO 
    122120                  END DO 
    123                END DO 
    124             ! 
    125             CASE ( 1 )                !==  no damping in the turbocline (avt > 5 cm2/s)  ==! 
    126                DO jk = 1, jpkm1 
    127                   DO jj = 2, jpjm1 
    128                      DO ji = fs_2, fs_jpim1   ! vector opt. 
    129                         IF( avt(ji,jj,jk) <= 5.e-4 )  THEN  
    130                            ztra = restotr(ji,jj,jk) * ( trdta(ji,jj,jk,jn) - trb(ji,jj,jk,jn) ) 
    131                            tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    132                         ENDIF 
     121               ! 
     122               CASE ( 1 )                !==  no damping in the turbocline (avt > 5 cm2/s)  ==! 
     123                  DO jk = 1, jpkm1 
     124                     DO jj = 2, jpjm1 
     125                        DO ji = fs_2, fs_jpim1   ! vector opt. 
     126                           IF( avt(ji,jj,jk) <= 5.e-4 )  THEN  
     127                              ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) - trb(ji,jj,jk,jn) ) 
     128                              tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
     129                           ENDIF 
     130                        END DO 
    133131                     END DO 
    134132                  END DO 
    135                END DO 
    136             ! 
    137             CASE ( 2 )               !==  no damping in the mixed layer   ==!  
    138                DO jk = 1, jpkm1 
    139                   DO jj = 2, jpjm1 
    140                      DO ji = fs_2, fs_jpim1   ! vector opt. 
    141                         IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
    142                            ztra = restotr(ji,jj,jk,jn) * ( trdta(ji,jj,jk,jn) - trb(ji,jj,jk,jn) ) 
    143                            tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    144                         END IF 
     133               ! 
     134               CASE ( 2 )               !==  no damping in the mixed layer   ==!  
     135                  DO jk = 1, jpkm1 
     136                     DO jj = 2, jpjm1 
     137                        DO ji = fs_2, fs_jpim1   ! vector opt. 
     138                           IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
     139                              ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) - trb(ji,jj,jk,jn) ) 
     140                              tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
     141                           END IF 
     142                        END DO 
    145143                     END DO 
    146144                  END DO 
    147                END DO 
    148             !   
    149             END SELECT 
    150             !  
    151          ENDIF 
    152          ! 
    153          IF( l_trdtrc ) THEN 
    154             ztrtrd(:,:,:) = tra(:,:,:,jn) -  ztrtrd(:,:,:) 
    155             CALL trd_tra( kt, 'TRC', jn, jptra_trd_dmp, ztrtrd ) 
    156          END IF 
    157          !                                                       ! =========== 
    158       END DO                                                     ! tracer loop 
    159       !                                                          ! =========== 
     145               !   
     146               END SELECT 
     147               !  
     148            ENDIF 
     149            ! 
     150            IF( l_trdtrc ) THEN 
     151               ztrtrd(:,:,:) = tra(:,:,:,jn) -  ztrtrd(:,:,:) 
     152               CALL trd_tra( kt, 'TRC', jn, jptra_trd_dmp, ztrtrd ) 
     153            END IF 
     154            !                                                       ! =========== 
     155         END DO                                                     ! tracer loop 
     156         !                                                          ! =========== 
     157         CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 
     158      ENDIF 
     159      ! 
    160160      IF( l_trdtrc )  CALL wrk_dealloc( jpi, jpj, jpk, ztrtrd ) 
    161161      !                                          ! print mean trends (used for debugging) 
     
    168168      ! 
    169169   END SUBROUTINE trc_dmp 
     170 
     171   SUBROUTINE trc_dmp_clo( kt ) 
     172      !!--------------------------------------------------------------------- 
     173      !!                  ***  ROUTINE trc_dmp_clo  *** 
     174      !! 
     175      !! ** Purpose :   Closed sea domain initialization 
     176      !! 
     177      !! ** Method  :   if a closed sea is located only in a model grid point 
     178      !!                we restore to initial data 
     179      !! 
     180      !! ** Action  :   nctsi1(), nctsj1() : south-west closed sea limits (i,j) 
     181      !!                nctsi2(), nctsj2() : north-east Closed sea limits (i,j) 
     182      !!---------------------------------------------------------------------- 
     183      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     184      ! 
     185      INTEGER :: ji, jj, jk, jn, jl, jc                     ! dummy loop indicesa 
     186      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta     ! 4D  workspace 
     187 
     188      !!---------------------------------------------------------------------- 
     189 
     190      IF( kt == nit000 ) THEN 
     191         ! initial values 
     192         nctsi1(:) = 1  ;  nctsi2(:) = 1 
     193         nctsj1(:) = 1  ;  nctsj2(:) = 1 
     194 
     195         ! set the closed seas (in data domain indices) 
     196         ! ------------------- 
     197 
     198         IF( cp_cfg == "orca" ) THEN 
     199            ! 
     200            SELECT CASE ( jp_cfg ) 
     201            !                                           ! ======================= 
     202            CASE ( 2 )                                  !  ORCA_R2 configuration 
     203               !                                        ! ======================= 
     204               !                                            ! Caspian Sea 
     205               nctsi1(1)   =  11  ;  nctsj1(1)   = 103 
     206               nctsi2(1)   =  17  ;  nctsj2(1)   = 112 
     207               !                                            ! Great North American Lakes 
     208               nctsi1(2)   =  97  ;  nctsj1(2)   = 107 
     209               nctsi2(2)   = 103  ;  nctsj2(2)   = 111 
     210               !                                            ! Black Sea 1 : west part of the Black Sea 
     211               nctsi1(3)   = 174  ;  nctsj1(3)   = 107 
     212               nctsi2(3)   = 181  ;  nctsj2(3)   = 112 
     213              !                                            ! Black Sea 2 : est part of the Black Sea 
     214               nctsi1(4)   =   2  ;  nctsj1(4)   = 107 
     215               nctsi2(4)   =   6  ;  nctsj2(4)   = 112 
     216               !                                            ! Baltic Sea 
     217               nctsi1(5)   =  145 ;  nctsj1(5)   = 116 
     218               nctsi2(5)   =  150 ;  nctsj2(5)   = 126 
     219               !                                        ! ======================= 
     220            CASE ( 4 )                                  !  ORCA_R4 configuration 
     221               !                                        ! ======================= 
     222               !                                            ! Caspian Sea 
     223               nctsi1(1)   =  4  ;  nctsj1(1)   = 53 
     224               nctsi2(1)   =  4  ;  nctsj2(1)   = 56 
     225               !                                            ! Great North American Lakes 
     226               nctsi1(2)   = 49  ;  nctsj1(2)   = 55 
     227               nctsi2(2)   = 51  ;  nctsj2(2)   = 56 
     228               !                                            ! Black Sea 
     229               nctsi1(3)   = 88  ;  nctsj1(3)   = 55 
     230               nctsi2(3)   = 91  ;  nctsj2(3)   = 56 
     231               !                                            ! Baltic Sea 
     232               nctsi1(4)   = 75  ;  nctsj1(4)   = 59 
     233               nctsi2(4)   = 76  ;  nctsj2(4)   = 61 
     234               !                                        ! ======================= 
     235            CASE ( 025 )                                ! ORCA_R025 configuration 
     236               !                                        ! ======================= 
     237                                                     ! Caspian + Aral sea 
     238               nctsi1(1)   = 1330 ; nctsj1(1)   = 645 
     239               nctsi2(1)   = 1400 ; nctsj2(1)   = 795 
     240               !                                        ! Azov Sea 
     241               nctsi1(2)   = 1284 ; nctsj1(2)   = 722 
     242               nctsi2(2)   = 1304 ; nctsj2(2)   = 747 
     243               ! 
     244            END SELECT 
     245            ! 
     246         ENDIF 
     247         ! 
     248 
     249         ! convert the position in local domain indices 
     250         ! -------------------------------------------- 
     251         DO jc = 1, npncts 
     252            nctsi1(jc)   = mi0( nctsi1(jc) ) 
     253            nctsj1(jc)   = mj0( nctsj1(jc) ) 
     254 
     255            nctsi2(jc)   = mi1( nctsi2(jc) ) 
     256            nctsj2(jc)   = mj1( nctsj2(jc) ) 
     257         END DO 
     258         ! 
     259      ENDIF 
     260 
     261      ! Restore close seas values to initial data 
     262      IF( ln_trcdta .AND. nb_trcdta > 0 )  THEN   ! Initialisation of tracer from a file that may also be used for damping 
     263         ! 
     264         IF(lwp)  WRITE(numout,*) 
     265         IF(lwp)  WRITE(numout,*) ' trc_dmp_clo : Restoring of nutrients on close seas at time-step kt = ', kt 
     266         IF(lwp)  WRITE(numout,*) 
     267         ! 
     268         CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )   ! Memory allocation 
     269         ! 
     270         CALL trc_dta( kt , ztrcdta )   ! read tracer data at nittrc000 
     271         ! 
     272         DO jn = 1, jptra 
     273            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
     274                jl = n_trc_index(jn) 
     275                DO jc = 1, npncts 
     276                   DO jk = 1, jpkm1 
     277                      DO jj = nctsj1(jc), nctsj2(jc) 
     278                         DO ji = nctsi1(jc), nctsi2(jc) 
     279                            trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk,jl) * tmask(ji,jj,jk) 
     280                            trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
     281                         ENDDO 
     282                      ENDDO 
     283                   ENDDO 
     284                ENDDO 
     285             ENDIF 
     286          ENDDO 
     287          CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 
     288      ENDIF 
     289      ! 
     290   END SUBROUTINE trc_dmp_clo 
    170291 
    171292 
     
    199320      END SELECT 
    200321 
    201       IF( .NOT. lk_dtatrc )   & 
    202          &   CALL ctl_stop( 'no passive tracer data define key_dtatrc' ) 
    203  
    204       IF( .NOT. lk_tradmp )   & 
     322      IF( .NOT. ln_tradmp )   & 
    205323         &   CALL ctl_stop( 'passive trace damping need key_tradmp to compute damping coef.' ) 
    206324      ! 
     
    214332      ! 
    215333   END SUBROUTINE trc_dmp_init 
     334 
    216335#else 
    217336   !!---------------------------------------------------------------------- 
    218    !!   Default key                                     NO internal damping 
    219    !!---------------------------------------------------------------------- 
    220    LOGICAL , PUBLIC, PARAMETER ::   lk_trcdmp = .FALSE.    !: internal damping flag 
     337   !!  Dummy module :                                     No passive tracer 
     338   !!---------------------------------------------------------------------- 
    221339CONTAINS 
    222340   SUBROUTINE trc_dmp( kt )        ! Empty routine 
     
    225343   END SUBROUTINE trc_dmp 
    226344#endif 
     345 
     346 
    227347   !!====================================================================== 
    228348END MODULE trcdmp 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/TRP/trcnam_trp.F90

    r4147 r4148  
    1313   !!   trc_nam_trp  : read the passive tracer namelist for transport 
    1414   !!---------------------------------------------------------------------- 
    15    USE trc                 ! ocean passive tracers variables 
     15   USE oce_trc              ! shared ocean passive tracers variables 
     16   USE trc                 ! passive tracers variables 
    1617   USE in_out_manager      ! ocean dynamics and active tracers variables 
    1718   USE lib_mpp           ! distributed memory computing library 
     
    4950   INTEGER , PUBLIC ::   nn_trczdf_exp       !: number of sub-time step (explicit time stepping) 
    5051 
    51  
    52 #if defined key_trcdmp 
    5352   !                                                 !!: ** newtonian damping namelist (nam_trcdmp) ** 
    54    INTEGER , PUBLIC ::   nn_hdmp_tr      =   -1       ! = 0/-1/'latitude' for damping over passive tracer 
    55    INTEGER , PUBLIC ::   nn_zdmp_tr      =    0       ! = 0/1/2 flag for damping in the mixed layer 
    56    REAL(wp), PUBLIC ::   rn_surf_tr      =   50.      ! surface time scale for internal damping        [days] 
    57    REAL(wp), PUBLIC ::   rn_bot_tr       =  360.      ! bottom time scale for internal damping         [days] 
    58    REAL(wp), PUBLIC ::   rn_dep_tr       =  800.      ! depth of transition between rn_surf and rn_bot [meters] 
    59    INTEGER , PUBLIC ::   nn_file_tr      =    2       ! = 1 create a damping.coeff NetCDF file  
    60 #endif 
     53   !                          !!* Namelist namtrc_dmp : passive tracer newtonian damping * 
     54   INTEGER , PUBLIC ::   nn_hdmp_tr    ! = 0/-1/'latitude' for damping over passive tracer 
     55   INTEGER , PUBLIC ::   nn_zdmp_tr    ! = 0/1/2 flag for damping in the mixed layer 
     56   REAL(wp), PUBLIC ::   rn_surf_tr    ! surface time scale for internal damping        [days] 
     57   REAL(wp), PUBLIC ::   rn_bot_tr     ! bottom time scale for internal damping         [days] 
     58   REAL(wp), PUBLIC ::   rn_dep_tr     ! depth of transition between rn_surf and rn_bot [meters] 
     59   INTEGER , PUBLIC ::   nn_file_tr    ! = 1 create a damping.coeff NetCDF file 
    6160 
    6261   !!---------------------------------------------------------------------- 
     
    8483      NAMELIST/namtrc_zdf/ ln_trczdf_exp  , nn_trczdf_exp 
    8584      NAMELIST/namtrc_rad/ ln_trcrad 
    86 #if defined key_trcdmp 
    87       NAMELIST/namtrc_dmp/ ln_trcdmp, nn_hdmp_tr, nn_zdmp_tr, rn_surf_tr, & 
     85      NAMELIST/namtrc_dmp/ nn_hdmp_tr, nn_zdmp_tr, rn_surf_tr, & 
    8886        &                  rn_bot_tr , rn_dep_tr , nn_file_tr 
    89 #endif 
    9087      !!---------------------------------------------------------------------- 
    9188 
     
    174171 
    175172 
    176 # if defined key_trcdmp 
    177173      REWIND( numnat_ref )              ! Namelist namtrc_dmp in reference namelist : Passive tracers newtonian damping 
    178174      READ  ( numnat_ref, namtrc_dmp, IOSTAT = ios, ERR = 909) 
     
    184180      WRITE ( numont, namtrc_dmp ) 
    185181 
    186       IF( lzoom )   nn_zdmp_trc = 0           ! restoring to climatology at closed north or south boundaries 
     182      IF( lzoom )   nn_zdmp_tr = 0           ! restoring to climatology at closed north or south boundaries 
    187183 
    188184      IF(lwp) THEN                       ! Namelist print 
     
    191187         WRITE(numout,*) '~~~~~~~' 
    192188         WRITE(numout,*) '   Namelist namtrc_dmp : set damping parameter' 
    193          WRITE(numout,*) '      add a damping term or not      ln_trcdmp = ', ln_trcdmp 
    194189         WRITE(numout,*) '      tracer damping option          nn_hdmp_tr = ', nn_hdmp_tr 
    195190         WRITE(numout,*) '      mixed layer damping option     nn_zdmp_tr = ', nn_zdmp_tr, '(zoom: forced to 0)' 
     
    199194         WRITE(numout,*) '      create a damping.coeff file    nn_file_tr = ', nn_file_tr 
    200195      ENDIF 
    201 #endif 
    202196      ! 
    203197   END SUBROUTINE trc_nam_trp 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90

    r3680 r4148  
    6666                                CALL trc_sbc( kstp )            ! surface boundary condition 
    6767         IF( lk_trabbl )        CALL trc_bbl( kstp )            ! advective (and/or diffusive) bottom boundary layer scheme 
    68          IF( lk_trcdmp )        CALL trc_dmp( kstp )            ! internal damping trends 
     68         IF( ln_trcdmp )        CALL trc_dmp( kstp )            ! internal damping trends 
     69         IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kstp )        ! internal damping trends on closed seas only 
    6970                                CALL trc_adv( kstp )            ! horizontal & vertical advection  
    7071                                CALL trc_ldf( kstp )            ! lateral mixing 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90

    r4147 r4148  
    9292   USE sbc_oce , ONLY :   emp        =>    emp        !: freshwater budget: volume flux               [Kg/m2/s] 
    9393   USE sbc_oce , ONLY :   emp_b      =>    emp_b      !: freshwater budget: volume flux               [Kg/m2/s] 
    94    USE sbc_oce , ONLY :   sfx        =>    sfx        !: downward salt flux                          [PSU/m2/s] 
     94   USE sbc_oce , ONLY :   fmmflx     =>    fmmflx     !: freshwater budget: volume flux               [Kg/m2/s] 
    9595   USE sbc_oce , ONLY :   rnf        =>    rnf        !: river runoff   [Kg/m2/s] 
    9696   USE sbc_oce , ONLY :   ln_dm2dc   =>    ln_dm2dc   !: Daily mean to Diurnal Cycle short wave (qsr)  
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/trc.F90

    r4147 r4148  
    2828   INTEGER, PUBLIC                                                 ::   numrtr        !: logical unit for trc restart (read ) 
    2929   INTEGER, PUBLIC                                                 ::   numrtw        !: logical unit for trc restart ( write ) 
    30    LOGICAL, PUBLIC                                                 ::   ln_top_euler  !: boolean term for euler integration in the first timestep 
    3130 
    3231   !! passive tracers fields (before,now,after) 
     
    5554   CHARACTER(len = 80) , PUBLIC                                    ::  cn_trcrst_out  !: suffix of pass. tracer restart name (output) 
    5655   REAL(wp)            , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)   ::  rdttrc         !: vertical profile of passive tracer time step 
     56   LOGICAL             , PUBLIC                                    ::  ln_top_euler  !: boolean term for euler integration  
    5757   LOGICAL             , PUBLIC                                    ::  ln_trcdta      !: Read inputs data from files 
    5858   LOGICAL             , PUBLIC                                    ::  ln_trcdmp      !: internal damping flag 
     59   LOGICAL             , PUBLIC                                    ::  ln_trcdmp_clo  !: internal damping flag on closed seas 
    5960   INTEGER             , PUBLIC                                    ::  nittrc000       !: first time step of passive tracers model 
    6061 
     
    142143   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  fr_i_tm    !: average ice fraction     [m/s] 
    143144   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  emp_tm     !: freshwater budget: volume flux [Kg/m2/s] 
    144    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  sfx_tm     !: downward salt flux [PSU/m2/s] 
     145   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  fmmflx_tm  !: freshwater budget: freezing/melting [Kg/m2/s] 
    145146   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  emp_b_hold !: hold emp from the beginning of each sub-stepping[m]   
    146147   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  qsr_tm     !: solar radiation average [m] 
     
    182183   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::  hdivb_temp, rotb_temp 
    183184   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  hmld_temp, qsr_temp, fr_i_temp,wndm_temp 
    184    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  emp_temp, sfx_temp, emp_b_temp 
     185   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::  emp_temp, fmmflx_temp, emp_b_temp 
    185186   ! 
    186187#if defined key_trabbl 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/trcdta.F90

    r4147 r4148  
    259259            ENDDO 
    260260         ENDIF 
    261          ! 
    262          IF( .NOT.ln_trcdmp ) THEN                   !==   deallocate data structure   ==!  
     261          
     262         IF( .NOT.ln_trcdmp .AND. .NOT.ln_trcdmp_clo ) THEN      !==   deallocate data structure   ==!  
    263263            !                                              (data used only for initialisation) 
    264264            IF(lwp) WRITE(numout,*) 'trc_dta: deallocate data arrays as they are only use to initialize the run' 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/trcnam.F90

    r4147 r4148  
    6060      !! 
    6161      NAMELIST/namtrc/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, & 
    62          &             cn_trcrst_in, cn_trcrst_out, sn_tracer, ln_trcdta, ln_trcdmp, & 
    63          &             ln_top_euler 
     62         &             cn_trcrst_in, cn_trcrst_out, sn_tracer, ln_trcdta, & 
     63         &             ln_trcdmp, ln_trcdmp_clo, ln_top_euler 
    6464#if defined key_trdmld_trc  || defined key_trdtrc 
    6565      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 
     
    109109         WRITE(numout,*) '   Read inputs data from file (y/n)             ln_trcdta     = ', ln_trcdta 
    110110         WRITE(numout,*) '   Damping of passive tracer (y/n)              ln_trcdmp     = ', ln_trcdmp 
     111         WRITE(numout,*) '   Restoring of tracer on closed seas           ln_trcdmp_clo = ', ln_trcdmp_clo 
    111112         WRITE(numout,*) '   Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler 
    112113         WRITE(numout,*) ' ' 
     
    170171 
    171172 
    172       IF( ln_trcdmp .AND. .NOT.ln_trcdta ) THEN 
    173          CALL ctl_warn( 'trc_nam: passive tracer damping requires data from files we set ln_trcdta to TRUE' ) 
    174          ln_trcdta = .TRUE. 
    175       ENDIF 
     173      IF( ln_rsttr )                      ln_trcdta = .FALSE.   ! restart : no need of clim data 
    176174      ! 
    177       IF( ln_rsttr .AND. .NOT.ln_trcdmp .AND. ln_trcdta ) THEN 
    178           CALL ctl_warn( 'trc_nam: passive tracer restart and  data intialisation, ',   & 
    179              &           'we keep the restart values and set ln_trcdta to FALSE' ) 
    180          ln_trcdta = .FALSE. 
    181       ENDIF 
     175      IF( ln_trcdmp .OR. ln_trcdmp_clo )  ln_trcdta = .TRUE.   ! damping : need to have clim data 
    182176      ! 
    183177      IF( .NOT.ln_trcdta ) THEN 
     
    188182         IF( ln_rsttr ) THEN 
    189183            WRITE(numout,*) 
    190             WRITE(numout,*) '    read a restart file for passive tracer : ', TRIM( cn_trcrst_in ) 
    191             WRITE(numout,*) 
    192          ELSE 
    193             IF( .NOT.ln_trcdta ) THEN 
    194                 WRITE(numout,*) 
    195                 WRITE(numout,*) '  All the passive tracers are initialised with constant values ' 
    196                 WRITE(numout,*) 
    197             ENDIF 
     184            WRITE(numout,*) '  Read a restart file for passive tracer : ', TRIM( cn_trcrst_in ) 
     185            WRITE(numout,*) 
     186         ENDIF 
     187         IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN 
     188            WRITE(numout,*) 
     189            WRITE(numout,*) '  Some of the passive tracers are initialised from climatologies ' 
     190            WRITE(numout,*) 
     191         ENDIF 
     192         IF( .NOT.ln_trcdta ) THEN 
     193            WRITE(numout,*) 
     194            WRITE(numout,*) '  All the passive tracers are initialised with constant values ' 
     195            WRITE(numout,*) 
    198196         ENDIF 
    199197      ENDIF 
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/TOP_SRC/trcsub.F90

    r3680 r4148  
    124124          fr_i_tm  (:,:)         = fr_i_tm  (:,:)         + fr_i  (:,:) 
    125125          emp_tm   (:,:)         = emp_tm   (:,:)         + emp   (:,:)  
    126           sfx_tm   (:,:)         = sfx_tm   (:,:)         + sfx   (:,:) 
     126          fmmflx_tm(:,:)         = fmmflx_tm(:,:)         + fmmflx(:,:) 
    127127          qsr_tm   (:,:)         = qsr_tm   (:,:)         + qsr   (:,:) 
    128128          wndm_tm  (:,:)         = wndm_tm  (:,:)         + wndm  (:,:) 
     
    212212         emp_temp   (:,:)        = emp   (:,:) 
    213213         emp_b_temp (:,:)        = emp_b (:,:) 
    214          sfx_temp   (:,:)        = sfx   (:,:) 
     214         fmmflx_temp(:,:)        = fmmflx(:,:) 
    215215         qsr_temp   (:,:)        = qsr   (:,:) 
    216216         wndm_temp  (:,:)        = wndm  (:,:) 
     
    316316         fr_i_tm  (:,:)          = fr_i_tm    (:,:)       + fr_i  (:,:) 
    317317         emp_tm   (:,:)          = emp_tm     (:,:)       + emp   (:,:)  
    318          sfx_tm   (:,:)          = sfx_tm     (:,:)       + sfx   (:,:) 
     318         fmmflx_tm(:,:)          = fmmflx_tm  (:,:)       + fmmflx(:,:) 
    319319         qsr_tm   (:,:)          = qsr_tm     (:,:)       + qsr   (:,:) 
    320320         wndm_tm  (:,:)          = wndm_tm    (:,:)       + wndm  (:,:) 
     
    335335            qsr   (:,:)          = qsr_tm     (:,:) * r1_ndttrc  
    336336            emp   (:,:)          = emp_tm     (:,:) * r1_ndttrc  
    337             sfx   (:,:)          = sfx_tm     (:,:) * r1_ndttrc  
     337            fmmflx(:,:)          = fmmflx_tm  (:,:) * r1_ndttrc  
    338338            fr_i  (:,:)          = fr_i_tm    (:,:) * r1_ndttrc 
    339339# if defined key_trabbl 
     
    351351            qsr   (:,:)          = qsr_tm     (:,:) * r1_ndttrcp1  
    352352            emp   (:,:)          = emp_tm     (:,:) * r1_ndttrcp1  
    353             sfx   (:,:)          = sfx_tm     (:,:) * r1_ndttrcp1  
     353            fmmflx(:,:)          = fmmflx_tm  (:,:) * r1_ndttrcp1  
    354354            fr_i  (:,:)          = fr_i_tm    (:,:) * r1_ndttrcp1  
    355355# if defined key_trabbl 
     
    501501         CALL lbc_lnk( emp   (:,:)         , 'T', 1. )  
    502502         CALL lbc_lnk( emp_b (:,:)         , 'T', 1. )  
    503          CALL lbc_lnk( sfx   (:,:)         , 'T', 1. )  
     503         CALL lbc_lnk( fmmflx(:,:)         , 'T', 1. )  
    504504         CALL lbc_lnk( qsr   (:,:)         , 'T', 1. )  
    505505         CALL lbc_lnk( wndm  (:,:)         , 'T', 1. )  
     
    601601      fr_i_tm(:,:) = 0._wp 
    602602      emp_tm (:,:) = 0._wp 
    603       sfx_tm(:,:)  = 0._wp 
     603      fmmflx_tm(:,:)  = 0._wp 
    604604      qsr_tm (:,:) = 0._wp 
    605605      wndm_tm(:,:) = 0._wp 
     
    708708      fr_i  (:,:)     =  fr_i_temp  (:,:) 
    709709      emp   (:,:)     =  emp_temp   (:,:) 
    710       sfx   (:,:)     =  sfx_temp   (:,:) 
     710      fmmflx(:,:)     =  fmmflx_temp(:,:) 
    711711      emp_b (:,:)     =  emp_b_temp (:,:) 
    712712      qsr   (:,:)     =  qsr_temp   (:,:) 
     
    827827      fr_i_tm    (:,:) = fr_i  (:,:) 
    828828      emp_tm     (:,:) = emp   (:,:) 
    829       sfx_tm     (:,:) = sfx   (:,:) 
     829      fmmflx_tm  (:,:) = fmmflx(:,:) 
    830830      qsr_tm     (:,:) = qsr   (:,:) 
    831831      wndm_tm    (:,:) = wndm  (:,:) 
     
    10561056         &      rnf_temp(jpi,jpj)           ,  h_rnf_temp(jpi,jpj) ,     & 
    10571057         &      tsn_temp(jpi,jpj,jpk,2)     ,  emp_b_temp(jpi,jpj),      & 
    1058          &      emp_temp(jpi,jpj)           ,  sfx_temp(jpi,jpj)  ,      & 
     1058         &      emp_temp(jpi,jpj)           ,  fmmflx_temp(jpi,jpj),     & 
    10591059         &      hmld_temp(jpi,jpj)          ,  qsr_temp(jpi,jpj) ,       & 
    10601060         &      fr_i_temp(jpi,jpj)          ,  fr_i_tm(jpi,jpj) ,        & 
     
    11041104         &      sshv_n_tm(jpi,jpj)          ,  sshv_b_hold(jpi,jpj),     & 
    11051105         &      tsn_tm(jpi,jpj,jpk,2)       ,                            & 
    1106          &      emp_tm(jpi,jpj)             ,  sfx_tm(jpi,jpj)  ,        & 
     1106         &      emp_tm(jpi,jpj)             ,  fmmflx_tm(jpi,jpj)  ,     & 
    11071107         &      emp_b_hold(jpi,jpj)         ,                            & 
    11081108         &      hmld_tm(jpi,jpj)            ,  qsr_tm(jpi,jpj) ,         & 
Note: See TracChangeset for help on using the changeset viewer.