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 12928 for NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/CRS – NEMO

Ignore:
Timestamp:
2020-05-14T21:46:00+02:00 (4 years ago)
Author:
smueller
Message:

Synchronizing with /NEMO/trunk@12925 (ticket #2170)

Location:
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser

    • Property svn:externals
      •  

        old new  
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@HEAD         sette 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/CRS/README.rst

    r10279 r12928  
    22On line biogeochemistry coarsening 
    33********************************** 
     4 
     5.. todo:: 
     6 
     7 
    48 
    59.. contents:: 
     
    6367                              ! 1, MAX of KZ 
    6468                              ! 2, MIN of KZ 
    65                               ! 3, 10^(MEAN(LOG(KZ))  
    66                               ! 4, MEDIANE of KZ  
     69                              ! 3, 10^(MEAN(LOG(KZ)) 
     70                              ! 4, MEDIANE of KZ 
    6771      ln_crs_wn   = .false.   ! wn coarsened (T) or computed using horizontal divergence ( F ) 
    6872                              !                           ! 
     
    7377  the north-fold lateral boundary condition (ORCA025, ORCA12, ORCA36, ...). 
    7478- ``nn_msh_crs = 1`` will activate the generation of the coarsened grid meshmask. 
    75 - ``nn_crs_kz`` is the operator to coarsen the vertical mixing coefficient.  
     79- ``nn_crs_kz`` is the operator to coarsen the vertical mixing coefficient. 
    7680- ``ln_crs_wn`` 
    7781 
     
    8084  - when ``key_vvl`` is not activated, 
    8185 
    82     - coarsened vertical velocities are computed using horizontal divergence (``ln_crs_wn = .false.``)  
     86    - coarsened vertical velocities are computed using horizontal divergence (``ln_crs_wn = .false.``) 
    8387    - or coarsened vertical velocities are computed with an average operator (``ln_crs_wn = .true.``) 
    8488- ``ln_crs_top = .true.``: should be activated to run BCG model in coarsened space; 
     
    97101 
    98102In the [attachment:iodef.xml iodef.xml]  file, a "nemo" context is defined and 
    99 some variable defined in [attachment:file_def.xml file_def.xml] are writted on the ocean-dynamic grid.   
     103some variable defined in [attachment:file_def.xml file_def.xml] are writted on the ocean-dynamic grid. 
    100104To write variables on the coarsened grid, and in particular the passive tracers, 
    101105a "nemo_crs" context should be defined in [attachment:iodef.xml iodef.xml] and 
     
    111115  interpolated `on-the-fly <http://forge.ipsl.jussieu.fr/nemo/wiki/Users/SetupNewConfiguration/Weight-creator>`_. 
    112116  Example of namelist for PISCES : 
    113    
     117 
    114118   .. code-block:: fortran 
    115119 
     
    134138         rn_trfac(14)  =   1.0e-06  !  -      -      -     - 
    135139         rn_trfac(23)  =   7.6e-06  !  -      -      -     - 
    136        
     140 
    137141         cn_dir        =  './'      !  root directory for the location of the data files 
    138142 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/CRS/crsdomwri.F90

    r10425 r12928  
    155155      DO jk = 1,jpk    
    156156         DO jj = 1, jpj_crsm1    
    157             DO ji = 1, jpi_crsm1  ! jes what to do for fs_jpim1??vector opt. 
     157            DO ji = 1, jpi_crsm1  ! jes what to do for jpim1??vector opt. 
    158158               zdepu(ji,jj,jk) = MIN( gdept_crs(ji,jj,jk) , gdept_crs(ji+1,jj  ,jk) ) * umask_crs(ji,jj,jk) 
    159159               zdepv(ji,jj,jk) = MIN( gdept_crs(ji,jj,jk) , gdept_crs(ji  ,jj+1,jk) ) * vmask_crs(ji,jj,jk) 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/CRS/crsfld.F90

    r10425 r12928  
    3232 
    3333   !! * Substitutions 
    34 #  include "vectopt_loop_substitute.h90" 
     34#  include "do_loop_substitute.h90" 
    3535   !!---------------------------------------------------------------------- 
    3636   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    4040CONTAINS 
    4141 
    42    SUBROUTINE crs_fld( kt ) 
     42   SUBROUTINE crs_fld( kt, Kmm ) 
    4343      !!--------------------------------------------------------------------- 
    4444      !!                  ***  ROUTINE crs_fld  *** 
     
    5454      !!---------------------------------------------------------------------- 
    5555      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     56      INTEGER, INTENT(in) ::   Kmm  ! time level index 
    5657      ! 
    5758      INTEGER  ::   ji, jj, jk        ! dummy loop indices 
     
    6768 
    6869      ! Depth work arrrays 
    69       ze3t(:,:,:) = e3t_n(:,:,:) 
    70       ze3u(:,:,:) = e3u_n(:,:,:) 
    71       ze3v(:,:,:) = e3v_n(:,:,:) 
    72       ze3w(:,:,:) = e3w_n(:,:,:) 
     70      ze3t(:,:,:) = e3t(:,:,:,Kmm) 
     71      ze3u(:,:,:) = e3u(:,:,:,Kmm) 
     72      ze3v(:,:,:) = e3v(:,:,:,Kmm) 
     73      ze3w(:,:,:) = e3w(:,:,:,Kmm) 
    7374 
    7475      IF( kt == nit000  ) THEN 
     
    9697 
    9798      !  Temperature 
    98       zt(:,:,:) = tsn(:,:,:,jp_tem)  ;      zt_crs(:,:,:) = 0._wp 
     99      zt(:,:,:) = ts(:,:,:,jp_tem,Kmm)  ;      zt_crs(:,:,:) = 0._wp 
    99100      CALL crs_dom_ope( zt, 'VOL', 'T', tmask, zt_crs, p_e12=e1e2t, p_e3=ze3t, psgn=1.0 ) 
    100101      tsn_crs(:,:,:,jp_tem) = zt_crs(:,:,:) 
     
    105106       
    106107      !  Salinity 
    107       zs(:,:,:) = tsn(:,:,:,jp_sal)  ;      zs_crs(:,:,:) = 0._wp 
     108      zs(:,:,:) = ts(:,:,:,jp_sal,Kmm)  ;      zs_crs(:,:,:) = 0._wp 
    108109      CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=e1e2t, p_e3=ze3t, psgn=1.0 ) 
    109110      tsn_crs(:,:,:,jp_sal) = zt_crs(:,:,:) 
     
    113114 
    114115      !  U-velocity 
    115       CALL crs_dom_ope( un, 'SUM', 'U', umask, un_crs, p_e12=e2u, p_e3=ze3u, p_surf_crs=e2e3u_msk, psgn=-1.0 ) 
     116      CALL crs_dom_ope( uu(:,:,:,Kmm), 'SUM', 'U', umask, un_crs, p_e12=e2u, p_e3=ze3u, p_surf_crs=e2e3u_msk, psgn=-1.0 ) 
    116117      ! 
    117118      zt(:,:,:) = 0._wp     ;    zs(:,:,:) = 0._wp  ;   zt_crs(:,:,:) = 0._wp   ;    zs_crs(:,:,:) = 0._wp 
    118       DO jk = 1, jpkm1 
    119          DO jj = 2, jpjm1 
    120             DO ji = 2, jpim1    
    121                zt(ji,jj,jk)  = un(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji+1,jj,jk,jp_tem) )  
    122                zs(ji,jj,jk)  = un(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji+1,jj,jk,jp_sal) )  
    123             END DO 
    124          END DO 
    125       END DO 
     119      DO_3D_00_00( 1, jpkm1 ) 
     120         zt(ji,jj,jk)  = uu(ji,jj,jk,Kmm) * 0.5 * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji+1,jj,jk,jp_tem,Kmm) )  
     121         zs(ji,jj,jk)  = uu(ji,jj,jk,Kmm) * 0.5 * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji+1,jj,jk,jp_sal,Kmm) )  
     122      END_3D 
    126123      CALL crs_dom_ope( zt, 'SUM', 'U', umask, zt_crs, p_e12=e2u, p_e3=ze3u, p_surf_crs=e2e3u_msk, psgn=-1.0 ) 
    127124      CALL crs_dom_ope( zs, 'SUM', 'U', umask, zs_crs, p_e12=e2u, p_e3=ze3u, p_surf_crs=e2e3u_msk, psgn=-1.0 ) 
     
    132129 
    133130      !  V-velocity 
    134       CALL crs_dom_ope( vn, 'SUM', 'V', vmask, vn_crs, p_e12=e1v, p_e3=ze3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 
     131      CALL crs_dom_ope( vv(:,:,:,Kmm), 'SUM', 'V', vmask, vn_crs, p_e12=e1v, p_e3=ze3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 
    135132      !                                                                                  
    136133      zt(:,:,:) = 0._wp     ;    zs(:,:,:) = 0._wp  ;   zt_crs(:,:,:) = 0._wp   ;    zs_crs(:,:,:) = 0._wp 
    137       DO jk = 1, jpkm1 
    138          DO jj = 2, jpjm1 
    139             DO ji = 2, jpim1    
    140                zt(ji,jj,jk)  = vn(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_tem) + tsn(ji,jj+1,jk,jp_tem) )  
    141                zs(ji,jj,jk)  = vn(ji,jj,jk) * 0.5 * ( tsn(ji,jj,jk,jp_sal) + tsn(ji,jj+1,jk,jp_sal) )  
    142             END DO 
    143          END DO 
    144       END DO 
     134      DO_3D_00_00( 1, jpkm1 ) 
     135         zt(ji,jj,jk)  = vv(ji,jj,jk,Kmm) * 0.5 * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji,jj+1,jk,jp_tem,Kmm) )  
     136         zs(ji,jj,jk)  = vv(ji,jj,jk,Kmm) * 0.5 * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji,jj+1,jk,jp_sal,Kmm) )  
     137      END_3D 
    145138      CALL crs_dom_ope( zt, 'SUM', 'V', vmask, zt_crs, p_e12=e1v, p_e3=ze3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 
    146139      CALL crs_dom_ope( zs, 'SUM', 'V', vmask, zs_crs, p_e12=e1v, p_e3=ze3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 
     
    152145      IF( iom_use( "eken") ) THEN     !      kinetic energy 
    153146         z3d(:,:,jk) = 0._wp  
    154          DO jk = 1, jpkm1 
    155             DO jj = 2, jpjm1 
    156                DO ji = fs_2, fs_jpim1   ! vector opt. 
    157                   zztmp  = r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
    158                   z3d(ji,jj,jk) = 0.25_wp * zztmp * (                                    & 
    159                      &            un(ji-1,jj,jk)**2 * e2u(ji-1,jj) * e3u_n(ji-1,jj,jk)   & 
    160                      &          + un(ji  ,jj,jk)**2 * e2u(ji  ,jj) * e3u_n(ji  ,jj,jk)   & 
    161                      &          + vn(ji,jj-1,jk)**2 * e1v(ji,jj-1) * e3v_n(ji,jj-1,jk)   & 
    162                      &          + vn(ji,jj  ,jk)**2 * e1v(ji,jj  ) * e3v_n(ji,jj  ,jk)   ) 
    163                END DO 
    164             END DO 
    165          END DO 
     147         DO_3D_00_00( 1, jpkm1 ) 
     148            zztmp  = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     149            z3d(ji,jj,jk) = 0.25_wp * zztmp * (                                    & 
     150               &            uu(ji-1,jj,jk,Kmm)**2 * e2u(ji-1,jj) * e3u(ji-1,jj,jk,Kmm)   & 
     151               &          + uu(ji  ,jj,jk,Kmm)**2 * e2u(ji  ,jj) * e3u(ji  ,jj,jk,Kmm)   & 
     152               &          + vv(ji,jj-1,jk,Kmm)**2 * e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm)   & 
     153               &          + vv(ji,jj  ,jk,Kmm)**2 * e1v(ji,jj  ) * e3v(ji,jj  ,jk,Kmm)   ) 
     154         END_3D 
    166155         CALL lbc_lnk( 'crsfld', z3d, 'T', 1. ) 
    167156         ! 
     
    191180      !  W-velocity 
    192181      IF( ln_crs_wn ) THEN 
    193          CALL crs_dom_ope( wn, 'SUM', 'W', tmask, wn_crs, p_e12=e1e2t, p_surf_crs=e1e2w_msk, psgn=1.0 ) 
    194        !  CALL crs_dom_ope( wn, 'VOL', 'W', tmask, wn_crs, p_e12=e1e2t, p_e3=ze3w ) 
     182         CALL crs_dom_ope( ww, 'SUM', 'W', tmask, wn_crs, p_e12=e1e2t, p_surf_crs=e1e2w_msk, psgn=1.0 ) 
     183       !  CALL crs_dom_ope( ww, 'VOL', 'W', tmask, wn_crs, p_e12=e1e2t, p_e3=ze3w ) 
    195184      ELSE 
    196185        wn_crs(:,:,jpk) = 0._wp 
     
    219208       
    220209      !  sbc fields   
    221       CALL crs_dom_ope( sshn , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=ze3t           , psgn=1.0 )   
     210      CALL crs_dom_ope( ssh(:,:,Kmm) , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=ze3t           , psgn=1.0 )   
    222211      CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u  , p_surf_crs=e2u_crs  , psgn=1.0 ) 
    223212      CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v  , p_surf_crs=e1v_crs  , psgn=1.0 ) 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/CRS/crsini.F90

    r12178 r12928  
    3535CONTAINS 
    3636    
    37    SUBROUTINE crs_init  
     37   SUBROUTINE crs_init( Kmm ) 
    3838      !!------------------------------------------------------------------- 
    3939      !!                     *** SUBROUTINE crs_init 
     
    6868      !!               - Read in pertinent data ? 
    6969      !!------------------------------------------------------------------- 
     70      INTEGER, INTENT(in) :: Kmm   ! time level index 
     71      ! 
    7072      INTEGER  :: ji,jj,jk      ! dummy indices 
    7173      INTEGER  :: ierr                                ! allocation error status 
     
    8082     !--------------------------------------------------------- 
    8183     ! 
    82       REWIND( numnam_ref )              ! Namelist namrun in reference namelist : Parameters of the run 
    8384      READ  ( numnam_ref, namcrs, IOSTAT = ios, ERR = 901) 
    8485901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namcrs in reference namelist' ) 
    85       REWIND( numnam_cfg )              ! Namelist namrun in configuration namelist : Parameters of the run 
    8686      READ  ( numnam_cfg, namcrs, IOSTAT = ios, ERR = 902 ) 
    8787902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namcrs in configuration namelist' ) 
     
    9898        WRITE(numout,*) '      create a mesh file (=T)               ln_msh_crs = ', ln_msh_crs 
    9999        WRITE(numout,*) '      type of Kz coarsening (0,1,2)         nn_crs_kz  = ', nn_crs_kz 
    100         WRITE(numout,*) '      wn coarsened or computed using hdivn  ln_crs_wn  = ', ln_crs_wn 
     100        WRITE(numout,*) '      ww coarsened or computed using hdiv  ln_crs_wn  = ', ln_crs_wn 
    101101     ENDIF 
    102102               
     
    174174      
    175175     ! 
    176      ze3t(:,:,:) = e3t_n(:,:,:) 
    177      ze3u(:,:,:) = e3u_n(:,:,:) 
    178      ze3v(:,:,:) = e3v_n(:,:,:) 
    179      ze3w(:,:,:) = e3w_n(:,:,:) 
     176     ze3t(:,:,:) = e3t(:,:,:,Kmm) 
     177     ze3u(:,:,:) = e3u(:,:,:,Kmm) 
     178     ze3v(:,:,:) = e3v(:,:,:,Kmm) 
     179     ze3w(:,:,:) = e3w(:,:,:,Kmm) 
    180180 
    181181     !    3.d.2   Surfaces  
Note: See TracChangeset for help on using the changeset viewer.