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 5296 for branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC – NEMO

Ignore:
Timestamp:
2015-05-27T12:47:55+02:00 (9 years ago)
Author:
pabouttier
Message:

Commit stochastic parametrization module and perturbation of EOS

Location:
branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r5147 r5296  
    3030   !!   eos_insitu_2d  : Compute the in situ density for 2d fields 
    3131   !!   bn2            : Compute the Brunt-Vaisala frequency 
    32    !!   eos_rab        : generic interface of in situ thermal/haline expansion ratio  
     32   !!   eos_rab        : generic interface of in situ thermal/haline expansion ratio 
    3333   !!   eos_rab_3d     : compute in situ thermal/haline expansion ratio 
    3434   !!   eos_rab_2d     : compute in situ thermal/haline expansion ratio for 2d fields 
     
    4242   USE in_out_manager  ! I/O manager 
    4343   USE lib_mpp         ! MPP library 
    44    USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     44   USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    4545   USE prtctl          ! Print control 
    4646   USE wrk_nemo        ! Memory Allocation 
    47    USE lbclnk         ! ocean lateral boundary conditions 
     47   USE lbclnk          ! ocean lateral boundary conditions 
    4848   USE timing          ! Timing 
     49   USE stopar          ! Stochastic T/S fluctuations 
     50   USE stopts          ! Stochastic T/S fluctuations 
    4951 
    5052   IMPLICIT NONE 
     
    6062   END INTERFACE 
    6163   ! 
    62    INTERFACE eos_fzp  
     64   INTERFACE eos_fzp 
    6365      MODULE PROCEDURE eos_fzp_2d, eos_fzp_0d 
    6466   END INTERFACE 
     
    7880   !                                   !!!  simplified eos coefficients 
    7981   ! default value: Vallis 2006 
    80    REAL(wp) ::   rn_a0      = 1.6550e-1_wp     ! thermal expansion coeff.  
    81    REAL(wp) ::   rn_b0      = 7.6554e-1_wp     ! saline  expansion coeff.  
    82    REAL(wp) ::   rn_lambda1 = 5.9520e-2_wp     ! cabbeling coeff. in T^2         
    83    REAL(wp) ::   rn_lambda2 = 5.4914e-4_wp     ! cabbeling coeff. in S^2         
    84    REAL(wp) ::   rn_mu1     = 1.4970e-4_wp     ! thermobaric coeff. in T   
    85    REAL(wp) ::   rn_mu2     = 1.1090e-5_wp     ! thermobaric coeff. in S   
    86    REAL(wp) ::   rn_nu      = 2.4341e-3_wp     ! cabbeling coeff. in theta*salt   
    87     
     82   REAL(wp) ::   rn_a0      = 1.6550e-1_wp     ! thermal expansion coeff. 
     83   REAL(wp) ::   rn_b0      = 7.6554e-1_wp     ! saline  expansion coeff. 
     84   REAL(wp) ::   rn_lambda1 = 5.9520e-2_wp     ! cabbeling coeff. in T^2 
     85   REAL(wp) ::   rn_lambda2 = 5.4914e-4_wp     ! cabbeling coeff. in S^2 
     86   REAL(wp) ::   rn_mu1     = 1.4970e-4_wp     ! thermobaric coeff. in T 
     87   REAL(wp) ::   rn_mu2     = 1.1090e-5_wp     ! thermobaric coeff. in S 
     88   REAL(wp) ::   rn_nu      = 2.4341e-3_wp     ! cabbeling coeff. in theta*salt 
     89 
    8890   ! TEOS10/EOS80 parameters 
    8991   REAL(wp) ::   r1_S0, r1_T0, r1_Z0, rdeltaS 
    90     
     92 
    9193   ! EOS parameters 
    9294   REAL(wp) ::   EOS000 , EOS100 , EOS200 , EOS300 , EOS400 , EOS500 , EOS600 
     
    106108   REAL(wp) ::   EOS022 
    107109   REAL(wp) ::   EOS003 , EOS103 
    108    REAL(wp) ::   EOS013  
    109     
     110   REAL(wp) ::   EOS013 
     111 
    110112   ! ALPHA parameters 
    111113   REAL(wp) ::   ALP000 , ALP100 , ALP200 , ALP300 , ALP400 , ALP500 
     
    122124   REAL(wp) ::   ALP012 
    123125   REAL(wp) ::   ALP003 
    124     
     126 
    125127   ! BETA parameters 
    126128   REAL(wp) ::   BET000 , BET100 , BET200 , BET300 , BET400 , BET500 
     
    149151   REAL(wp) ::   PEN002 , PEN102 
    150152   REAL(wp) ::   PEN012 
    151     
     153 
    152154   ! ALPHA_PEN parameters 
    153155   REAL(wp) ::   APE000 , APE100 , APE200 , APE300 
     
    279281                     &  + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs - rn_mu2*zh ) * zs   & 
    280282                     &  - rn_nu * zt * zs 
    281                      !                                  
     283                     ! 
    282284                  prd(ji,jj,jk) = zn * r1_rau0 * ztm                ! density anomaly (masked) 
    283285               END DO 
     
    313315      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pdep   ! depth                      [m] 
    314316      ! 
    315       INTEGER  ::   ji, jj, jk                ! dummy loop indices 
    316       REAL(wp) ::   zt , zh , zs , ztm        ! local scalars 
    317       REAL(wp) ::   zn , zn0, zn1, zn2, zn3   !   -      - 
     317      INTEGER  ::   ji, jj, jk, jsmp, jdof       ! dummy loop indices 
     318      REAL(wp) ::   zt , zh , zstemp, zs , ztm   ! local scalars 
     319      REAL(wp) ::   zn , zn0, zn1, zn2, zn3      !   -      - 
     320      REAL(wp), DIMENSION(:), ALLOCATABLE :: zn0_sto, zn_sto, zsign            ! local vectors 
    318321      !!---------------------------------------------------------------------- 
    319322      ! 
     
    324327      CASE( -1, 0 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    325328         ! 
    326          DO jk = 1, jpkm1 
    327             DO jj = 1, jpj 
    328                DO ji = 1, jpi 
    329                   ! 
    330                   zh  = pdep(ji,jj,jk) * r1_Z0                                  ! depth 
    331                   zt  = pts (ji,jj,jk,jp_tem) * r1_T0                           ! temperature 
    332                   zs  = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
    333                   ztm = tmask(ji,jj,jk)                                         ! tmask 
    334                   ! 
    335                   zn3 = EOS013*zt   & 
    336                      &   + EOS103*zs+EOS003 
    337                      ! 
    338                   zn2 = (EOS022*zt   & 
    339                      &   + EOS112*zs+EOS012)*zt   & 
    340                      &   + (EOS202*zs+EOS102)*zs+EOS002 
    341                      ! 
    342                   zn1 = (((EOS041*zt   & 
    343                      &   + EOS131*zs+EOS031)*zt   & 
    344                      &   + (EOS221*zs+EOS121)*zs+EOS021)*zt   & 
    345                      &   + ((EOS311*zs+EOS211)*zs+EOS111)*zs+EOS011)*zt   & 
    346                      &   + (((EOS401*zs+EOS301)*zs+EOS201)*zs+EOS101)*zs+EOS001 
    347                      ! 
    348                   zn0 = (((((EOS060*zt   & 
    349                      &   + EOS150*zs+EOS050)*zt   & 
    350                      &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
    351                      &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
    352                      &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
    353                      &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
    354                      &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
    355                      ! 
    356                   zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
    357                   ! 
    358                   prhop(ji,jj,jk) = zn0 * ztm                           ! potential density referenced at the surface 
    359                   ! 
    360                   prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm      ! density anomaly (masked) 
     329         ! Stochastic equation of state 
     330         IF ( ln_sto_eos ) THEN 
     331            ALLOCATE(zn0_sto(1:2*nn_sto_eos)) 
     332            ALLOCATE(zn_sto(1:2*nn_sto_eos)) 
     333            ALLOCATE(zsign(1:2*nn_sto_eos)) 
     334            DO jsmp = 1, 2*nn_sto_eos, 2 
     335              zsign(jsmp)   = 1._wp 
     336              zsign(jsmp+1) = -1._wp 
     337            END DO 
     338            ! 
     339            DO jk = 1, jpkm1 
     340               DO jj = 1, jpj 
     341                  DO ji = 1, jpi 
     342                     ! 
     343                     ! compute density (2*nn_sto_eos) times: 
     344                     ! (1) for t+dt, s+ds (with the random TS fluctutation computed in sto_pts) 
     345                     ! (2) for t-dt, s-ds (with the opposite fluctuation) 
     346                     DO jsmp = 1, nn_sto_eos*2 
     347                        zh     = pdep(ji,jj,jk) * r1_Z0                                  ! depth 
     348                        zt     = pts (ji,jj,jk,jp_tem) * r1_T0  + pts_ran(ji,jj,jk,jp_tem,jdof) * zsign(jsmp)  ! temperature 
     349                        zstemp = pts   (ji,jj,jk,jp_sal) + pts_ran(ji,jj,jk,jp_sal,jdof) * zsign(jsmp) 
     350                        zs     = SQRT( ABS( zstemp + rdeltaS ) * r1_S0 )   ! square root salinity 
     351                        ztm    = tmask(ji,jj,jk)                                         ! tmask 
     352                        ! 
     353                        zn3 = EOS013*zt   & 
     354                           &   + EOS103*zs+EOS003 
     355                           ! 
     356                        zn2 = (EOS022*zt   & 
     357                           &   + EOS112*zs+EOS012)*zt   & 
     358                           &   + (EOS202*zs+EOS102)*zs+EOS002 
     359                           ! 
     360                        zn1 = (((EOS041*zt   & 
     361                           &   + EOS131*zs+EOS031)*zt   & 
     362                           &   + (EOS221*zs+EOS121)*zs+EOS021)*zt   & 
     363                           &   + ((EOS311*zs+EOS211)*zs+EOS111)*zs+EOS011)*zt   & 
     364                           &   + (((EOS401*zs+EOS301)*zs+EOS201)*zs+EOS101)*zs+EOS001 
     365                           ! 
     366                        zn0_sto(jsmp) = (((((EOS060*zt   & 
     367                           &   + EOS150*zs+EOS050)*zt   & 
     368                           &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
     369                           &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
     370                           &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
     371                           &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
     372                           &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
     373                           ! 
     374                        zn_sto(jsmp)  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
     375                     END DO 
     376                     ! 
     377                     ! 
     378                     ! compute stochastic density as the mean of the (2*nn_sto_eos) densities 
     379                     prhop(ji,jj,jk) = 0._wp ; prd(ji,jj,jk) = 0._wp 
     380                     DO jsmp = 1, nn_sto_eos*2 
     381                        prhop(ji,jj,jk) = prhop(ji,jj,jk) + zn0_sto(jsmp)                      ! potential density referenced at the surface 
     382                        !  
     383                        prd(ji,jj,jk) = prd(ji,jj,jk) + (  zn_sto(jsmp) * r1_rau0 - 1._wp  )   ! density anomaly (masked) 
     384                     END DO 
     385                     prhop(ji,jj,jk) = 0.5_wp * prhop(ji,jj,jk) * ztm / nn_sto_eos 
     386                     prd  (ji,jj,jk) = 0.5_wp * prd  (ji,jj,jk) * ztm / nn_sto_eos 
     387                  END DO 
    361388               END DO 
    362389            END DO 
    363          END DO 
     390            DEALLOCATE(zn0_sto,zn_sto,zsign) 
     391         ! Non-stochastic equation of state 
     392         ELSE 
     393            DO jk = 1, jpkm1 
     394               DO jj = 1, jpj 
     395                  DO ji = 1, jpi 
     396                     ! 
     397                     zh  = pdep(ji,jj,jk) * r1_Z0                                  ! depth 
     398                     zt  = pts (ji,jj,jk,jp_tem) * r1_T0                           ! temperature 
     399                     zs  = SQRT( ABS( pts(ji,jj,jk,jp_sal) + rdeltaS ) * r1_S0 )   ! square root salinity 
     400                     ztm = tmask(ji,jj,jk)                                         ! tmask 
     401                     ! 
     402                     zn3 = EOS013*zt   & 
     403                        &   + EOS103*zs+EOS003 
     404                        ! 
     405                     zn2 = (EOS022*zt   & 
     406                        &   + EOS112*zs+EOS012)*zt   & 
     407                        &   + (EOS202*zs+EOS102)*zs+EOS002 
     408                        ! 
     409                     zn1 = (((EOS041*zt   & 
     410                        &   + EOS131*zs+EOS031)*zt   & 
     411                        &   + (EOS221*zs+EOS121)*zs+EOS021)*zt   & 
     412                        &   + ((EOS311*zs+EOS211)*zs+EOS111)*zs+EOS011)*zt   & 
     413                        &   + (((EOS401*zs+EOS301)*zs+EOS201)*zs+EOS101)*zs+EOS001 
     414                        ! 
     415                     zn0 = (((((EOS060*zt   & 
     416                        &   + EOS150*zs+EOS050)*zt   & 
     417                        &   + (EOS240*zs+EOS140)*zs+EOS040)*zt   & 
     418                        &   + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt   & 
     419                        &   + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt   & 
     420                        &   + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt   & 
     421                        &   + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 
     422                        ! 
     423                     zn  = ( ( zn3 * zh + zn2 ) * zh + zn1 ) * zh + zn0 
     424                     ! 
     425                     prhop(ji,jj,jk) = zn0 * ztm                           ! potential density referenced at the surface 
     426                     ! 
     427                     prd(ji,jj,jk) = (  zn * r1_rau0 - 1._wp  ) * ztm      ! density anomaly (masked) 
     428                  END DO 
     429               END DO 
     430            END DO 
     431         ENDIF 
    364432         ! 
    365433      CASE( 1 )                !==  simplified EOS  ==! 
     
    681749         ! 
    682750         CALL lbc_lnk( pab(:,:,jp_tem), 'T', 1. )                    ! Lateral boundary conditions 
    683          CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. )                     
     751         CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. ) 
    684752         ! 
    685753      CASE( 1 )                  !==  simplified EOS  ==! 
     
    702770         ! 
    703771         CALL lbc_lnk( pab(:,:,jp_tem), 'T', 1. )                    ! Lateral boundary conditions 
    704          CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. )                     
     772         CALL lbc_lnk( pab(:,:,jp_sal), 'T', 1. ) 
    705773         ! 
    706774      CASE DEFAULT 
     
    820888      !!                  ***  ROUTINE bn2  *** 
    821889      !! 
    822       !! ** Purpose :   Compute the local Brunt-Vaisala frequency at the  
     890      !! ** Purpose :   Compute the local Brunt-Vaisala frequency at the 
    823891      !!                time-step of the input arguments 
    824892      !! 
     
    827895      !!      N.B. N^2 is set one for all to zero at jk=1 in istate module. 
    828896      !! 
    829       !! ** Action  :   pn2 : square of the brunt-vaisala frequency at w-point  
     897      !! ** Action  :   pn2 : square of the brunt-vaisala frequency at w-point 
    830898      !! 
    831899      !!---------------------------------------------------------------------- 
     
    844912            DO ji = 1, jpi 
    845913               zrw =   ( fsdepw(ji,jj,jk  ) - fsdept(ji,jj,jk) )   & 
    846                   &  / ( fsdept(ji,jj,jk-1) - fsdept(ji,jj,jk) )  
    847                   ! 
    848                zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw  
     914                  &  / ( fsdept(ji,jj,jk-1) - fsdept(ji,jj,jk) ) 
     915                  ! 
     916               zaw = pab(ji,jj,jk,jp_tem) * (1. - zrw) + pab(ji,jj,jk-1,jp_tem) * zrw 
    849917               zbw = pab(ji,jj,jk,jp_sal) * (1. - zrw) + pab(ji,jj,jk-1,jp_sal) * zrw 
    850918               ! 
     
    10261094      !! ** Purpose :   Calculates nonlinear anomalies of alpha_PE, beta_PE and PE at T-points 
    10271095      !! 
    1028       !! ** Method  :   PE is defined analytically as the vertical  
     1096      !! ** Method  :   PE is defined analytically as the vertical 
    10291097      !!                   primitive of EOS times -g integrated between 0 and z>0. 
    10301098      !!                pen is the nonlinear bsq-PE anomaly: pen = ( PE - rau0 gz ) / rau0 gz - rd 
    1031       !!                                                      = 1/z * /int_0^z rd dz - rd  
     1099      !!                                                      = 1/z * /int_0^z rd dz - rd 
    10321100      !!                                where rd is the density anomaly (see eos_rhd function) 
    10331101      !!                ab_pe are partial derivatives of PE anomaly with respect to T and S: 
     
    10941162                     ! 
    10951163                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    1096                   !                               
     1164                  ! 
    10971165                  pab_pe(ji,jj,jk,jp_tem) = zn * zh * r1_rau0 * ztm 
    10981166                  ! 
     
    11091177                     ! 
    11101178                  zn  = ( zn2 * zh + zn1 ) * zh + zn0 
    1111                   !                               
     1179                  ! 
    11121180                  pab_pe(ji,jj,jk,jp_sal) = zn / zs * zh * r1_rau0 * ztm 
    11131181                  ! 
     
    15891657      END SELECT 
    15901658      ! 
    1591       rau0_rcp    = rau0 * rcp  
     1659      rau0_rcp    = rau0 * rcp 
    15921660      r1_rau0     = 1._wp / rau0 
    15931661      r1_rcp      = 1._wp / rcp 
    1594       r1_rau0_rcp = 1._wp / rau0_rcp  
     1662      r1_rau0_rcp = 1._wp / rau0_rcp 
    15951663      ! 
    15961664      IF(lwp) WRITE(numout,*) 
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r5123 r5296  
    2929   !!            3.3.1! 2011-01  (A. R. Porter, STFC Daresbury) dynamical allocation 
    3030   !!            3.4  ! 2011-11  (C. Harris) decomposition changes for running with CICE 
    31    !!                 ! 2012-05  (C. Calone, J. Simeon, G. Madec, C. Ethe) Add grid coarsening  
     31   !!                 ! 2012-05  (C. Calone, J. Simeon, G. Madec, C. Ethe) Add grid coarsening 
    3232   !!---------------------------------------------------------------------- 
    3333 
     
    5959   USE phycst          ! physical constant                  (par_cst routine) 
    6060   USE trdini          ! dyn/tra trends initialization     (trd_init routine) 
    61    USE asminc          ! assimilation increments      
     61   USE asminc          ! assimilation increments 
    6262   USE asmbkg          ! writing out state trajectory 
    6363   USE diaptr          ! poleward transports           (dia_ptr_init routine) 
     
    8181   USE sbctide, ONLY: lk_tide 
    8282   USE crsini          ! initialise grid coarsening utility 
    83    USE lbcnfd, ONLY: isendto, nsndto, nfsloop, nfeloop ! Setup of north fold exchanges  
     83   USE lbcnfd, ONLY: isendto, nsndto, nfsloop, nfeloop ! Setup of north fold exchanges 
     84   USE stopar 
     85   USE stopts 
    8486 
    8587   IMPLICIT NONE 
     
    125127#if defined key_agrif 
    126128      CALL Agrif_Declare_Var_dom   ! AGRIF: set the meshes for DOM 
    127       CALL Agrif_Declare_Var       !  "      "   "   "      "  DYN/TRA  
     129      CALL Agrif_Declare_Var       !  "      "   "   "      "  DYN/TRA 
    128130# if defined key_top 
    129131      CALL Agrif_Declare_Var_top   !  "      "   "   "      "  TOP 
     
    197199      IF( lk_cpl ) CALL cpl_finalize    ! end coupling and mpp communications with OASIS 
    198200#else 
    199       IF( lk_cpl ) THEN  
     201      IF( lk_cpl ) THEN 
    200202         CALL cpl_finalize              ! end coupling and mpp communications with OASIS 
    201203      ELSE 
     
    246248      REWIND( numnam_cfg )              ! Namelist namcfg in confguration namelist : Control prints & Benchmark 
    247249      READ  ( numnam_cfg, namcfg, IOSTAT = ios, ERR = 904 ) 
    248 904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfg in configuration namelist', .TRUE. )    
     250904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfg in configuration namelist', .TRUE. ) 
    249251 
    250252! Force values for AGRIF zoom (cf. agrif_user.F90) 
     
    322324#if defined key_nemocice_decomp 
    323325         jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci ! first  dim. 
    324          jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim.  
     326         jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim. 
    325327#else 
    326328         jpi = ( jpiglo-2*jpreci + (jpni-1) ) / jpni + 2*jpreci   ! first  dim. 
     
    392394 
    393395                            CALL dyn_nept_init  ! simplified form of Neptune effect 
    394       !      
     396      ! 
    395397      IF( ln_crs        )   CALL     crs_init   ! Domain initialization of coarsened grid 
    396398      ! 
     
    432434      IF( nn_cla == 1 .AND. cp_cfg == 'orca' .AND. jp_cfg == 2 )   CALL cla_init       ! Cross Land Advection 
    433435                            CALL icb_init( rdt, nit000)   ! initialise icebergs instance 
    434       
     436                            CALL sto_par_init   ! Stochastic parametrization 
     437      IF( ln_sto_eos     )  CALL sto_pts_init   ! RRandom T/S fluctuations 
     438 
    435439#if defined key_top 
    436440      !                                     ! Passive tracers 
     
    506510         WRITE(numout,*) '      left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom 
    507511         WRITE(numout,*) '      left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom 
    508          WRITE(numout,*) '      lateral cond. type (between 0 and 6) jperio = ', jperio    
     512         WRITE(numout,*) '      lateral cond. type (between 0 and 6) jperio = ', jperio 
    509513         WRITE(numout,*) '      use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr 
    510514      ENDIF 
     
    607611      USE ldftra_oce, ONLY: ldftra_oce_alloc 
    608612      USE trc_oce   , ONLY: trc_oce_alloc 
    609 #if defined key_diadct  
    610       USE diadct    , ONLY: diadct_alloc  
    611 #endif  
     613#if defined key_diadct 
     614      USE diadct    , ONLY: diadct_alloc 
     615#endif 
    612616#if defined key_bdy 
    613617      USE bdy_oce   , ONLY: bdy_oce_alloc 
     
    626630      ierr = ierr + trc_oce_alloc   ()          ! shared TRC / TRA arrays 
    627631      ! 
    628 #if defined key_diadct  
    629       ierr = ierr + diadct_alloc    ()          !  
    630 #endif  
     632#if defined key_diadct 
     633      ierr = ierr + diadct_alloc    ()          ! 
     634#endif 
    631635#if defined key_bdy 
    632636      ierr = ierr + bdy_oce_alloc   ()          ! bdy masks (incl. initialization) 
     
    757761      !!====================================================================== 
    758762      !!                     ***  ROUTINE  nemo_northcomms  *** 
    759       !! nemo_northcomms    :  Setup for north fold exchanges with explicit  
     763      !! nemo_northcomms    :  Setup for north fold exchanges with explicit 
    760764      !!                       point-to-point messaging 
    761765      !!===================================================================== 
     
    765769      !!---------------------------------------------------------------------- 
    766770      !!    1.0  ! 2011-10  (A. C. Coward, NOCS & J. Donners, PRACE) 
    767       !!    2.0  ! 2013-06 Setup avoiding MPI communication (I. Epicoco, S. Mocavero, CMCC)  
     771      !!    2.0  ! 2013-06 Setup avoiding MPI communication (I. Epicoco, S. Mocavero, CMCC) 
    768772      !!---------------------------------------------------------------------- 
    769773 
     
    772776 
    773777      njmppmax = MAXVAL( njmppt ) 
    774      
     778 
    775779      !initializes the north-fold communication variables 
    776780      isendto(:) = 0 
     
    788792          !loop over the other north-fold processes to find the processes 
    789793          !managing the points belonging to the sxT-dxT range 
    790    
     794 
    791795          DO jn = 1, jpni 
    792796                !sxT is the first point (in the global domain) of the jn 
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC/step.F90

    r5147 r5296  
    106106 
    107107      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     108      ! Update stochastic parameters and random T/S fluctuations 
     109      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     110                        CALL sto_par( kstp )          ! Stochastic parameters 
     111 
     112      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    108113      ! Ocean physics update                (ua, va, tsa used as workspace) 
    109114      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    145150      ! 
    146151      IF( lk_ldfslp ) THEN                            ! slope of lateral mixing 
     152         IF(ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations 
    147153                         CALL eos( tsb, rhd, gdept_0(:,:,:) )               ! before in situ density 
    148154         IF( ln_zps .AND. .NOT. ln_isfcav)                               & 
     
    173179      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    174180                         CALL ssh_nxt       ( kstp )  ! after ssh (includes call to div_cur) 
    175       IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors  
    176                          CALL wzv           ( kstp )  ! now cross-level velocity  
    177  
    178       IF( lk_dynspg_ts ) THEN  
     181      IF( lk_vvl     )   CALL dom_vvl_sf_nxt( kstp )  ! after vertical scale factors 
     182                         CALL wzv           ( kstp )  ! now cross-level velocity 
     183 
     184      IF( lk_dynspg_ts ) THEN 
    179185          ! In case the time splitting case, update almost all momentum trends here: 
    180186          ! Note that the computation of vertical velocity above, hence "after" sea level 
    181187          ! is necessary to compute momentum advection for the rhs of barotropic loop: 
     188            IF(ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations 
    182189                            CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation 
    183190            IF( ln_zps .AND. .NOT. ln_isfcav)                               & 
     
    210217                                  CALL div_cur( kstp )         ! Horizontal divergence & Relative vorticity (2nd call in time-split case) 
    211218          IF( lk_vvl     )        CALL dom_vvl_sf_nxt( kstp, kcall=2 )  ! after vertical scale factors (update depth average component) 
    212                                   CALL wzv           ( kstp )  ! now cross-level velocity  
     219                                  CALL wzv           ( kstp )  ! now cross-level velocity 
    213220      ENDIF 
    214221 
     
    261268         IF( ln_zdfnpc   )   CALL tra_npc( kstp )                ! update after fields by non-penetrative convection 
    262269                             CALL tra_nxt( kstp )                ! tracer fields at next time step 
     270            IF(ln_sto_eos )  CALL sto_pts( tsn )    ! Random T/S fluctuations 
    263271                             CALL eos    ( tsa, rhd, rhop, fsdept_n(:,:,:) )  ! Time-filtered in situ density for hpg computation 
    264272            IF( ln_zps .AND. .NOT. ln_isfcav)                                & 
     
    271279      ELSE                                                  ! centered hpg  (eos then time stepping) 
    272280         IF ( .NOT. lk_dynspg_ts ) THEN                     ! eos already called in time-split case 
     281             IF(ln_sto_eos ) CALL sto_pts( tsn )    ! Random T/S fluctuations 
    273282                             CALL eos    ( tsn, rhd, rhop, fsdept_n(:,:,:) )  ! now in situ density for hpg computation 
    274283         IF( ln_zps .AND. .NOT. ln_isfcav)                                   & 
    275284               &             CALL zps_hde    ( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps: before horizontal gradient 
    276285               &                                           rhd, gru , grv    )  ! of t, s, rd at the last ocean level 
    277          IF( ln_zps .AND.       ln_isfcav)                                   &  
     286         IF( ln_zps .AND.       ln_isfcav)                                   & 
    278287               &             CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv,  &    ! Partial steps for top cell (ISF) 
    279288               &                                           rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   & 
     
    292301                               ua(:,:,:) = ua_sv(:,:,:) 
    293302                               va(:,:,:) = va_sv(:,:,:) 
    294                                                              ! Revert now divergence and rotational to previously computed ones  
     303                                                             ! Revert now divergence and rotational to previously computed ones 
    295304                                                             !(needed because of the time swap in div_cur, at the beginning of each time step) 
    296305                               hdivn(:,:,:) = hdivb(:,:,:) 
    297                                rotn(:,:,:)  = rotb(:,:,:)  
     306                               rotn(:,:,:)  = rotb(:,:,:) 
    298307 
    299308                               CALL dyn_bfr( kstp )         ! bottom friction 
     
    349358      ! 
    350359#if defined key_iomput 
    351       IF( kstp == nitend .OR. indic < 0 ) THEN  
     360      IF( kstp == nitend .OR. indic < 0 ) THEN 
    352361                      CALL iom_context_finalize( "nemo"     ) ! needed for XIOS+AGRIF 
    353          IF( ln_crs ) CALL iom_context_finalize( "nemo_crs" ) !  
     362         IF( ln_crs ) CALL iom_context_finalize( "nemo_crs" ) ! 
    354363      ENDIF 
    355364#endif 
  • branches/2015/dev_r5177_CNRS4_stopar/NEMOGCM/NEMO/OPA_SRC/step_oce.F90

    r4990 r5296  
    5454   USE dynnxt           ! time-stepping                    (dyn_nxt routine) 
    5555 
     56   USE stopar           ! Stochastic parametrization       (sto_par routine) 
     57   USE stopts           ! Stochastic T/S fluctuations      (sto_pts routine) 
     58 
    5659   USE bdy_par          ! for lk_bdy 
    5760   USE bdy_oce          ! for dmp logical 
     
    6972   USE ldfeiv           ! eddy induced velocity coef.      (ldf_eiv routine) 
    7073   USE ldftra_smag      ! Smagirinsky diffusion            (ldftra_smag routine) 
    71    USE ldfdyn_smag      ! Smagorinsky viscosity            (ldfdyn_smag routine)  
     74   USE ldfdyn_smag      ! Smagorinsky viscosity            (ldfdyn_smag routine) 
    7275 
    7376   USE zdftmx           ! tide-induced vertical mixing     (zdf_tmx routine) 
Note: See TracChangeset for help on using the changeset viewer.