Changeset 7845


Ignore:
Timestamp:
2017-03-30T11:39:38+02:00 (3 years ago)
Author:
glong
Message:

Split dyn_vrt_diag in divcur.F90 into two parts - and changed calls in dynhpg.F90, dynkeg.F90, dynldf_bilap.F90, dynvor.F90, dynzad.F90. Added calls to dyn_vrt_diag in dynspg_ts.F90. Also added call in dynzdf.F90 but this is more of a place holder as it is not currently correct.

Location:
branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/divcur.F90

    r7649 r7845  
    3535   USE wrk_nemo        ! Memory Allocation 
    3636   USE timing          ! Timing 
    37    USE iom             ! I/O Manager for dyn_vrt_dia 
     37   USE iom             ! I/O Manager for dyn_vrt_dia_2d 
    3838 
    3939   IMPLICIT NONE 
    4040   PRIVATE 
    4141 
    42    PUBLIC   div_cur     ! routine called by step.F90 and istate.F90 
    43    PUBLIC   dyn_vrt_dia ! routine called by various modules 
     42   PUBLIC   div_cur        ! routine called by step.F90 and istate.F90 
     43   PUBLIC   dyn_vrt_dia_3d ! routine called by various modules 
     44   PUBLIC   dyn_vrt_dia_2d ! routine called by various modules 
    4445 
    4546   !! * Substitutions 
     
    342343 
    343344 
    344    SUBROUTINE dyn_vrt_dia( utend, vtend, id_dia_vor_int, id_dia_vor_mn) 
    345  
    346       !!---------------------------------------------------------------------- 
    347       !! 
    348       !! ** Purpose :  compute the integral and mean vorticity tendencies. 
     345   SUBROUTINE dyn_vrt_dia_3d( utend, vtend, id_dia_vor_int, id_dia_vor_mn) 
     346 
     347      !!---------------------------------------------------------------------- 
     348      !! 
     349      !! ** Purpose :  compute the vertical integrals of utend and vtend, and 
     350      !!               then pass to dyn_vrt_dia_2d to calculate vorticity 
     351      !!               tendencies. 
    349352      !! 
    350353      !! ** Action : a) Calculate the vertical integrals of utend & of vtend 
    351354      !!                (u_int & v_int) 
    352       !!             b) Calculate the vorticity tendencies for the vertical 
    353       !!                integrals. 
    354       !!             c) Calculate the vertical means, u_mn, v_mn from u_int 
    355       !!                and v_int by dividing by the depth 
    356       !!             d) Calculate the vorticity tendencies for the vertical 
    357       !!                means 
    358       !!             e) Call iom_put for the vertical integral vorticity 
    359       !!                tendencies (using id_dia_vor_int) 
    360       !!             f) Call iom_put for the vertical mean vorticity 
    361       !!                tendencies (using id_dia_vor_mn) 
     355      !!             b) Call dyn_vrt_dia_2d with vertical integrals 
    362356      !! 
    363357      !!---------------------------------------------------------------------- 
     
    370364      ! 
    371365      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    372       INTEGER  ::   ikbu, ikbv   ! dummy loop indices 
    373366      ! 
    374367      REAL(wp), POINTER, DIMENSION(:,:) :: u_int   ! u vertical integral 
    375368      REAL(wp), POINTER, DIMENSION(:,:) :: v_int   ! v vertical integral 
    376       REAL(wp), POINTER, DIMENSION(:,:) :: u_mn    ! u vertical means 
    377       REAL(wp), POINTER, DIMENSION(:,:) :: v_mn    ! u vertical means 
    378       REAL(wp), POINTER, DIMENSION(:,:) :: vor_int ! vort trend of vert integrals 
    379       REAL(wp), POINTER, DIMENSION(:,:) :: vor_mn  ! vort trend of vert means 
    380369 
    381370      CALL wrk_alloc(jpi, jpj, u_int) 
    382371      CALL wrk_alloc(jpi, jpj, v_int) 
    383       CALL wrk_alloc(jpi, jpj, u_mn) 
    384       CALL wrk_alloc(jpi, jpj, v_mn) 
    385       CALL wrk_alloc(jpi, jpj, vor_int) 
    386       CALL wrk_alloc(jpi, jpj, vor_mn) 
    387372 
    388373      u_int(:,:) = 0.0_wp 
     
    402387      END DO 
    403388 
     389      CALL lbc_lnk( u_int, 'U', 1. ) 
     390      CALL lbc_lnk( v_int, 'V', 1. ) 
     391 
     392      CALL dyn_vrt_dia_2d(u_int, v_int, id_dia_vor_int, id_dia_vor_mn) 
     393 
     394      CALL wrk_dealloc(jpi, jpj, u_int) 
     395      CALL wrk_dealloc(jpi, jpj, v_int) 
     396 
     397   END SUBROUTINE dyn_vrt_dia_3d 
     398 
     399 
     400   SUBROUTINE dyn_vrt_dia_2d( u_int, v_int, id_dia_vor_int, id_dia_vor_mn) 
     401 
     402      !!---------------------------------------------------------------------- 
     403      !! 
     404      !! ** Purpose :  compute the integral and mean vorticity tendencies. 
     405      !! 
     406      !! ** Action : a) Calculate the vorticity tendencies for the vertical 
     407      !!                integrals. 
     408      !!             b) Calculate the vertical means, u_mn, v_mn from u_int 
     409      !!                and v_int by dividing by the depth 
     410      !!             c) Calculate the vorticity tendencies for the vertical 
     411      !!                means 
     412      !!             d) Call iom_put for the vertical integral vorticity 
     413      !!                tendencies (using id_dia_vor_int) 
     414      !!             e) Call iom_put for the vertical mean vorticity 
     415      !!                tendencies (using id_dia_vor_mn) 
     416      !! 
     417      !!---------------------------------------------------------------------- 
     418      REAL :: u_int(jpi,jpj)     ! u vertical integral 
     419      REAL :: v_int(jpi,jpj)     ! v vertical integral 
     420      INTEGER :: id_dia_vor_int  ! identifier for the vertical integral vorticity diagnostic 
     421      INTEGER :: id_dia_vor_mn   ! identifier for the vertical mean vorticity diagnostic 
     422      ! 
     423      !!---------------------------------------------------------------------- 
     424      ! 
     425      INTEGER  ::   ji, jj       ! dummy loop indices 
     426      INTEGER  ::   ikbu, ikbv   ! dummy loop indices 
     427      ! 
     428      REAL(wp), POINTER, DIMENSION(:,:) :: u_mn    ! u vertical means 
     429      REAL(wp), POINTER, DIMENSION(:,:) :: v_mn    ! u vertical means 
     430      REAL(wp), POINTER, DIMENSION(:,:) :: vor_int ! vort trend of vert integrals 
     431      REAL(wp), POINTER, DIMENSION(:,:) :: vor_mn  ! vort trend of vert means 
     432 
     433      CALL wrk_alloc(jpi, jpj, u_mn) 
     434      CALL wrk_alloc(jpi, jpj, v_mn) 
     435      CALL wrk_alloc(jpi, jpj, vor_int) 
     436      CALL wrk_alloc(jpi, jpj, vor_mn) 
     437 
    404438      ! 
    405439      ! Calculate the vorticity tendencies for the vertical integrals. 
     
    469503      ENDIF 
    470504 
    471       CALL wrk_dealloc(jpi, jpj, u_int) 
    472       CALL wrk_dealloc(jpi, jpj, v_int) 
    473505      CALL wrk_dealloc(jpi, jpj, u_mn) 
    474506      CALL wrk_dealloc(jpi, jpj, v_mn) 
     
    476508      CALL wrk_dealloc(jpi, jpj, vor_mn) 
    477509 
    478    END SUBROUTINE dyn_vrt_dia 
     510   END SUBROUTINE dyn_vrt_dia_2d 
    479511 
    480512 
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r7649 r7845  
    3636   USE trd_oce         ! trends: ocean variables 
    3737   USE trddyn          ! trend manager: dynamics 
    38    USE divcur          ! for dyn_vrt_dia 
     38   USE divcur          ! for dyn_vrt_dia_3d 
    3939   ! 
    4040   USE in_out_manager  ! I/O manager 
     
    445445      ! calculate dia_vor_int & dia_vor_mn if required 
    446446      IF ( ( id_dia_vrt_hpg_int == 1 ) .or. ( id_dia_vrt_hpg_mean == 1 ) ) THEN 
    447           CALL dyn_vrt_dia(zhpi, zhpj, id_dia_vrt_hpg_int, id_dia_vrt_hpg_mean) 
     447          CALL dyn_vrt_dia_3d(zhpi, zhpj, id_dia_vrt_hpg_int, id_dia_vrt_hpg_mean) 
    448448      END IF 
    449449      ! 
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90

    r7649 r7845  
    1717   USE trd_oce         ! trends: ocean variables 
    1818   USE trddyn          ! trend manager: dynamics 
    19    USE divcur          ! for dyn_vrt_dia 
     19   USE divcur          ! for dyn_vrt_dia_3d 
    2020   ! 
    2121   USE in_out_manager  ! I/O manager 
     
    149149      ! 
    150150      IF ( ( id_dia_vrt_keg_int == 1 ) .or. ( id_dia_vrt_keg_mean == 1 ) ) THEN 
    151           CALL dyn_vrt_dia(zhkei, zhkej, id_dia_vrt_keg_int, id_dia_vrt_keg_mean) 
     151          CALL dyn_vrt_dia_3d(zhkei, zhkej, id_dia_vrt_keg_int, id_dia_vrt_keg_mean) 
    152152      END IF 
    153153      ! 
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_bilap.F90

    r7649 r7845  
    1919   USE dom_oce         ! ocean space and time domain 
    2020   USE ldfdyn_oce      ! ocean dynamics: lateral physics 
    21    USE divcur          ! for dyn_vrt_dia 
     21   USE divcur          ! for dyn_vrt_dia_3d 
    2222   ! 
    2323   USE in_out_manager  ! I/O manager 
     
    210210      !                                                ! =============== 
    211211      IF ( ( id_dia_vrt_ldf_int == 1 ) .or. ( id_dia_vrt_ldf_mean == 1 ) ) THEN 
    212           CALL dyn_vrt_dia(zua, zva, id_dia_vrt_ldf_int, id_dia_vrt_ldf_mean) 
     212          CALL dyn_vrt_dia_3d(zua, zva, id_dia_vrt_ldf_int, id_dia_vrt_ldf_mean) 
    213213      END IF 
    214214      ! 
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r6487 r7845  
    4141   USE timing          ! Timing     
    4242   USE sbcapr          ! surface boundary condition: atmospheric pressure 
     43   USE divcur          ! for dyn_vrt_dia_2d 
    4344   USE dynadv, ONLY: ln_dynadv_vec 
    4445#if defined key_agrif 
     
    144145      INTEGER  ::   ji, jj, jk, jn        ! dummy loop indices 
    145146      INTEGER  ::   ikbu, ikbv, noffset      ! local integers 
     147      INTEGER  ::   id_dia_vrt_spg_int  = 1  ! TODO remove once flags set properly 
     148      INTEGER  ::   id_dia_vrt_spg_mean = 1  ! TODO remove once flags set properly 
    146149      REAL(wp) ::   zraur, z1_2dt_b, z2dt_bf    ! local scalars 
    147150      REAL(wp) ::   zx1, zy1, zx2, zy2         !   -      - 
     
    450453         ENDIF  
    451454      ENDIF 
     455      ! 
     456                                                ! Calculate dia_vor_int & 
     457                                                ! dia_vor_mn if required 
     458      IF ( ( id_dia_vrt_spg_int == 1 ) .or. (id_dia_vrt_spg_mean == 1 ) ) THEN 
     459          CALL dyn_vrt_dia_2d(zu_frc, zv_frc, di_dia_vrt_spg_int, id_dia_vrt_spg_mean) 
     460      END IF 
    452461      !                                   !* Right-Hand-Side of the barotropic ssh equation 
    453462      !                                   ! ----------------------------------------------- 
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r7649 r7845  
    3838   USE wrk_nemo       ! Memory Allocation 
    3939   USE timing         ! Timing 
    40    USE divcur         ! For dyn_vrt_dia 
     40   USE divcur         ! For dyn_vrt_dia_3d 
    4141 
    4242 
     
    708708      !                                                ! =============== 
    709709      IF ( ( id_dia_vrt_vor_int == 1 ) .or. ( id_dia_vrt_vor_mn == 1 ) ) THEN 
    710           CALL dyn_vrt_dia(zua, zva, id_dia_vrt_vor_int, id_dia_vrt_vor_mn) 
     710          CALL dyn_vrt_dia_3d(zua, zva, id_dia_vrt_vor_int, id_dia_vrt_vor_mn) 
    711711      END IF 
    712712      ! 
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90

    r7649 r7845  
    1818   USE trd_oce        ! trends: ocean variables 
    1919   USE trddyn         ! trend manager: dynamics 
    20    USE divcur         ! for dyn_vrt_dia 
     20   USE divcur         ! for dyn_vrt_dia_3d 
    2121   ! 
    2222   USE in_out_manager ! I/O manager 
     
    146146      ! 
    147147      IF ( ( id_dia_vrt_zad_int == 1 ) .or. ( id_dia_vrt_zad_mean == 1 ) ) THEN 
    148           CALL dyn_vrt_dia(zua, zva, id_dia_vrt_zad_int, id_dia_vrt_zad_mean) 
     148          CALL dyn_vrt_dia_3d(zua, zva, id_dia_vrt_zad_int, id_dia_vrt_zad_mean) 
    149149      END IF 
    150150      ! 
  • branches/UKMO/GO6_dyn_vrt_diag/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90

    r6486 r7845  
    2727   USE wrk_nemo        ! Memory Allocation 
    2828   USE timing          ! Timing 
     29   USE divcur          ! for dyn_vrt_dia_3d 
    2930 
    3031   IMPLICIT NONE 
     
    5859      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    5960      ! 
     61      INTEGER :: id_dia_vrt_zdf_int  = 1 ! TODO remove once flags set properly 
     62      INTEGER :: id_dia_vrt_zdf_mean = 1 ! TODO remove once flags set properly 
    6063      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrdu, ztrdv 
    6164      !!--------------------------------------------------------------------- 
     
    6871      ENDIF 
    6972 
    70       IF( l_trddyn )  THEN                      ! temporary save of ta and sa trends 
     73      IF ( ( l_trddyn ) .or. ( id_dia_vrt_zdf_int == 1 ) .or. ( id_dia_vrt_zdf_mean == 1 ) ) THEN                      ! temporary save of ta and sa trends 
    7174         CALL wrk_alloc( jpi, jpj, jpk, ztrdu, ztrdv )  
    7275         ztrdu(:,:,:) = ua(:,:,:) 
     
    8891      END SELECT 
    8992 
    90       IF( l_trddyn )  THEN                      ! save the vertical diffusive trends for further diagnostics 
     93      IF ( ( l_trddyn ) .or. ( id_dia_vrt_zdf_int == 1 ) .or. ( id_dia_vrt_zdf_mean == 1 ) ) THEN                      ! save the vertical diffusive trends for further diagnostics 
    9194         ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    9295         ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
     96 
     97         ! Calculate dia_vor_int & dia_vor_mn if required. 
     98         IF ( ( id_dia_vrt_zdf_int == 1 ) .or. ( id_dia_vrt_zdf_mean == 1 ) ) THEN 
     99             CALL dyn_vrt_dia_3d(ztrdu, ztrdv, id_dia_vrt_zdf_int, id_dia_vrt_zdf_mean) 
     100         END IF 
     101 
    93102         CALL trd_dyn( ztrdu, ztrdv, jpdyn_zdf, kt ) 
    94103         CALL wrk_dealloc( jpi, jpj, jpk, ztrdu, ztrdv )  
Note: See TracChangeset for help on using the changeset viewer.