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 8882 for branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/LDF – NEMO

Ignore:
Timestamp:
2017-12-01T18:44:09+01:00 (6 years ago)
Author:
flavoni
Message:

dev_CNRS_2017 branch: merged dev_r7881_ENHANCE09_RK3 with trunk r8864

Location:
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/LDF
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn.F90

    r7753 r8882  
    2424   USE lib_mpp         ! distribued memory computing library 
    2525   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    26    USE wrk_nemo        ! Memory Allocation 
    2726 
    2827   IMPLICIT NONE 
     
    3332 
    3433   !                                                !!* Namelist namdyn_ldf : lateral mixing on momentum * 
     34   LOGICAL , PUBLIC ::   ln_dynldf_NONE  !: No operator (i.e. no explicit diffusion) 
    3535   LOGICAL , PUBLIC ::   ln_dynldf_lap   !: laplacian operator 
    3636   LOGICAL , PUBLIC ::   ln_dynldf_blp   !: bilaplacian operator 
     
    9696      REAL(wp) ::   zah0              ! local scalar 
    9797      ! 
    98       NAMELIST/namdyn_ldf/ ln_dynldf_lap, ln_dynldf_blp,                  & 
    99          &                 ln_dynldf_lev, ln_dynldf_hor, ln_dynldf_iso,   & 
    100          &                 nn_ahm_ijk_t , rn_ahm_0, rn_ahm_b, rn_bhm_0,   & 
    101          &                 rn_csmc      , rn_minfac, rn_maxfac 
     98      NAMELIST/namdyn_ldf/ ln_dynldf_NONE, ln_dynldf_lap, ln_dynldf_blp,   &   ! type of operator 
     99         &                 ln_dynldf_lev, ln_dynldf_hor, ln_dynldf_iso ,   &   ! acting direction of the operator 
     100         &                 nn_ahm_ijk_t , rn_ahm_0, rn_ahm_b, rn_bhm_0 ,   &   ! lateral eddy coefficient 
     101         &                 rn_csmc      , rn_minfac, rn_maxfac                 ! Smagorinsky settings 
    102102      !!---------------------------------------------------------------------- 
    103103      ! 
     
    118118         ! 
    119119         WRITE(numout,*) '      type :' 
     120         WRITE(numout,*) '         no explicit diffusion                ln_dynldf_NONE= ', ln_dynldf_NONE 
    120121         WRITE(numout,*) '         laplacian operator                   ln_dynldf_lap = ', ln_dynldf_lap 
    121122         WRITE(numout,*) '         bilaplacian operator                 ln_dynldf_blp = ', ln_dynldf_blp 
     
    131132         WRITE(numout,*) '         background viscosity (iso case)      rn_ahm_b      = ', rn_ahm_b, ' m2/s' 
    132133         WRITE(numout,*) '         lateral bilaplacian eddy viscosity   rn_bhm_0      = ', rn_bhm_0, ' m4/s' 
    133          WRITE(numout,*) '      smagorinsky settings (nn_ahm_ijk_t  = 32) :' 
     134         WRITE(numout,*) '      Smagorinsky settings (nn_ahm_ijk_t  = 32) :' 
    134135         WRITE(numout,*) '         Smagorinsky coefficient              rn_csmc       = ', rn_csmc 
    135136         WRITE(numout,*) '         factor multiplier for theorectical lower limit for ' 
     
    140141 
    141142      !                                ! Parameter control 
    142       IF( .NOT.ln_dynldf_lap .AND. .NOT.ln_dynldf_blp ) THEN 
     143      IF( ln_dynldf_NONE ) THEN 
    143144         IF(lwp) WRITE(numout,*) '   No viscous operator selected. ahmt and ahmf are not allocated' 
    144145         l_ldfdyn_time = .FALSE. 
     
    284285      !!---------------------------------------------------------------------- 
    285286      ! 
    286       IF( nn_timing == 1 )  CALL timing_start('ldf_dyn') 
     287      IF( ln_timing )   CALL timing_start('ldf_dyn') 
    287288      ! 
    288289      SELECT CASE(  nn_ahm_ijk_t  )       !== Eddy vicosity coefficients ==! 
     
    411412      CALL iom_put( "ahmf_3d", ahmf(:,:,:) )   ! 3D      v-eddy diffusivity coeff. 
    412413      ! 
    413       IF( nn_timing == 1 )  CALL timing_stop('ldf_dyn') 
     414      IF( ln_timing )   CALL timing_stop('ldf_dyn') 
    414415      ! 
    415416   END SUBROUTINE ldf_dyn 
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r7753 r8882  
    3232   USE lib_mpp        ! distribued memory computing library 
    3333   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    34    USE wrk_nemo       ! work arrays 
    3534   USE timing         ! Timing 
    3635 
     
    118117      REAL(wp) ::   zck, zfk,      zbw             !   -      - 
    119118      REAL(wp) ::   zdepu, zdepv                   !   -      - 
    120       REAL(wp), POINTER, DIMENSION(:,:  ) ::  zslpml_hmlpu, zslpml_hmlpv 
    121       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwz, zww 
    122       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zdzr 
    123       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zgru, zgrv 
    124       !!---------------------------------------------------------------------- 
    125       ! 
    126       IF( nn_timing == 1 )  CALL timing_start('ldf_slp') 
    127       ! 
    128       CALL wrk_alloc( jpi,jpj,jpk, zwz, zww, zdzr, zgru, zgrv ) 
    129       CALL wrk_alloc( jpi,jpj, zslpml_hmlpu, zslpml_hmlpv ) 
    130  
     119      REAL(wp), DIMENSION(jpi,jpj)     ::  zslpml_hmlpu, zslpml_hmlpv 
     120      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zgru, zwz, zdzr 
     121      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zgrv, zww 
     122      !!---------------------------------------------------------------------- 
     123      ! 
     124      IF( ln_timing )   CALL timing_start('ldf_slp') 
     125      ! 
    131126      zeps   =  1.e-20_wp        !==   Local constant initialization   ==! 
    132127      z1_16  =  1.0_wp / 16._wp 
     
    157152         DO jj = 1, jpjm1 
    158153            DO ji = 1, jpim1 
    159                IF ( miku(ji,jj) > 1 ) zgru(ji,jj,miku(ji,jj)) = grui(ji,jj)  
    160                IF ( mikv(ji,jj) > 1 ) zgrv(ji,jj,mikv(ji,jj)) = grvi(ji,jj) 
     154               IF( miku(ji,jj) > 1 )  zgru(ji,jj,miku(ji,jj)) = grui(ji,jj)  
     155               IF( mikv(ji,jj) > 1 )  zgrv(ji,jj,mikv(ji,jj)) = grvi(ji,jj) 
    161156            END DO 
    162157         END DO 
     
    375370      ENDIF 
    376371      ! 
    377       CALL wrk_dealloc( jpi,jpj,jpk, zwz, zww, zdzr, zgru, zgrv ) 
    378       CALL wrk_dealloc( jpi,jpj, zslpml_hmlpu, zslpml_hmlpv ) 
    379       ! 
    380       IF( nn_timing == 1 )  CALL timing_stop('ldf_slp') 
     372      IF( ln_timing )   CALL timing_stop('ldf_slp') 
    381373      ! 
    382374   END SUBROUTINE ldf_slp 
     
    409401      REAL(wp) ::   zdzrho_raw 
    410402      REAL(wp) ::   zbeta0, ze3_e1, ze3_e2 
    411       REAL(wp), POINTER, DIMENSION(:,:)     ::   z1_mlbw 
    412       REAL(wp), POINTER, DIMENSION(:,:,:)   ::   zalbet 
    413       REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   zdxrho , zdyrho, zdzrho     ! Horizontal and vertical density gradients 
    414       REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   zti_mlb, ztj_mlb            ! for Griffies operator only 
    415       !!---------------------------------------------------------------------- 
    416       ! 
    417       IF( nn_timing == 1 )  CALL timing_start('ldf_slp_triad') 
    418       ! 
    419       CALL wrk_alloc( jpi,jpj, z1_mlbw ) 
    420       CALL wrk_alloc( jpi,jpj,jpk, zalbet ) 
    421       CALL wrk_alloc( jpi,jpj,jpk,2, zdxrho , zdyrho, zdzrho,              klstart = 0  ) 
    422       CALL wrk_alloc( jpi,jpj,  2,2, zti_mlb, ztj_mlb,        kkstart = 0, klstart = 0  ) 
     403      REAL(wp), DIMENSION(jpi,jpj)     ::   z1_mlbw 
     404      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zalbet 
     405      REAL(wp), DIMENSION(jpi,jpj,jpk,0:1) ::   zdxrho , zdyrho, zdzrho     ! Horizontal and vertical density gradients 
     406      REAL(wp), DIMENSION(jpi,jpj,0:1,0:1) ::   zti_mlb, ztj_mlb            ! for Griffies operator only 
     407      !!---------------------------------------------------------------------- 
     408      ! 
     409      IF( ln_timing )   CALL timing_start('ldf_slp_triad') 
     410      ! 
    423411      ! 
    424412      !--------------------------------! 
     
    624612      CALL lbc_lnk( wslp2, 'W', 1. )      ! lateral boundary confition on wslp2 only   ==>>> gm : necessary ? to be checked 
    625613      ! 
    626       CALL wrk_dealloc( jpi,jpj, z1_mlbw ) 
    627       CALL wrk_dealloc( jpi,jpj,jpk, zalbet ) 
    628       CALL wrk_dealloc( jpi,jpj,jpk,2, zdxrho , zdyrho, zdzrho,              klstart = 0  ) 
    629       CALL wrk_dealloc( jpi,jpj,  2,2, zti_mlb, ztj_mlb,        kkstart = 0, klstart = 0  ) 
    630       ! 
    631       IF( nn_timing == 1 )  CALL timing_stop('ldf_slp_triad') 
     614      IF( ln_timing )   CALL timing_stop('ldf_slp_triad') 
    632615      ! 
    633616   END SUBROUTINE ldf_slp_triad 
     
    663646      !!---------------------------------------------------------------------- 
    664647      ! 
    665       IF( nn_timing == 1 )  CALL timing_start('ldf_slp_mxl') 
     648      IF( ln_timing )   CALL timing_start('ldf_slp_mxl') 
    666649      ! 
    667650      zeps   =  1.e-20_wp        !==   Local constant initialization   ==! 
     
    746729      CALL lbc_lnk( wslpiml, 'W', -1. )   ;   CALL lbc_lnk( wslpjml, 'W', -1. )   ! lateral boundary conditions 
    747730      ! 
    748       IF( nn_timing == 1 )  CALL timing_stop('ldf_slp_mxl') 
     731      IF( ln_timing )   CALL timing_stop('ldf_slp_mxl') 
    749732      ! 
    750733   END SUBROUTINE ldf_slp_mxl 
     
    763746      !!---------------------------------------------------------------------- 
    764747      ! 
    765       IF( nn_timing == 1 )  CALL timing_start('ldf_slp_init') 
     748      IF( ln_timing )   CALL timing_start('ldf_slp_init') 
    766749      ! 
    767750      IF(lwp) THEN 
     
    821804      ENDIF 
    822805      ! 
    823       IF( nn_timing == 1 )  CALL timing_stop('ldf_slp_init') 
     806      IF( ln_timing )   CALL timing_stop('ldf_slp_init') 
    824807      ! 
    825808   END SUBROUTINE ldf_slp_init 
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra.F90

    r7753 r8882  
    3030   USE lib_mpp         ! distribued memory computing library 
    3131   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    32    USE wrk_nemo        ! work arrays 
    3332   USE timing          ! timing 
    3433 
     
    4544   !                                   !!* Namelist namtra_ldf : lateral mixing on tracers *  
    4645   !                                    != Operator type =! 
     46   LOGICAL , PUBLIC ::   ln_traldf_NONE      !: no operator: No explicit diffusion 
    4747   LOGICAL , PUBLIC ::   ln_traldf_lap       !: laplacian operator 
    4848   LOGICAL , PUBLIC ::   ln_traldf_blp       !: bilaplacian operator 
     
    119119      INTEGER  ::   ierr, inum, ios   ! local integer 
    120120      REAL(wp) ::   zah0              ! local scalar 
    121       ! 
    122       NAMELIST/namtra_ldf/ ln_traldf_lap, ln_traldf_blp  ,                   &   ! type of operator 
    123          &                 ln_traldf_lev, ln_traldf_hor  , ln_traldf_triad,  &   ! acting direction of the operator 
    124          &                 ln_traldf_iso, ln_traldf_msc  ,  rn_slpmax     ,  &   ! option for iso-neutral operator 
    125          &                 ln_triad_iso , ln_botmix_triad, rn_sw_triad    ,  &   ! option for triad operator 
    126          &                 rn_aht_0     , rn_bht_0       , nn_aht_ijk_t          ! lateral eddy coefficient 
     121      !! 
     122      NAMELIST/namtra_ldf/ ln_traldf_NONE, ln_traldf_lap  , ln_traldf_blp  ,  &   ! type of operator 
     123         &                 ln_traldf_lev , ln_traldf_hor  , ln_traldf_triad,  &   ! acting direction of the operator 
     124         &                 ln_traldf_iso , ln_traldf_msc  ,  rn_slpmax     ,  &   ! option for iso-neutral operator 
     125         &                 ln_triad_iso  , ln_botmix_triad, rn_sw_triad    ,  &   ! option for triad operator 
     126         &                 rn_aht_0      , rn_bht_0       , nn_aht_ijk_t          ! lateral eddy coefficient 
    127127      !!---------------------------------------------------------------------- 
    128128      ! 
     
    144144         WRITE(numout,*) '~~~~~~~~~~~~ ' 
    145145         WRITE(numout,*) '   Namelist namtra_ldf : lateral mixing parameters (type, direction, coefficients)' 
    146          ! 
    147146         WRITE(numout,*) '      type :' 
     147         WRITE(numout,*) '         no explicit diffusion                   ln_traldf_NONE  = ', ln_traldf_NONE 
    148148         WRITE(numout,*) '         laplacian operator                      ln_traldf_lap   = ', ln_traldf_lap 
    149149         WRITE(numout,*) '         bilaplacian operator                    ln_traldf_blp   = ', ln_traldf_blp 
    150          ! 
    151150         WRITE(numout,*) '      direction of action :' 
    152151         WRITE(numout,*) '         iso-level                               ln_traldf_lev   = ', ln_traldf_lev 
     
    159158         WRITE(numout,*) '            switching triad or not               rn_sw_triad     = ', rn_sw_triad 
    160159         WRITE(numout,*) '            lateral mixing on bottom             ln_botmix_triad = ', ln_botmix_triad 
    161          ! 
    162160         WRITE(numout,*) '      coefficients :' 
    163161         WRITE(numout,*) '         lateral eddy diffusivity   (lap case)   rn_aht_0        = ', rn_aht_0 
     
    168166      !                                ! Parameter control 
    169167      ! 
    170       IF( .NOT.ln_traldf_lap .AND. .NOT.ln_traldf_blp ) THEN 
     168      IF( ln_traldf_NONE ) THEN 
    171169         IF(lwp) WRITE(numout,*) '   No diffusive operator selected. ahtu and ahtv are not allocated' 
    172170         l_ldftra_time = .FALSE. 
     
    490488      ! 
    491489      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
    492       REAL(wp) ::   zfw, ze3w, zn2, z1_f20, zaht, zaht_min, zzaei   ! local scalars 
    493       REAL(wp), DIMENSION(:,:), POINTER ::   zn, zah, zhw, zross, zaeiw   ! 2D workspace 
    494       !!---------------------------------------------------------------------- 
    495       ! 
    496       IF( nn_timing == 1 )   CALL timing_start('ldf_eiv') 
    497       ! 
    498       CALL wrk_alloc( jpi,jpj,   zn, zah, zhw, zross, zaeiw ) 
    499       !       
     490      REAL(wp) ::   zfw, ze3w, zn2, z1_f20, zaht, zaht_min, zzaei    ! local scalars 
     491      REAL(wp), DIMENSION(jpi,jpj) ::   zn, zah, zhw, zross, zaeiw   ! 2D workspace 
     492      !!---------------------------------------------------------------------- 
     493      ! 
     494      IF( ln_timing )   CALL timing_start('ldf_eiv') 
     495      ! 
    500496      zn   (:,:) = 0._wp      ! Local initialization 
    501497      zhw  (:,:) = 5._wp 
     
    575571      END DO 
    576572      !   
    577       CALL wrk_dealloc( jpi,jpj,   zn, zah, zhw, zross, zaeiw ) 
    578       ! 
    579       IF( nn_timing == 1 )   CALL timing_stop('ldf_eiv') 
     573      IF( ln_timing )   CALL timing_stop('ldf_eiv') 
    580574      ! 
    581575   END SUBROUTINE ldf_eiv 
     
    610604      REAL(wp) ::   zuwk, zuwk1, zuwi, zuwi1   ! local scalars 
    611605      REAL(wp) ::   zvwk, zvwk1, zvwj, zvwj1   !   -      - 
    612       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zpsi_uw, zpsi_vw 
    613       !!---------------------------------------------------------------------- 
    614       ! 
    615       IF( nn_timing == 1 )   CALL timing_start( 'ldf_eiv_trp') 
    616       ! 
    617       CALL wrk_alloc( jpi,jpj,jpk,   zpsi_uw, zpsi_vw ) 
    618  
     606      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zpsi_uw, zpsi_vw 
     607      !!---------------------------------------------------------------------- 
     608      ! 
     609      IF( ln_timing )   CALL timing_start( 'ldf_eiv_trp') 
     610      ! 
    619611      IF( kt == kit000 )  THEN 
    620612         IF(lwp) WRITE(numout,*) 
     
    658650      IF( ln_ldfeiv_dia .AND. cdtype == 'TRA' )   CALL ldf_eiv_dia( zpsi_uw, zpsi_vw ) 
    659651      ! 
    660       CALL wrk_dealloc( jpi,jpj,jpk,   zpsi_uw, zpsi_vw ) 
    661       ! 
    662       IF( nn_timing == 1 )   CALL timing_stop( 'ldf_eiv_trp') 
     652      IF( ln_timing )   CALL timing_stop( 'ldf_eiv_trp') 
    663653      ! 
    664654    END SUBROUTINE ldf_eiv_trp 
     
    679669      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
    680670      REAL(wp) ::   zztmp   ! local scalar 
    681       REAL(wp), DIMENSION(:,:)  , POINTER ::   zw2d   ! 2D workspace 
    682       REAL(wp), DIMENSION(:,:,:), POINTER ::   zw3d   ! 3D workspace 
    683       !!---------------------------------------------------------------------- 
    684       ! 
    685       IF( nn_timing == 1 )  CALL timing_start( 'ldf_eiv_dia') 
     671      REAL(wp), DIMENSION(jpi,jpj)     ::   zw2d   ! 2D workspace 
     672      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zw3d   ! 3D workspace 
     673      !!---------------------------------------------------------------------- 
     674      ! 
     675!!gm I don't like this routine....   Crazy  way of doing things, not optimal at all... 
     676!!gm     to be redesigned....    
     677      IF( ln_timing )   CALL timing_start( 'ldf_eiv_dia') 
    686678      ! 
    687679      !                                                  !==  eiv stream function: output  ==! 
     
    693685      ! 
    694686      !                                                  !==  eiv velocities: calculate and output  ==! 
    695       CALL wrk_alloc( jpi,jpj,jpk,   zw3d ) 
    696687      ! 
    697688      zw3d(:,:,jpk) = 0._wp                                    ! bottom value always 0 
     
    718709      CALL iom_put( "woce_eiv", zw3d ) 
    719710      ! 
    720       !       
    721       ! 
    722       CALL wrk_alloc( jpi,jpj,   zw2d ) 
    723711      ! 
    724712      zztmp = 0.5_wp * rau0 * rcp  
     
    792780      IF( ln_diaptr ) CALL dia_ptr_hst( jp_sal, 'eiv', 0.5 * zw3d ) 
    793781      ! 
    794       CALL wrk_dealloc( jpi,jpj,   zw2d ) 
    795       CALL wrk_dealloc( jpi,jpj,jpk,   zw3d ) 
    796       ! 
    797       IF( nn_timing == 1 )  CALL timing_stop( 'ldf_eiv_dia')       
     782      ! 
     783      IF( ln_timing )   CALL timing_stop( 'ldf_eiv_dia')       
    798784      ! 
    799785   END SUBROUTINE ldf_eiv_dia 
Note: See TracChangeset for help on using the changeset viewer.