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 15614 for NEMO – NEMO

Changeset 15614 for NEMO


Ignore:
Timestamp:
2021-12-22T17:56:05+01:00 (2 years ago)
Author:
hadjt
Message:

DIA/diaharm_fast.F90

Originally, the 3d velocities used in this analysis, was the baroclinic component (tmpu = un-un_b).

Namelist logical switch ln_diaharm_baroc3dvel_only added to allow the use of the full 3d velocities.

Examples of how to use the harmonic analysis is output in ocean.output

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/DIA/diaharm_fast.F90

    r15611 r15614  
    8484   LOGICAL, PUBLIC :: ln_diaharm_postproc_vel 
    8585   LOGICAL, PUBLIC :: ln_diaharm_verbose 
     86   LOGICAL, PUBLIC :: ln_diaharm_baroc3dvel_only 
    8687 
    8788 
     
    222223                      DO jk=1,jpkm1 
    223224                         IF ( m_posi_3d(j3d) .eq. 1 ) dd_cumul = c(jh) *  rhd(ji,jj,jk)               * tmask(ji,jj,jk)    
    224                          IF ( m_posi_3d(j3d) .eq. 2 ) dd_cumul = c(jh) * ( un(ji,jj,jk)-un_b(ji,jj) ) * umask(ji,jj,jk)  
    225                          IF ( m_posi_3d(j3d) .eq. 3 ) dd_cumul = c(jh) * ( vn(ji,jj,jk)-vn_b(ji,jj) ) * vmask(ji,jj,jk) 
     225                         IF ( ln_diaharm_baroc3dvel_only ) THEN 
     226                             IF ( m_posi_3d(j3d) .eq. 2 ) dd_cumul = c(jh) * ( un(ji,jj,jk)-un_b(ji,jj) ) * umask(ji,jj,jk)  
     227                             IF ( m_posi_3d(j3d) .eq. 3 ) dd_cumul = c(jh) * ( vn(ji,jj,jk)-vn_b(ji,jj) ) * vmask(ji,jj,jk) 
     228                         ELSE    
     229                             IF ( m_posi_3d(j3d) .eq. 2 ) dd_cumul = c(jh) * ( un(ji,jj,jk) ) * umask(ji,jj,jk)  
     230                             IF ( m_posi_3d(j3d) .eq. 3 ) dd_cumul = c(jh) * ( vn(ji,jj,jk) ) * vmask(ji,jj,jk) 
     231                         ENDIF 
    226232                         IF ( m_posi_3d(j3d) .eq. 4 ) dd_cumul = c(jh) *   wn(ji,jj,jk)               * wmask(ji,jj,jk) 
    227233                         g_cumul_var3D(jh,ji,jj,jk,j3d) = g_cumul_var3D(jh,ji,jj,jk,j3d) + dd_cumul 
     
    369375      NAMELIST/nam_diaharm_fast/ ln_diaharm_fast, ln_diaharm_store, ln_diaharm_compute, ln_diaharm_read_restart, & 
    370376               & ln_ana_ssh, ln_ana_uvbar, ln_ana_bfric, ln_ana_rho, ln_ana_uv3d, ln_ana_w3d, & 
    371                & tname,ln_diaharm_multiyear,nn_diaharm_multiyear,ln_diaharm_update_nodal_daily,ln_diaharm_postproc_vel, ln_diaharm_verbose 
     377               & tname,ln_diaharm_multiyear,nn_diaharm_multiyear,ln_diaharm_update_nodal_daily,& 
     378               & ln_diaharm_postproc_vel,ln_diaharm_baroc3dvel_only, ln_diaharm_verbose 
    372379      !!---------------------------------------------------------------------- 
    373380      !JT 
     
    382389 
    383390      ln_diaharm_postproc_vel = .FALSE. 
     391      ln_diaharm_baroc3dvel_only = .TRUE. 
    384392 
    385393      IF(lwp) WRITE(numout,*) 
     
    411419         WRITE(numout,*) '   3D velocities harmonic analysis: ln_ana_uv3d = ', ln_ana_uv3d 
    412420         WRITE(numout,*) '   Vertical Velocities harmonic analysis: ln_ana_w3d = ', ln_ana_w3d 
     421         WRITE(numout,*) '   Use baroclinic component of vel for 3D velocities ' 
     422         WRITE(numout,*) '          rather than full velocities:ln_diaharm_baroc3dvel_only = ', ln_diaharm_baroc3dvel_only 
    413423         WRITE(numout,*) '   Names of harmonics: tname = ', tname 
    414424         WRITE(numout,*) '   Max number of harmonics: jpmax_harmo = ', jpmax_harmo 
     
    418428         WRITE(numout,*) '   Multi-year harmonic analysis - number of years: ln_diaharm_update_nodal_daily = ', ln_diaharm_update_nodal_daily 
    419429         WRITE(numout,*) '   Number of Harmonics: nyear, nmonth = ', nyear, nmonth 
     430         WRITE(numout,*) '   Verbose: ln_diaharm_verbose = ', ln_diaharm_verbose 
    420431         WRITE(numout,*) '   Post-process velocity stats: ln_diaharm_postproc_vel = ',ln_diaharm_postproc_vel 
    421          WRITE(numout,*) '   Verbose: ln_diaharm_verbose = ', ln_diaharm_verbose 
     432         WRITE(numout,*) " " 
     433         WRITE(numout,*) "  Examples of how to use the results of the harmonic analysis, with python code" 
     434         WRITE(numout,*) "       #Variable names in example code match the variables output by NEMO iom_put." 
     435         WRITE(numout,*) " " 
     436         WRITE(numout,*) "       #SSH/UY/V timeseries as estimated from the Harmonic Analysis" 
     437         WRITE(numout,*) "       SSH = M2amp_ssh*np.sin(tide_t*M2_freq - M2phi_ssh) # + TA_u2d_off" 
     438         WRITE(numout,*) "        " 
     439         WRITE(numout,*) "        " 
     440         WRITE(numout,*) "       # M2 U and V time series" 
     441         WRITE(numout,*) "       u_ts = M2_u_amp_t_uvbar*np.sin(tide_t*M2_freq - M2_u_phi_t_uvbar) # + TA_u2d_off" 
     442         WRITE(numout,*) "       v_ts = M2_v_amp_t_uvbar*np.sin(tide_t*M2_freq - M2_v_phi_t_uvbar) # + TA_v2d_off" 
     443         WRITE(numout,*) "        " 
     444         WRITE(numout,*) "       #Clockwise and anti-clockwise components of M2 tidal ellipse" 
     445         WRITE(numout,*) "        " 
     446         WRITE(numout,*) "       ang = np.linspace(0,2*np.pi,500)" 
     447         WRITE(numout,*) "        " 
     448         WRITE(numout,*) "       u_c = M2_Qc_uvbar*np.cos(-ang + M2_gc_uvbar) # + TA_u2d_off" 
     449         WRITE(numout,*) "       u_ac = M2_Qac_uvbar*np.cos(ang + M2_gac_uvbar) # + TA_u2d_off" 
     450         WRITE(numout,*) "       v_c = M2_Qc_uvbar*np.sin(-ang + M2_gc_uvbar) # + TA_v2d_off" 
     451         WRITE(numout,*) "       v_ac = M2_Qac_uvbar*np.sin(ang + M2_gac_uvbar) # + TA_v2d_off" 
     452         WRITE(numout,*) "        " 
     453         WRITE(numout,*) "       # M2 tidal ellipse from harmonic analysis" 
     454         WRITE(numout,*) "       plt.plot(u_ts, v_ts,'k.')" 
     455         WRITE(numout,*) "        " 
     456         WRITE(numout,*) "       # Circles, with radii of the semi-major (qmax) and semi-minor (qmin) axis, of the clockwise and anticlockwise component." 
     457         WRITE(numout,*) "       plt.plot(u_c,v_c,'y+')" 
     458         WRITE(numout,*) "       plt.plot(u_ac,v_ac,'g+')" 
     459         WRITE(numout,*) "       plt.plot(M2_qmax_uvbar*np.cos(ang),M2_qmax_uvbar*np.sin(ang),'r')" 
     460         WRITE(numout,*) "       plt.plot(M2_qmin_uvbar*np.cos(ang),M2_qmin_uvbar*np.sin(ang),'b')" 
     461         WRITE(numout,*) "        " 
     462         WRITE(numout,*) "       # M2 ellipse from the sum of the clockwise and anticlockwise component." 
     463         WRITE(numout,*) "       plt.plot(u_c+u_ac,v_c+v_ac,'o')" 
     464 
     465 
    422466 
    423467      ENDIF 
     
    18721916     CALL FLUSH(numout) 
    18731917 
    1874 ! to output tidal parameters, u and v on t grid 
    1875 ! 
    1876 !                                  !==  standard Cd  ==! 
    1877 !         DO jj = 2, jpjm1 
    1878 !            DO ji = 2, jpim1 
    1879 !               imk = k_mk(ji,jj)    ! ocean bottom level at t-points 
    1880 !               zut = un(ji,jj,imk) + un(ji-1,jj,imk)     ! 2 x velocity at t-point 
    1881 !               zvt = vn(ji,jj,imk) + vn(ji,jj-1,imk) 
    1882 !               !                                                           ! here pCd0 = mask*boost * drag 
    1883 !               pCdU(ji,jj) = - pCd0(ji,jj) * SQRT(  0.25 * ( zut*zut + zvt*zvt ) + pke0  ) 
    1884 !            END DO 
    1885 !         END DO 
    1886  
    1887  
    18881918 
    18891919      IF (ln_diaharm_postproc_vel)  THEN 
Note: See TracChangeset for help on using the changeset viewer.