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 11934 for NEMO/branches/UKMO/NEMO_4.0.1_momentum_trends/src/OCE/DYN/dynspg_ts.F90 – NEMO

Ignore:
Timestamp:
2019-11-20T10:47:16+01:00 (4 years ago)
Author:
davestorkey
Message:

UKMO/NEMO_4.0.1_momentum_trends : code changes (equivalent to rev 11917 of NEMO 4.0 branch).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.1_momentum_trends/src/OCE/DYN/dynspg_ts.F90

    r11715 r11934  
    6363   USE restart         ! only for lrst_oce 
    6464   USE diatmb          ! Top,middle,bottom output 
     65   USE trd_oce        ! trends: ocean variables 
     66   USE trddyn         ! trend manager: dynamics 
    6567 
    6668   USE iom   ! to remove 
     
    170172      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztwdmask, zuwdmask, zvwdmask ! ROMS wetting and drying masks at t,u,v points 
    171173      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zuwdav2, zvwdav2    ! averages over the sub-steps of zuwdmask and zvwdmask 
     174      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv  ! SPG and PVO trends (if l_trddyn) 
     175      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv  ! TAU and BFR trends (if l_trddyn) 
    172176      !!---------------------------------------------------------------------- 
    173177      ! 
     
    175179      !                                         !* Allocate temporary arrays 
    176180      IF( ln_wd_dl ) ALLOCATE( ztwdmask(jpi,jpj), zuwdmask(jpi,jpj), zvwdmask(jpi,jpj), zuwdav2(jpi,jpj), zvwdav2(jpi,jpj)) 
     181      ! 
     182      IF( l_trddyn ) THEN 
     183          ALLOCATE( zspgtrdu(jpi,jpj), zspgtrdv(jpi,jpj), zpvotrdu(jpi,jpj), zpvotrdv(jpi,jpj), & 
     184         &          ztautrdu(jpi,jpj), ztautrdv(jpi,jpj), zbfrtrdu(jpi,jpj), zbfrtrdv(jpi,jpj) ) 
     185          zspgtrdu(:,:) = 0._wp 
     186          zspgtrdv(:,:) = 0._wp 
     187          zpvotrdu(:,:) = 0._wp 
     188          zpvotrdv(:,:) = 0._wp 
     189          ztautrdu(:,:) = 0._wp 
     190          ztautrdv(:,:) = 0._wp 
     191          zbfrtrdu(:,:) = 0._wp 
     192          zbfrtrdv(:,:) = 0._wp 
     193      ENDIF 
     194      ! 
     195      zu_trd(:,:) = 0._wp 
     196      zv_trd(:,:) = 0._wp 
     197      zu_spg(:,:) = 0._wp 
     198      zv_spg(:,:) = 0._wp 
    177199      ! 
    178200      zmdi=1.e+20                               !  missing data indicator for masking 
     
    253275         &                               zu_trd, zv_trd   )   ! ==>> out 
    254276      ! 
     277      IF( l_trddyn ) THEN 
     278         ! send correction to baroclinic planetary vorticity trend to trd_dyn 
     279         CALL trd_dyn( zu_trd, zv_trd, jpdyn_pvo_corr, kt ) 
     280      ENDIF 
     281      ! 
    255282      IF( .NOT.ln_linssh ) THEN                 !* surface pressure gradient   (variable volume only) 
     283         ! 
     284         IF( l_trddyn ) THEN 
     285            zspgtrdu(:,:) = zu_trd(:,:) 
     286            zspgtrdv(:,:) = zv_trd(:,:) 
     287         ENDIF 
    256288         ! 
    257289         IF( ln_wd_il ) THEN                       ! W/D : limiter applied to spgspg 
     
    274306         ENDIF 
    275307         ! 
     308         IF( l_trddyn ) THEN 
     309            zspgtrdu(:,:) = zu_trd(:,:) - zspgtrdu(:,:)  
     310            zspgtrdv(:,:) = zv_trd(:,:) - zspgtrdv(:,:)  
     311            ! send correction to HPG trend to trd_dyn 
     312            CALL trd_dyn( zspgtrdu, zspgtrdv, jpdyn_hpg_corr, kt ) 
     313            ! reset temporary arrays for use later 
     314            zspgtrdu(:,:) = 0._wp 
     315            zspgtrdv(:,:) = 0._wp 
     316         ENDIF 
     317         ! 
    276318      ENDIF 
    277319      ! 
     
    283325      END DO  
    284326      ! 
     327      IF( l_trddyn ) THEN 
     328         zbfrtrdu(:,:) = zu_frc(:,:) 
     329         zbfrtrdv(:,:) = zv_frc(:,:) 
     330      ENDIF 
    285331      !                                   !=  Add bottom stress contribution from baroclinic velocities  =! 
    286332      !                                   !  -----------------------------------------------------------  ! 
    287333      CALL dyn_drg_init( zu_frc, zv_frc,  zCdU_u, zCdU_v )      ! also provide the barotropic drag coefficients 
     334      ! 
     335      IF( l_trddyn ) THEN 
     336         ! bottom friction trend diagnostic: bottom friction due to baroclinic currents 
     337         zbfrtrdu(:,:) = zu_frc(:,:) - zbfrtrdu(:,:) 
     338         zbfrtrdv(:,:) = zv_frc(:,:) - zbfrtrdv(:,:)  
     339      ENDIF 
    288340      ! 
    289341      !                                   !=  Add atmospheric pressure forcing  =! 
     
    312364      !                                   !=  Add atmospheric pressure forcing  =! 
    313365      !                                   !  ----------------------------------  ! 
     366      IF( l_trddyn ) THEN 
     367         ztautrdu(:,:) = zu_frc(:,:) 
     368         ztautrdv(:,:) = zv_frc(:,:) 
     369      ENDIF 
     370      ! 
    314371      IF( ln_bt_fw ) THEN                        ! Add wind forcing 
    315372         DO jj = 2, jpjm1 
     
    329386      ENDIF   
    330387      ! 
     388      IF( l_trddyn ) THEN 
     389         ! wind stress trend diagnostic 
     390         ztautrdu(:,:) = zu_frc(:,:) - ztautrdu(:,:) 
     391         ztautrdv(:,:) = zv_frc(:,:) - ztautrdv(:,:)  
     392      ENDIF 
    331393      !              !----------------! 
    332394      !              !==  sssh_frc  ==!   Right-Hand-Side of the barotropic ssh equation   (over the FULL domain) 
     
    591653         ENDIF 
    592654         ! 
     655         IF( l_trddyn ) THEN 
     656            za2 = wgtbtp2(jn) 
     657            zspgtrdu(:,:) = zspgtrdu(:,:) + za2 * zu_spg(:,:) * ssumask(:,:) 
     658            zspgtrdv(:,:) = zspgtrdv(:,:) + za2 * zv_spg(:,:) * ssvmask(:,:) 
     659         ENDIF 
     660         ! 
    593661         ! Add Coriolis trend: 
    594662         ! zwz array below or triads normally depend on sea level with ln_linssh=F and should be updated 
     
    596664         ! Recall that zhU and zhV hold fluxes at jn+0.5 (extrapolated not backward interpolated) 
    597665         CALL dyn_cor_2d( zhup2_e, zhvp2_e, ua_e, va_e, zhU, zhV,    zu_trd, zv_trd   ) 
     666         ! 
     667         IF( l_trddyn ) THEN 
     668            za2 = wgtbtp2(jn) 
     669            zpvotrdu(:,:) = zpvotrdu(:,:) + za2 * zu_trd(:,:) * ssumask(:,:) 
     670            zpvotrdv(:,:) = zpvotrdv(:,:) + za2 * zv_trd(:,:) * ssvmask(:,:) 
     671         ENDIF 
    598672         ! 
    599673         ! Add tidal astronomical forcing if defined 
     
    616690               END DO 
    617691            END DO 
     692            IF( l_trddyn ) THEN 
     693               za2 = wgtbtp2(jn) 
     694               zbfrtrdu(:,:) = zbfrtrdu(:,:) + za2 * zCdU_u(:,:) * un_e(:,:) * hur_e(:,:) 
     695               zbfrtrdv(:,:) = zbfrtrdv(:,:) + za2 * zCdU_v(:,:) * vn_e(:,:) * hvr_e(:,:) 
     696            ENDIF 
    618697         ENDIF 
    619698         ! 
     
    835914      IF( ln_wd_il )   DEALLOCATE( zcpx, zcpy ) 
    836915      IF( ln_wd_dl )   DEALLOCATE( ztwdmask, zuwdmask, zvwdmask, zuwdav2, zvwdav2 ) 
     916      ! 
     917      IF( l_trddyn ) THEN 
     918         CALL trd_dyn( zspgtrdu, zspgtrdv, jpdyn_spg, kt ) 
     919         CALL trd_dyn( zpvotrdu, zpvotrdv, jpdyn_pvo, kt ) 
     920         CALL trd_dyn( ztautrdu, ztautrdv, jpdyn_tau, kt ) 
     921         CALL trd_dyn( zbfrtrdu, zbfrtrdv, jpdyn_bfr, kt ) 
     922         DEALLOCATE( zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv, ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv ) 
     923      ENDIF 
    837924      ! 
    838925      IF( ln_diatmb ) THEN 
Note: See TracChangeset for help on using the changeset viewer.