Changeset 10773


Ignore:
Timestamp:
2019-03-18T13:38:52+01:00 (17 months ago)
Author:
smueller
Message:

Transfer of five public variables, their allocation, and two subroutines from module sbctide to module tide_mod (ticket #2194)

Location:
NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/BDY/bdydta.F90

    r10647 r10773  
    2323   USE phycst         ! physical constants 
    2424   USE sbcapr         ! atmospheric pressure forcing 
    25    USE sbctide        ! Tidal forcing or not 
     25   USE tide_mod, ONLY: ln_tide ! tidal forcing 
    2626   USE bdy_oce        ! ocean open boundary conditions   
    2727   USE bdytides       ! tidal forcing at boundaries 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/BDY/bdyini.F90

    r10629 r10773  
    2222   USE bdydta         ! open boundary cond. setting   (bdy_dta_init routine) 
    2323   USE bdytides       ! open boundary cond. setting   (bdytide_init routine) 
    24    USE sbctide        ! Tidal forcing or not 
     24   USE tide_mod, ONLY: ln_tide ! tidal forcing 
    2525   USE phycst   , ONLY: rday 
    2626   ! 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/DYN/dynspg.F90

    r10068 r10773  
    2323   USE sbctide        !  
    2424   USE updtide        !  
     25   USE tide_mod       ! 
    2526   USE trd_oce        ! trends: ocean variables 
    2627   USE trddyn         ! trend manager: dynamics 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/DYN/dynspg_ts.F90

    r10742 r10773  
    4646   USE sbctide         ! tides 
    4747   USE updtide         ! tide potential 
     48   USE tide_mod        ! 
    4849   USE sbcwave         ! surface wave 
    4950   USE diatmb          ! Top,middle,bottom output 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/SBC/sbctide.F90

    r10772 r10773  
    1818 
    1919   IMPLICIT NONE 
    20    PUBLIC 
     20   PRIVATE 
    2121 
    22    REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) ::   pot_astro   ! 
    23  
    24    !!---------------------------------------------------------------------- 
    25    !!   tidal potential 
    26    !!---------------------------------------------------------------------- 
    27    !!   sbc_tide            :  
    28    !!   tide_init_potential : 
    29    !!---------------------------------------------------------------------- 
    30  
    31    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   amp_pot, phi_pot 
    32    REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   amp_load, phi_load 
     22   PUBLIC sbc_tide 
    3323  
    3424   !!---------------------------------------------------------------------- 
     
    5040      IF( nsec_day == NINT(0.5_wp * rdt) .OR. kt == nit000 ) THEN      ! start a new day 
    5141         ! 
    52          IF( kt == nit000 )THEN 
    53             ALLOCATE( amp_pot(jpi,jpj,nb_harmo),                      & 
    54                &      phi_pot(jpi,jpj,nb_harmo), pot_astro(jpi,jpj)   ) 
    55             IF( ln_read_load )THEN 
    56                ALLOCATE( amp_load(jpi,jpj,nb_harmo), phi_load(jpi,jpj,nb_harmo) ) 
    57                CALL tide_init_load 
    58             ENDIF 
    59          ENDIF 
    6042         ! 
    6143         IF( ln_read_load )THEN 
     44            IF ( kt == nit000 ) CALL tide_init_load 
    6245            amp_pot(:,:,:) = amp_load(:,:,:) 
    6346            phi_pot(:,:,:) = phi_load(:,:,:) 
     
    9881   END SUBROUTINE sbc_tide 
    9982 
    100  
    101    SUBROUTINE tide_init_potential 
    102       !!---------------------------------------------------------------------- 
    103       !!                 ***  ROUTINE tide_init_potential  *** 
    104       !!---------------------------------------------------------------------- 
    105       INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    106       REAL(wp) ::   zcons, ztmp1, ztmp2, zlat, zlon, ztmp, zamp, zcs   ! local scalar 
    107       !!---------------------------------------------------------------------- 
    108  
    109       DO jk = 1, nb_harmo 
    110          zcons = 0.7_wp * Wave(ntide(jk))%equitide * ftide(jk) 
    111          DO ji = 1, jpi 
    112             DO jj = 1, jpj 
    113                ztmp1 =  ftide(jk) * amp_pot(ji,jj,jk) * COS( phi_pot(ji,jj,jk) + v0tide(jk) + utide(jk) ) 
    114                ztmp2 = -ftide(jk) * amp_pot(ji,jj,jk) * SIN( phi_pot(ji,jj,jk) + v0tide(jk) + utide(jk) ) 
    115                zlat = gphit(ji,jj)*rad !! latitude en radian 
    116                zlon = glamt(ji,jj)*rad !! longitude en radian 
    117                ztmp = v0tide(jk) + utide(jk) + Wave(ntide(jk))%nutide * zlon 
    118                ! le potentiel est composé des effets des astres: 
    119                IF    ( Wave(ntide(jk))%nutide == 1 )  THEN  ;  zcs = zcons * SIN( 2._wp*zlat ) 
    120                ELSEIF( Wave(ntide(jk))%nutide == 2 )  THEN  ;  zcs = zcons * COS( zlat )**2 
    121                ELSE                                         ;  zcs = 0._wp 
    122                ENDIF 
    123                ztmp1 = ztmp1 + zcs * COS( ztmp ) 
    124                ztmp2 = ztmp2 - zcs * SIN( ztmp ) 
    125                zamp = SQRT( ztmp1*ztmp1 + ztmp2*ztmp2 ) 
    126                amp_pot(ji,jj,jk) = zamp 
    127                phi_pot(ji,jj,jk) = ATAN2( -ztmp2 / MAX( 1.e-10_wp , zamp ) ,   & 
    128                   &                        ztmp1 / MAX( 1.e-10_wp,  zamp )   ) 
    129             END DO 
    130          END DO 
    131       END DO 
    132       ! 
    133    END SUBROUTINE tide_init_potential 
    134  
    135    SUBROUTINE tide_init_load 
    136       !!---------------------------------------------------------------------- 
    137       !!                 ***  ROUTINE tide_init_load  *** 
    138       !!---------------------------------------------------------------------- 
    139       INTEGER :: inum                 ! Logical unit of input file 
    140       INTEGER :: ji, jj, itide        ! dummy loop indices 
    141       REAL(wp), DIMENSION(jpi,jpj) ::   ztr, zti   !: workspace to read in tidal harmonics data  
    142       !!---------------------------------------------------------------------- 
    143       IF(lwp) THEN 
    144          WRITE(numout,*) 
    145          WRITE(numout,*) 'tide_init_load : Initialization of load potential from file' 
    146          WRITE(numout,*) '~~~~~~~~~~~~~~ ' 
    147       ENDIF 
    148       ! 
    149       CALL iom_open ( cn_tide_load , inum ) 
    150       ! 
    151       DO itide = 1, nb_harmo 
    152          CALL iom_get  ( inum, jpdom_data,TRIM(Wave(ntide(itide))%cname_tide)//'_z1', ztr(:,:) ) 
    153          CALL iom_get  ( inum, jpdom_data,TRIM(Wave(ntide(itide))%cname_tide)//'_z2', zti(:,:) ) 
    154          ! 
    155          DO ji=1,jpi 
    156             DO jj=1,jpj 
    157                amp_load(ji,jj,itide) =  SQRT( ztr(ji,jj)**2. + zti(ji,jj)**2. ) 
    158                phi_load(ji,jj,itide) = ATAN2(-zti(ji,jj), ztr(ji,jj) ) 
    159             END DO 
    160          END DO 
    161          ! 
    162       END DO 
    163       CALL iom_close( inum ) 
    164       ! 
    165    END SUBROUTINE tide_init_load 
    166  
    16783  !!====================================================================== 
    16884END MODULE sbctide 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/SBC/updtide.F90

    r10772 r10773  
    1313   USE phycst          ! physical constant 
    1414   USE sbctide         ! tide potential variable 
    15    USE tide_mod, ONLY: ln_tide_ramp, rdttideramp 
     15   USE tide_mod, ONLY: ln_tide_ramp, rdttideramp, kt_tide, omega_tide, pot_astro, amp_pot, phi_pot, nb_harmo 
    1616 
    1717   IMPLICIT NONE 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/TDE/tide_mod.F90

    r10772 r10773  
    2222   PUBLIC   tide_harmo       ! called by tideini and diaharm modules 
    2323   PUBLIC   tide_init_Wave   ! called by tideini and diaharm modules 
     24   PUBLIC   tide_init_load 
     25   PUBLIC   tide_init_potential 
    2426 
    2527   INTEGER, PUBLIC, PARAMETER ::   jpmax_harmo = 19   !: maximum number of harmonic 
     
    5355 
    5456   INTEGER , PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ntide   !: 
     57 
     58   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:)   ::   pot_astro !: tidal potential 
     59   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) ::   amp_pot, phi_pot 
     60   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:) ::   amp_load, phi_load 
     61 
    5562 
    5663   REAL(wp) ::   sh_T, sh_s, sh_h, sh_p, sh_p1             ! astronomic angles 
     
    149156      IF (.NOT.ln_scal_load ) rn_scal_load = 0._wp 
    150157      ! 
     158      ALLOCATE( amp_pot(jpi,jpj,nb_harmo),                      & 
     159           &      phi_pot(jpi,jpj,nb_harmo), pot_astro(jpi,jpj)   ) 
     160      IF( ln_read_load ) THEN 
     161         ALLOCATE( amp_load(jpi,jpj,nb_harmo), phi_load(jpi,jpj,nb_harmo) ) 
     162      ENDIF 
     163      ! 
    151164   END SUBROUTINE tide_init 
    152165 
     
    155168#     include "tide.h90" 
    156169   END SUBROUTINE tide_init_Wave 
     170 
     171 
     172   SUBROUTINE tide_init_potential 
     173      !!---------------------------------------------------------------------- 
     174      !!                 ***  ROUTINE tide_init_potential  *** 
     175      !!---------------------------------------------------------------------- 
     176      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     177      REAL(wp) ::   zcons, ztmp1, ztmp2, zlat, zlon, ztmp, zamp, zcs   ! local scalar 
     178      !!---------------------------------------------------------------------- 
     179 
     180      DO jk = 1, nb_harmo 
     181         zcons = 0.7_wp * Wave(ntide(jk))%equitide * ftide(jk) 
     182         DO ji = 1, jpi 
     183            DO jj = 1, jpj 
     184               ztmp1 =  ftide(jk) * amp_pot(ji,jj,jk) * COS( phi_pot(ji,jj,jk) + v0tide(jk) + utide(jk) ) 
     185               ztmp2 = -ftide(jk) * amp_pot(ji,jj,jk) * SIN( phi_pot(ji,jj,jk) + v0tide(jk) + utide(jk) ) 
     186               zlat = gphit(ji,jj)*rad !! latitude en radian 
     187               zlon = glamt(ji,jj)*rad !! longitude en radian 
     188               ztmp = v0tide(jk) + utide(jk) + Wave(ntide(jk))%nutide * zlon 
     189               ! le potentiel est composé des effets des astres: 
     190               IF    ( Wave(ntide(jk))%nutide == 1 )  THEN  ;  zcs = zcons * SIN( 2._wp*zlat ) 
     191               ELSEIF( Wave(ntide(jk))%nutide == 2 )  THEN  ;  zcs = zcons * COS( zlat )**2 
     192               ELSE                                         ;  zcs = 0._wp 
     193               ENDIF 
     194               ztmp1 = ztmp1 + zcs * COS( ztmp ) 
     195               ztmp2 = ztmp2 - zcs * SIN( ztmp ) 
     196               zamp = SQRT( ztmp1*ztmp1 + ztmp2*ztmp2 ) 
     197               amp_pot(ji,jj,jk) = zamp 
     198               phi_pot(ji,jj,jk) = ATAN2( -ztmp2 / MAX( 1.e-10_wp , zamp ) ,   & 
     199                  &                        ztmp1 / MAX( 1.e-10_wp,  zamp )   ) 
     200            END DO 
     201         END DO 
     202      END DO 
     203      ! 
     204   END SUBROUTINE tide_init_potential 
     205 
     206 
     207   SUBROUTINE tide_init_load 
     208      !!---------------------------------------------------------------------- 
     209      !!                 ***  ROUTINE tide_init_load  *** 
     210      !!---------------------------------------------------------------------- 
     211      INTEGER :: inum                 ! Logical unit of input file 
     212      INTEGER :: ji, jj, itide        ! dummy loop indices 
     213      REAL(wp), DIMENSION(jpi,jpj) ::   ztr, zti   !: workspace to read in tidal harmonics data  
     214      !!---------------------------------------------------------------------- 
     215      IF(lwp) THEN 
     216         WRITE(numout,*) 
     217         WRITE(numout,*) 'tide_init_load : Initialization of load potential from file' 
     218         WRITE(numout,*) '~~~~~~~~~~~~~~ ' 
     219      ENDIF 
     220      ! 
     221      CALL iom_open ( cn_tide_load , inum ) 
     222      ! 
     223      DO itide = 1, nb_harmo 
     224         CALL iom_get  ( inum, jpdom_data,TRIM(Wave(ntide(itide))%cname_tide)//'_z1', ztr(:,:) ) 
     225         CALL iom_get  ( inum, jpdom_data,TRIM(Wave(ntide(itide))%cname_tide)//'_z2', zti(:,:) ) 
     226         ! 
     227         DO ji=1,jpi 
     228            DO jj=1,jpj 
     229               amp_load(ji,jj,itide) =  SQRT( ztr(ji,jj)**2. + zti(ji,jj)**2. ) 
     230               phi_load(ji,jj,itide) = ATAN2(-zti(ji,jj), ztr(ji,jj) ) 
     231            END DO 
     232         END DO 
     233         ! 
     234      END DO 
     235      CALL iom_close( inum ) 
     236      ! 
     237   END SUBROUTINE tide_init_load 
    157238 
    158239 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/step_oce.F90

    r10068 r10773  
    2020   USE sbcapr          ! surface boundary condition: atmospheric pressure 
    2121   USE sbctide         ! Tide initialisation 
     22   USE tide_mod, ONLY : ln_tide 
    2223   USE sbcwave         ! Wave intialisation 
    2324 
Note: See TracChangeset for help on using the changeset viewer.