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 15008 – NEMO

Changeset 15008


Ignore:
Timestamp:
2021-06-17T12:11:24+02:00 (3 years ago)
Author:
gsamson
Message:

add dyn_dmp to mlf step; update dta_uvd interface; adapt istate accordingly & cleaning (#2680)

Location:
NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE/C1D/dtauvd.F90

    r14915 r15008  
    9393 
    9494      ! 
    95       IF(  ln_uvd_init .OR. ln_uvd_dyndmp ) THEN 
     95      IF( ln_uvd_init .OR. ln_uvd_dyndmp ) THEN 
    9696         !                          !==   allocate the data arrays   ==! 
    9797         ALLOCATE( sf_uvd(2), STAT=ierr0 ) 
     
    117117 
    118118 
    119    SUBROUTINE dta_uvd( kt, Kmm, puvd ) 
     119   SUBROUTINE dta_uvd( kt, Kmm, pud, pvd ) 
    120120      !!---------------------------------------------------------------------- 
    121121      !!                   ***  ROUTINE dta_uvd  *** 
     
    134134      INTEGER                           , INTENT(in   ) ::   kt     ! ocean time-step 
    135135      INTEGER                           , INTENT(in   ) ::   Kmm    ! time level index 
    136       REAL(wp), DIMENSION(jpi,jpj,jpk,2), INTENT(  out) ::   puvd   ! U & V current data 
     136      REAL(wp), DIMENSION(jpi,jpj,jpk)  , INTENT(  out) ::   pud    ! U & V current data 
     137      REAL(wp), DIMENSION(jpi,jpj,jpk)  , INTENT(  out) ::   pvd    ! U & V current data 
    137138      ! 
    138139      INTEGER ::   ji, jj, jk, jl, jkk               ! dummy loop indicies 
     
    146147      CALL fld_read( kt, 1, sf_uvd )      !==   read U & V current data at time step kt   ==! 
    147148      ! 
    148       puvd(:,:,:,1) = sf_uvd(1)%fnow(:,:,:)                 ! NO mask 
    149       puvd(:,:,:,2) = sf_uvd(2)%fnow(:,:,:)  
     149      pud(:,:,:) = sf_uvd(1)%fnow(:,:,:)                 ! NO mask 
     150      pvd(:,:,:) = sf_uvd(2)%fnow(:,:,:)  
    150151      ! 
    151152      IF( ln_sco ) THEN                   !==   s- or mixed s-zps-coordinate   ==! 
     
    162163               zl = gdept(ji,jj,jk,Kmm) 
    163164               IF    ( zl < gdept_1d(1  ) ) THEN          ! extrapolate above the first level of data 
    164                   zup(jk) =  puvd(ji,jj,1    ,1) 
    165                   zvp(jk) =  puvd(ji,jj,1    ,2) 
     165                  zup(jk) =  pud(ji,jj,1) 
     166                  zvp(jk) =  pvd(ji,jj,1) 
    166167               ELSEIF( zl > gdept_1d(jpk) ) THEN          ! extrapolate below the last level of data 
    167                   zup(jk) =  puvd(ji,jj,jpkm1,1) 
    168                   zvp(jk) =  puvd(ji,jj,jpkm1,2) 
     168                  zup(jk) =  pud(ji,jj,jpkm1) 
     169                  zvp(jk) =  pvd(ji,jj,jpkm1) 
    169170               ELSE                                      ! inbetween : vertical interpolation between jkk & jkk+1 
    170171                  DO jkk = 1, jpkm1                      ! when  gdept(jkk) < zl < gdept(jkk+1) 
    171172                     IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 
    172173                        zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 
    173                         zup(jk) = puvd(ji,jj,jkk,1) + ( puvd(ji,jj,jkk+1,1 ) - puvd(ji,jj,jkk,1) ) * zi  
    174                         zvp(jk) = puvd(ji,jj,jkk,2) + ( puvd(ji,jj,jkk+1,2 ) - puvd(ji,jj,jkk,2) ) * zi 
     174                        zup(jk) = pud(ji,jj,jkk) + ( pud(ji,jj,jkk+1) - pud(ji,jj,jkk) ) * zi  
     175                        zvp(jk) = pvd(ji,jj,jkk) + ( pvd(ji,jj,jkk+1) - pvd(ji,jj,jkk) ) * zi 
    175176                     ENDIF 
    176177                  END DO 
     
    178179            END DO 
    179180            DO jk = 1, jpkm1           ! apply mask 
    180                puvd(ji,jj,jk,1) = zup(jk) * umask(ji,jj,jk) 
    181                puvd(ji,jj,jk,2) = zvp(jk) * vmask(ji,jj,jk) 
     181               pud(ji,jj,jk) = zup(jk) * umask(ji,jj,jk) 
     182               pvd(ji,jj,jk) = zvp(jk) * vmask(ji,jj,jk) 
    182183            END DO 
    183             puvd(ji,jj,jpk,1) = 0._wp 
    184             puvd(ji,jj,jpk,2) = 0._wp 
     184            pud(ji,jj,jpk) = 0._wp 
     185            pvd(ji,jj,jpk) = 0._wp 
    185186         END_2D 
    186187         !  
     
    189190      ELSE                                !==   z- or zps- coordinate   ==! 
    190191         !                              
    191          puvd(:,:,:,1) = puvd(:,:,:,1) * umask(:,:,:)       ! apply mask 
    192          puvd(:,:,:,2) = puvd(:,:,:,2) * vmask(:,:,:) 
     192         pud(:,:,:) = pud(:,:,:) * umask(:,:,:)       ! apply mask 
     193         pvd(:,:,:) = pvd(:,:,:) * vmask(:,:,:) 
    193194         ! 
    194195         IF( ln_zps ) THEN                ! zps-coordinate (partial steps) interpolation at the last ocean level 
     
    197198               IF( ik > 1 ) THEN 
    198199                  zl = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
    199                   puvd(ji,jj,ik,1) = (1.-zl) * puvd(ji,jj,ik,1) + zl * puvd(ji,jj,ik-1,1) 
    200                   puvd(ji,jj,ik,2) = (1.-zl) * puvd(ji,jj,ik,2) + zl * puvd(ji,jj,ik-1,2) 
     200                  pud(ji,jj,ik) = (1.-zl) * pud(ji,jj,ik) + zl * pud(ji,jj,ik-1) 
     201                  pvd(ji,jj,ik) = (1.-zl) * pvd(ji,jj,ik) + zl * pvd(ji,jj,ik-1) 
    201202               ENDIF 
    202203            END_2D 
  • NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE/C1D/dyndmp.F90

    r13295 r15008  
    159159      ! 
    160160      !                           !==   read and interpolate U & V current data at kt   ==! 
    161       CALL dta_uvd( kt, Kmm, zuv_dta ) !!! NOTE: This subroutine must be altered for use outside 
    162                                   !!!       the C1D context (use of U,V grid variables) 
     161      CALL dta_uvd( kt, Kmm, zuv_dta(:,:,:,1), zuv_dta(:,:,:,2)) 
    163162      ! 
    164163      SELECT CASE ( nn_zdmp )     !==   Calculate/add Newtonian damping to the momentum trend   ==! 
  • NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE/DOM/domain.F90

    r15006 r15008  
    1111   !!   NEMO     1.0  !  2002-08  (G. Madec)  F90: Free form and module 
    1212   !!            2.0  !  2005-11  (V. Garnier) Surface pressure gradient organization 
     13   !!            3.3  !  2010-11  (G. Madec)  initialisation in C1D configuration  
    1314   !!            3.6  !  2013     ( J. Simeon, C. Calone, G. Madec, C. Ethe ) Online coarsening of outputs 
    1415   !!            3.7  !  2015-11  (G. Madec, A. Coward)  time varying zgr by default 
  • NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE/DOM/istate.F90

    r15006 r15008  
    2929   USE wet_dry         ! wetting and drying (needed for wad_istate) 
    3030   USE usrdef_istate   ! User defined initial state 
    31    USE c1d 
    3231   ! 
    3332   USE in_out_manager  ! I/O manager 
     
    7776      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    7877 
    79        CALL dta_tsd_init        ! Initialisation of T & S input data 
    80  
    81 !      IF( lk_c1d )   CALL dta_uvd_init        ! Initialization of U & V input data 
     78      CALL dta_tsd_init                 ! Initialisation of T & S input data 
     79      IF( ln_c1d) CALL dta_uvd_init     ! Initialisation of U & V input data (c1d only) 
    8280 
    8381      rhd  (:,:,:      ) = 0._wp   ;   rhop (:,:,:  ) = 0._wp      ! set one for all to 0 at level jpk 
     
    115113            ! 
    116114            IF( ln_tsd_init ) THEN                
    117                CALL dta_tsd( nit000, ts(:,:,:,:,Kbb) )       ! read 3D T and S data at nit000 
    118                ! 
     115               CALL dta_tsd( nit000, ts(:,:,:,:,Kbb) )                     ! read 3D T and S data at nit000 
     116            ENDIF 
     117            ! 
     118            IF( ln_uvd_init .AND. ln_c1d ) THEN                
     119               CALL dta_uvd( nit000, Kbb, uu(:,:,:,Kbb), vv(:,:,:,Kbb) )   ! read 3D U and V data at nit000 
     120            ELSE 
    119121               uu  (:,:,:,Kbb) = 0._wp               ! set the ocean at rest 
    120122               vv  (:,:,:,Kbb) = 0._wp   
     123            ENDIF 
    121124               ! 
    122             ELSE                                 ! user defined initial T and S 
     125               ! 
     126            IF( .NOT. ln_tsd_init .AND. .NOT. ln_uvd_init ) THEN 
    123127               DO jk = 1, jpk 
    124128                  zgdept(:,:,jk) = gdept(:,:,jk,Kbb) 
     
    130134            vv    (:,:,:,Kmm) = vv   (:,:,:,Kbb) 
    131135 
    132          ! 
    133 !!gm ==>>>  to be moved in usrdef_istate of C1D case  
    134          IF ( ln_uvd_init .AND. lk_c1d ) THEN ! read 3D U and V data at nit000 
    135             ALLOCATE( zuvd(jpi,jpj,jpk,2) ) 
    136             CALL dta_uvd( nit000, Kbb, zuvd ) 
    137             uu(:,:,:,Kbb) = zuvd(:,:,:,1)  ;  uu(:,:,:,Kmm) = uu(:,:,:,Kbb) 
    138             vv(:,:,:,Kbb) = zuvd(:,:,:,2)  ;  vv(:,:,:,Kmm) = vv(:,:,:,Kbb) 
    139             DEALLOCATE( zuvd ) 
    140          ENDIF 
    141          ! 
    142          !  
    143136         ENDIF  
    144137#if defined key_agrif 
  • NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE/TRA/tradmp.F90

    r14718 r15008  
    2424   USE oce            ! ocean: variables 
    2525   USE dom_oce        ! ocean: domain variables 
    26    USE c1d            ! 1D vertical configuration 
    2726   USE trd_oce        ! trends: ocean variables 
    2827   USE trdtra         ! trends manager: tracers 
  • NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE/step_oce.F90

    r14239 r15008  
    4444   USE dynspg          ! surface pressure gradient        (dyn_spg routine) 
    4545   USE dynatf          ! time-filtering                   (dyn_atf routine) 
     46   USE dyndmp          ! current damping                  (dyn_dmp routine) 
    4647 
    4748   USE traqsr          ! solar radiation penetration      (tra_qsr routine) 
  • NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE/stpctl.F90

    r14433 r15008  
    1818   USE oce             ! ocean dynamics and tracers variables 
    1919   USE dom_oce         ! ocean space and time domain variables  
    20    USE c1d             ! 1D vertical configuration 
    2120   USE zdf_oce ,  ONLY : ln_zad_Aimp       ! ocean vertical physics variables 
    2221   USE wet_dry,   ONLY : ll_wd, ssh_ref    ! reference depth for negative bathy 
  • NEMO/branches/2021/ticket2680_C1D_PAPA/src/OCE/stpmlf.F90

    r14834 r15008  
    232232                         vv(:,:,:,Nrhs) = 0._wp 
    233233 
     234      IF( ln_dyndmp .AND. ln_c1d )  CALL dyn_dmp( kstp, Nbb, Nnn, uu(:,:,:,Nrhs), vv(:,:,:,Nrhs), Nrhs )   ! internal damping trends- momentum 
     235 
    234236      IF( ln_tile ) CALL dom_tile_start         ! [tiling] DYN tiling loop (1) 
    235237      DO jtile = 1, nijtile 
Note: See TracChangeset for help on using the changeset viewer.