Changeset 10811


Ignore:
Timestamp:
2019-03-29T13:54:25+01:00 (17 months ago)
Author:
smueller
Message:

Replacement of the module variable used to store information about all available tidal components (variable Wave in module tide_mod) by an array used to store information about the selected components only (variable tide_components in module tide_mod), replacement of the corresponding initialisation subroutine, as well as related adjustments in various modules (bdytides, diaharm, sbctide, and tide_mod) and in one include file (tide.h90) (ticket #2194)

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

Legend:

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

    r10800 r10811  
    115115                    WRITE(numout,*) '             Tidal components: '  
    116116               DO itide = 1, nb_harmo 
    117                   WRITE(numout,*)  '                 ', Wave(ntide(itide))%cname_tide  
     117                  WRITE(numout,*)  '                 ', tide_components(itide)%cname_tide  
    118118               END DO 
    119119            ENDIF  
     
    156156               igrd = 1                       ! Everything is at T-points here 
    157157               DO itide = 1, nb_harmo 
    158                   CALL iom_get( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_z1', ztr(:,:) ) 
    159                   CALL iom_get( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_z2', zti(:,:) )  
     158                  CALL iom_get( inum, jpdom_autoglo, TRIM(tide_components(itide)%cname_tide)//'_z1', ztr(:,:) ) 
     159                  CALL iom_get( inum, jpdom_autoglo, TRIM(tide_components(itide)%cname_tide)//'_z2', zti(:,:) )  
    160160                  DO ib = 1, ilen0(igrd) 
    161161                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     
    172172               igrd = 2                       ! Everything is at U-points here 
    173173               DO itide = 1, nb_harmo 
    174                   CALL iom_get  ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_u1', ztr(:,:) ) 
    175                   CALL iom_get  ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_u2', zti(:,:) ) 
     174                  CALL iom_get  ( inum, jpdom_autoglo, TRIM(tide_components(itide)%cname_tide)//'_u1', ztr(:,:) ) 
     175                  CALL iom_get  ( inum, jpdom_autoglo, TRIM(tide_components(itide)%cname_tide)//'_u2', zti(:,:) ) 
    176176                  DO ib = 1, ilen0(igrd) 
    177177                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     
    188188               igrd = 3                       ! Everything is at V-points here 
    189189               DO itide = 1, nb_harmo 
    190                   CALL iom_get  ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_v1', ztr(:,:) ) 
    191                   CALL iom_get  ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_v2', zti(:,:) ) 
     190                  CALL iom_get  ( inum, jpdom_autoglo, TRIM(tide_components(itide)%cname_tide)//'_v1', ztr(:,:) ) 
     191                  CALL iom_get  ( inum, jpdom_autoglo, TRIM(tide_components(itide)%cname_tide)//'_v2', zti(:,:) ) 
    192192                  DO ib = 1, ilen0(igrd) 
    193193                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     
    217217               DO itide = 1, nb_harmo 
    218218                  !                                                              ! SSH fields 
    219                   clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_T.nc' 
     219                  clfile = TRIM(filtide)//TRIM(tide_components(itide)%cname_tide)//'_grid_T.nc' 
    220220                  CALL iom_open( clfile, inum ) 
    221221                  CALL fld_map( inum, 'z1' , dta_read(1:ilen0(1),1:1,1:1) , 1,  ibmap_ptr(1) ) 
     
    225225                  CALL iom_close( inum ) 
    226226                  !                                                              ! U fields 
    227                   clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_U.nc' 
     227                  clfile = TRIM(filtide)//TRIM(tide_components(itide)%cname_tide)//'_grid_U.nc' 
    228228                  CALL iom_open( clfile, inum ) 
    229229                  CALL fld_map( inum, 'u1' , dta_read(1:ilen0(2),1:1,1:1) , 1, ibmap_ptr(2) ) 
     
    233233                  CALL iom_close( inum ) 
    234234                  !                                                              ! V fields 
    235                   clfile = TRIM(filtide)//TRIM(Wave(ntide(itide))%cname_tide)//'_grid_V.nc' 
     235                  clfile = TRIM(filtide)//TRIM(tide_components(itide)%cname_tide)//'_grid_V.nc' 
    236236                  CALL iom_open( clfile, inum ) 
    237237                  CALL fld_map( inum, 'v1' , dta_read(1:ilen0(3),1:1,1:1) , 1, ibmap_ptr(3) ) 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/DIA/diaharm.F90

    r10425 r10811  
    3838   INTEGER ::   nb_ana        ! Number of harmonics to analyse 
    3939 
    40    INTEGER , ALLOCATABLE, DIMENSION(:)       ::   name 
    4140   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ana_temp 
    4241   REAL(wp), ALLOCATABLE, DIMENSION(:)       ::   ana_freq, ut   , vt   , ft 
     
    7372      INTEGER :: jh, nhan, jk, ji 
    7473      INTEGER ::   ios                 ! Local integer output status for namelist read 
     74      TYPE(tide), PUBLIC, DIMENSION(:), POINTER ::   tide_components ! Selected tidal components 
    7575 
    7676      NAMELIST/nam_diaharm/ nit000_han, nitend_han, nstep_han, tname 
     
    8484      ! 
    8585      IF( .NOT. ln_tide )   CALL ctl_stop( 'dia_harm_init : ln_tide must be true for harmonic analysis') 
    86       ! 
    87       CALL tide_init_Wave 
    8886      ! 
    8987      REWIND( numnam_ref )              ! Namelist nam_diaharm in reference namelist : Tidal harmonic analysis 
     
    111109         &                        CALL ctl_stop( 'dia_harm_init : analysis time span must be a multiple of nstep_han' ) 
    112110 
    113       nb_ana = 0 
    114       DO jk=1,jpmax_harmo 
    115          DO ji=1,jpmax_harmo 
    116             IF(TRIM(tname(jk)) == Wave(ji)%cname_tide) THEN 
    117                nb_ana=nb_ana+1 
    118             ENDIF 
    119          END DO 
    120       END DO 
     111      ! Request parameters for tidal components that have been selected for 
     112      ! harmonic analysis 
     113      CALL tide_init_components(tname, tide_components) 
     114      ! Number of tidal components selected for harmonic analysis 
     115      nb_ana = size(tide_components) 
    121116      ! 
    122117      IF(lwp) THEN 
     
    132127      ENDIF 
    133128 
    134       ALLOCATE(name    (nb_ana)) 
    135       DO jk=1,nb_ana 
    136        DO ji=1,jpmax_harmo 
    137           IF (TRIM(tname(jk)) ==  Wave(ji)%cname_tide) THEN 
    138              name(jk) = ji 
    139              EXIT 
    140           END IF 
    141        END DO 
    142       END DO 
    143  
    144129      ! Initialize frequency array: 
    145130      ! --------------------------- 
    146131      ALLOCATE( ana_freq(nb_ana), ut(nb_ana), vt(nb_ana), ft(nb_ana) ) 
    147132 
    148       CALL tide_harmo( ana_freq, vt, ut, ft, name, nb_ana ) 
     133      CALL tide_harmo( ana_freq, vt, ut, ft, nb_ana ) 
    149134 
    150135      IF(lwp) WRITE(numout,*) 'Analysed frequency  : ',nb_ana ,'Frequency ' 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/SBC/sbctide.F90

    r10773 r10811  
    6161            kt_tide = kt  
    6262         ENDIF 
    63          CALL tide_harmo( omega_tide, v0tide, utide, ftide, ntide, nb_harmo ) 
     63         CALL tide_harmo( omega_tide, v0tide, utide, ftide, nb_harmo ) 
    6464         ! 
    6565         ! 
     
    6969            WRITE(numout,*) '~~~~~~~~ ' 
    7070            DO jk = 1, nb_harmo 
    71                WRITE(numout,*) Wave(ntide(jk))%cname_tide, utide(jk), ftide(jk), v0tide(jk), omega_tide(jk) 
     71               WRITE(numout,*) tide_components(jk)%cname_tide, utide(jk), ftide(jk), v0tide(jk), omega_tide(jk) 
    7272            END DO 
    7373         ENDIF 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/TDE/tide.h90

    r10805 r10811  
    33   !!---------------------------------------------------------------------- 
    44 
    5    !             !! name_tide , equitide , nutide , nt , ns , nh , np , np1 , shift , nksi , nnu0 , nnu1 , nnu2 , R , formula !! 
    6    !             !!           !          !        !    !    !    !    !     !       !      !      !      !      !   !         !! 
    7    Wave( 1) = tide(  'M2'     , 0.242297 ,    2   ,  2 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    8    Wave( 2) = tide(  'N2'     , 0.046313 ,    2   ,  2 , -3 ,  2 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    9    Wave( 3) = tide( '2N2'     , 0.006184 ,    2   ,  2 , -4 ,  2 ,  2 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
    10    Wave( 4) = tide(  'S2'     , 0.113572 ,    2   ,  2 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
    11    Wave( 5) = tide(  'K2'     , 0.030875 ,    2   ,  2 ,  0 ,  2 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   , -2   , 0 ,   235   ) 
     5   !                        !! name_tide , equitide , nutide , nt , ns , nh , np , np1 , shift , nksi , nnu0 , nnu1 , nnu2 , R , formula !! 
     6   !                        !!           !          !        !    !    !    !    !     !       !      !      !      !      !   !         !! 
     7   tide_components( 1) = tide(  'M2'     , 0.242297 ,    2   ,  2 , -2 ,  2 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     8   tide_components( 2) = tide(  'N2'     , 0.046313 ,    2   ,  2 , -3 ,  2 ,  1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     9   tide_components( 3) = tide( '2N2'     , 0.006184 ,    2   ,  2 , -4 ,  2 ,  2 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,    78   ) 
     10   tide_components( 4) = tide(  'S2'     , 0.113572 ,    2   ,  2 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,     0   ) 
     11   tide_components( 5) = tide(  'K2'     , 0.030875 ,    2   ,  2 ,  0 ,  2 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   , -2   , 0 ,   235   ) 
    1212   !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    13    Wave( 6) = tide(  'K1'     , 0.142408 ,    1   ,  1 ,  0 ,  1 ,  0 ,  0  ,  -90  ,  0   ,  0   , -1   ,  0   , 0 ,   227   ) 
    14    Wave( 7) = tide(  'O1'     , 0.101266 ,    1   ,  1 , -2 ,  1 ,  0 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
    15    Wave( 8) = tide(  'Q1'     , 0.019387 ,    1   ,  1 , -3 ,  1 ,  1 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
    16    Wave( 9) = tide(  'P1'     , 0.047129 ,    1   ,  1 ,  0 , -1 ,  0 ,  0  ,  +90  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
     13   tide_components( 6) = tide(  'K1'     , 0.142408 ,    1   ,  1 ,  0 ,  1 ,  0 ,  0  ,  -90  ,  0   ,  0   , -1   ,  0   , 0 ,   227   ) 
     14   tide_components( 7) = tide(  'O1'     , 0.101266 ,    1   ,  1 , -2 ,  1 ,  0 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
     15   tide_components( 8) = tide(  'Q1'     , 0.019387 ,    1   ,  1 , -3 ,  1 ,  1 ,  0  ,  +90  ,  2   , -1   ,  0   ,  0   , 0 ,    75   ) 
     16   tide_components( 9) = tide(  'P1'     , 0.047129 ,    1   ,  1 ,  0 , -1 ,  0 ,  0  ,  +90  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
    1717   !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    18    Wave(10) = tide(  'M4'     , 0.000000 ,    4   ,  4 , -4 ,  4 ,  0 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,    1    ) 
     18   tide_components(10) = tide(  'M4'     , 0.000000 ,    4   ,  4 , -4 ,  4 ,  0 ,  0  ,    0  ,  4   , -4   ,  0   ,  0   , 0 ,    1    ) 
    1919   !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    20    Wave(11) = tide(  'Mf'     , 0.042017 ,    0   ,  0 ,  2 ,  0 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    21    Wave(12) = tide(  'Mm'     , 0.022191 ,    0   ,  0 ,  1 ,  0 , -1 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,   73    ) 
    22    Wave(13) = tide(  'Msqm'   , 0.000667 ,    0   ,  0 ,  4 , -2 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    23    Wave(14) = tide(  'Mtm'    , 0.008049 ,    0   ,  0 ,  3 ,  0 , -1 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     20   tide_components(11) = tide(  'Mf'     , 0.042017 ,    0   ,  0 ,  2 ,  0 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     21   tide_components(12) = tide(  'Mm'     , 0.022191 ,    0   ,  0 ,  1 ,  0 , -1 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,   73    ) 
     22   tide_components(13) = tide(  'Msqm'   , 0.000667 ,    0   ,  0 ,  4 , -2 ,  0 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
     23   tide_components(14) = tide(  'Mtm'    , 0.008049 ,    0   ,  0 ,  3 ,  0 , -1 ,  0  ,    0  , -2   ,  0   ,  0   ,  0   , 0 ,   74    ) 
    2424   !              !           !          !        !    !    !    !    !     !       !      !      !      !      !   !         ! 
    25    Wave(15) = tide(  'S1'     , 0.000000 ,    1   ,  1 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    )    
    26    Wave(16) = tide(  'MU2'    , 0.005841 ,    2   ,  2 , -4 ,  4 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,   78    ) 
    27    Wave(17) = tide(  'NU2'    , 0.009094 ,    2   ,  2 , -3 ,  4 , -1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,   78    )  
    28    Wave(18) = tide(  'L2'     , 0.006694 ,    2   ,  2 , -1 ,  2 , -1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,  215    ) 
    29    Wave(19) = tide(  'T2'     , 0.006614 ,    2   ,  2 ,  0 , -1 ,  0 ,  1  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
     25   tide_components(15) = tide(  'S1'     , 0.000000 ,    1   ,  1 ,  0 ,  0 ,  0 ,  0  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    )    
     26   tide_components(16) = tide(  'MU2'    , 0.005841 ,    2   ,  2 , -4 ,  4 ,  0 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,   78    ) 
     27   tide_components(17) = tide(  'NU2'    , 0.009094 ,    2   ,  2 , -3 ,  4 , -1 ,  0  ,    0  ,  2   , -2   ,  0   ,  0   , 0 ,   78    )  
     28   tide_components(18) = tide(  'L2'     , 0.006694 ,    2   ,  2 , -1 ,  2 , -1 ,  0  , +180  ,  2   , -2   ,  0   ,  0   , 0 ,  215    ) 
     29   tide_components(19) = tide(  'T2'     , 0.006614 ,    2   ,  2 ,  0 , -1 ,  0 ,  1  ,    0  ,  0   ,  0   ,  0   ,  0   , 0 ,    0    ) 
  • NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/TDE/tide_mod.F90

    r10800 r10811  
    2121   PUBLIC   tide_init 
    2222   PUBLIC   tide_harmo       ! called by tideini and diaharm modules 
    23    PUBLIC   tide_init_Wave   ! called by tideini and diaharm modules 
     23   PUBLIC   tide_init_components ! called internally and by module diaharm 
    2424   PUBLIC   tide_init_load 
    2525   PUBLIC   tide_init_potential 
    2626   PUBLIC   upd_tide         ! called in dynspg_... modules 
    2727 
    28    INTEGER, PUBLIC, PARAMETER ::   jpmax_harmo = 19   !: maximum number of harmonic 
     28   INTEGER, PUBLIC, PARAMETER ::   jpmax_harmo = 64   !: maximum number of harmonic components 
    2929 
    3030   TYPE, PUBLIC ::    tide 
    31       CHARACTER(LEN=4) ::   cname_tide 
     31      CHARACTER(LEN=4) ::   cname_tide = '' 
    3232      REAL(wp)         ::   equitide 
    3333      INTEGER          ::   nutide 
     
    3737   END TYPE tide 
    3838 
    39    TYPE(tide), PUBLIC, DIMENSION(jpmax_harmo) ::   Wave   !: 
     39   TYPE(tide), PUBLIC, DIMENSION(:), POINTER ::   tide_components !: Array of selected tidal component parameters 
    4040 
    4141   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) ::   omega_tide   !: 
     
    4949   LOGICAL , PUBLIC ::   ln_scal_load    !: 
    5050   LOGICAL , PUBLIC ::   ln_tide_ramp    !: 
    51    INTEGER , PUBLIC ::   nb_harmo        !: 
     51   INTEGER , PUBLIC ::   nb_harmo        !: Number of active tidal components 
    5252   INTEGER , PUBLIC ::   kt_tide         !: 
    5353   REAL(wp), PUBLIC ::   rn_tide_ramp_dt     !: 
     
    5555   CHARACTER(lc), PUBLIC ::   cn_tide_load   !:  
    5656   REAL(wp)         ::   rn_tide_gamma   ! Tidal tilt factor 
    57  
    58    INTEGER , PUBLIC, ALLOCATABLE, DIMENSION(:) ::   ntide   !: 
    5957 
    6058   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:)   ::   pot_astro !: tidal potential 
     
    7977      !!----------------------------------------------------------------------       
    8078      INTEGER  :: ji, jk 
    81       CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: sn_tide_cnames 
     79      CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: sn_tide_cnames ! Names of selected tidal components 
    8280      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    8381      ! 
     
    8684      !!---------------------------------------------------------------------- 
    8785      ! 
     86      ! Initialise all array elements of sn_tide_cnames, as some of them 
     87      ! typically do not appear in namelist_ref or namelist_cfg 
     88      sn_tide_cnames(:) = '' 
    8889      ! Read Namelist nam_tide 
    8990      REWIND( numnam_ref )              ! Namelist nam_tide in reference namelist : Tides 
     
    120121      ENDIF 
    121122      ! 
    122       CALL tide_init_Wave 
    123       ! 
    124       nb_harmo=0 
    125       DO jk = 1, jpmax_harmo 
    126          DO ji = 1,jpmax_harmo 
    127             IF( TRIM(sn_tide_cnames(jk)) == Wave(ji)%cname_tide )   nb_harmo = nb_harmo + 1 
    128          END DO 
    129       END DO 
     123      ! Initialise array of selected tidal components 
     124      CALL tide_init_components(sn_tide_cnames, tide_components) 
     125      ! Number of active tidal components 
     126      nb_harmo = size(tide_components) 
    130127      !        
    131128      ! Ensure that tidal components have been set in namelist_cfg 
     
    143140         &   CALL ctl_stop('rn_tide_ramp_dt must be positive') 
    144141      ! 
    145       ALLOCATE( ntide(nb_harmo) ) 
    146       DO jk = 1, nb_harmo 
    147          DO ji = 1, jpmax_harmo 
    148             IF( TRIM(sn_tide_cnames(jk)) == Wave(ji)%cname_tide ) THEN 
    149                ntide(jk) = ji 
    150                EXIT 
    151             ENDIF 
    152          END DO 
    153       END DO 
    154       ! 
    155142      ALLOCATE( omega_tide(nb_harmo), v0tide    (nb_harmo),   & 
    156143         &      utide     (nb_harmo), ftide     (nb_harmo)  ) 
     
    168155 
    169156 
    170    SUBROUTINE tide_init_Wave 
    171 #     include "tide.h90" 
    172    END SUBROUTINE tide_init_Wave 
     157   SUBROUTINE tide_init_components(pcnames, ptide_comp) 
     158      !!---------------------------------------------------------------------- 
     159      !!                 ***  ROUTINE tide_init_components  *** 
     160      !! 
     161      !! Returns pointer to array of variables of type 'tide' that contain 
     162      !! information about the selected tidal components 
     163      !! ---------------------------------------------------------------------- 
     164      CHARACTER(LEN=4),              DIMENSION(jpmax_harmo), INTENT(in)  ::   pcnames         ! Names of selected components 
     165      TYPE(tide),       POINTER,     DIMENSION(:),           INTENT(out) ::   ptide_comp      ! Selected components 
     166      INTEGER,          ALLOCATABLE, DIMENSION(:)                        ::   kcomppos        ! Indices of selected components 
     167      INTEGER                                                            ::   kcomp, jk, ji   ! Miscellaneous integers 
     168      TYPE(tide),       POINTER,     DIMENSION(:)                        ::   tide_components ! All available components 
     169       
     170      ! Populate local array with information about all available tidal 
     171      ! components 
     172      ! 
     173      ! Note, here 'tide_components' locally overrides the global module 
     174      ! variable of the same name to enable the use of the global name in the 
     175      ! include file that contains the initialisation of elements of array 
     176      ! 'tide_components' 
     177      ALLOCATE(tide_components(jpmax_harmo), kcomppos(jpmax_harmo)) 
     178      ! Initialise array of indices of the selected componenents 
     179      kcomppos(:) = 0 
     180      ! Include tidal component parameters for all available components 
     181#include "tide.h90" 
     182       
     183      ! Identify the selected components that are availble 
     184      kcomp = 0 
     185      DO jk = 1, jpmax_harmo 
     186         IF (TRIM(pcnames(jk)) /= '') THEN 
     187            DO ji = 1, jpmax_harmo 
     188               IF (TRIM(pcnames(jk)) == tide_components(ji)%cname_tide) THEN 
     189                  kcomp = kcomp + 1 
     190                  WRITE(numout, '(10X,"Tidal component #",I2.2,36X,"= ",A4)') kcomp, pcnames(jk) 
     191                  kcomppos(kcomp) = ji 
     192                  EXIT 
     193               END IF 
     194            END DO 
     195         END IF 
     196      END DO 
     197       
     198      ! Allocate and populate reduced list of components 
     199      ALLOCATE(ptide_comp(kcomp)) 
     200      DO jk = 1, kcomp 
     201         ptide_comp(jk) = tide_components(kcomppos(jk)) 
     202      END DO 
     203       
     204      ! Release local array of available components and list of selected 
     205      ! components 
     206      DEALLOCATE(tide_components, kcomppos) 
     207       
     208   END SUBROUTINE tide_init_components 
    173209 
    174210 
     
    182218 
    183219      DO jk = 1, nb_harmo 
    184          zcons = rn_tide_gamma * Wave(ntide(jk))%equitide * ftide(jk) 
     220         zcons = rn_tide_gamma * tide_components(jk)%equitide * ftide(jk) 
    185221         DO ji = 1, jpi 
    186222            DO jj = 1, jpj 
     
    189225               zlat = gphit(ji,jj)*rad !! latitude en radian 
    190226               zlon = glamt(ji,jj)*rad !! longitude en radian 
    191                ztmp = v0tide(jk) + utide(jk) + Wave(ntide(jk))%nutide * zlon 
     227               ztmp = v0tide(jk) + utide(jk) + tide_components(jk)%nutide * zlon 
    192228               ! le potentiel est composé des effets des astres: 
    193                IF    ( Wave(ntide(jk))%nutide == 1 )  THEN  ;  zcs = zcons * SIN( 2._wp*zlat ) 
    194                ELSEIF( Wave(ntide(jk))%nutide == 2 )  THEN  ;  zcs = zcons * COS( zlat )**2 
     229               IF    ( tide_components(jk)%nutide == 1 )  THEN  ;  zcs = zcons * SIN( 2._wp*zlat ) 
     230               ELSEIF( tide_components(jk)%nutide == 2 )  THEN  ;  zcs = zcons * COS( zlat )**2 
    195231               ELSE                                         ;  zcs = 0._wp 
    196232               ENDIF 
     
    225261      ! 
    226262      DO itide = 1, nb_harmo 
    227          CALL iom_get  ( inum, jpdom_data,TRIM(Wave(ntide(itide))%cname_tide)//'_z1', ztr(:,:) ) 
    228          CALL iom_get  ( inum, jpdom_data,TRIM(Wave(ntide(itide))%cname_tide)//'_z2', zti(:,:) ) 
     263         CALL iom_get  ( inum, jpdom_data,TRIM(tide_components(itide)%cname_tide)//'_z1', ztr(:,:) ) 
     264         CALL iom_get  ( inum, jpdom_data,TRIM(tide_components(itide)%cname_tide)//'_z2', zti(:,:) ) 
    229265         ! 
    230266         DO ji=1,jpi 
     
    241277 
    242278 
    243    SUBROUTINE tide_harmo( pomega, pvt, put , pcor, ktide ,kc) 
    244       !!---------------------------------------------------------------------- 
    245       !!---------------------------------------------------------------------- 
    246       INTEGER , DIMENSION(kc), INTENT(in ) ::   ktide            ! Indice of tidal constituents 
     279   SUBROUTINE tide_harmo( pomega, pvt, put , pcor, kc) 
     280      !!---------------------------------------------------------------------- 
     281      !!---------------------------------------------------------------------- 
    247282      INTEGER                , INTENT(in ) ::   kc               ! Total number of tidal constituents 
    248283      REAL(wp), DIMENSION(kc), INTENT(out) ::   pomega           ! pulsation in radians/s 
     
    251286      ! 
    252287      CALL astronomic_angle 
    253       CALL tide_pulse( pomega, ktide ,kc ) 
    254       CALL tide_vuf  ( pvt, put, pcor, ktide ,kc ) 
     288      CALL tide_pulse( pomega, kc ) 
     289      CALL tide_vuf  ( pvt, put, pcor, kc ) 
    255290      ! 
    256291   END SUBROUTINE tide_harmo 
     
    348383 
    349384 
    350    SUBROUTINE tide_pulse( pomega, ktide ,kc ) 
     385   SUBROUTINE tide_pulse( pomega, kc ) 
    351386      !!---------------------------------------------------------------------- 
    352387      !!                     ***  ROUTINE tide_pulse  *** 
     
    355390      !!---------------------------------------------------------------------- 
    356391      INTEGER                , INTENT(in ) ::   kc       ! Total number of tidal constituents 
    357       INTEGER , DIMENSION(kc), INTENT(in ) ::   ktide    ! Indice of tidal constituents 
    358392      REAL(wp), DIMENSION(kc), INTENT(out) ::   pomega   ! pulsation in radians/s 
    359393      ! 
     
    371405      ! 
    372406      DO jh = 1, kc 
    373          pomega(jh) = (  zomega_T * Wave( ktide(jh) )%nT   & 
    374             &          + zomega_s * Wave( ktide(jh) )%ns   & 
    375             &          + zomega_h * Wave( ktide(jh) )%nh   & 
    376             &          + zomega_p * Wave( ktide(jh) )%np   & 
    377             &          + zomega_p1* Wave( ktide(jh) )%np1  ) * zscale 
     407         pomega(jh) = (  zomega_T * tide_components( jh )%nT   & 
     408            &          + zomega_s * tide_components( jh )%ns   & 
     409            &          + zomega_h * tide_components( jh )%nh   & 
     410            &          + zomega_p * tide_components( jh )%np   & 
     411            &          + zomega_p1* tide_components( jh )%np1  ) * zscale 
    378412      END DO 
    379413      ! 
     
    381415 
    382416 
    383    SUBROUTINE tide_vuf( pvt, put, pcor, ktide ,kc ) 
     417   SUBROUTINE tide_vuf( pvt, put, pcor, kc ) 
    384418      !!---------------------------------------------------------------------- 
    385419      !!                     ***  ROUTINE tide_vuf  *** 
     
    392426      !!---------------------------------------------------------------------- 
    393427      INTEGER                , INTENT(in ) ::   kc               ! Total number of tidal constituents 
    394       INTEGER , DIMENSION(kc), INTENT(in ) ::   ktide            ! Indice of tidal constituents 
    395428      REAL(wp), DIMENSION(kc), INTENT(out) ::   pvt, put, pcor   ! 
    396429      ! 
     
    401434         !  Phase of the tidal potential relative to the Greenwhich  
    402435         !  meridian (e.g. the position of the fictuous celestial body). Units are radian: 
    403          pvt(jh) = sh_T * Wave( ktide(jh) )%nT    & 
    404             &    + sh_s * Wave( ktide(jh) )%ns    & 
    405             &    + sh_h * Wave( ktide(jh) )%nh    & 
    406             &    + sh_p * Wave( ktide(jh) )%np    & 
    407             &    + sh_p1* Wave( ktide(jh) )%np1   & 
    408             &    +        Wave( ktide(jh) )%shift * rad 
     436         pvt(jh) = sh_T * tide_components( jh )%nT    & 
     437            &    + sh_s * tide_components( jh )%ns    & 
     438            &    + sh_h * tide_components( jh )%nh    & 
     439            &    + sh_p * tide_components( jh )%np    & 
     440            &    + sh_p1* tide_components( jh )%np1   & 
     441            &    +        tide_components( jh )%shift * rad 
    409442         ! 
    410443         !  Phase correction u due to nodal motion. Units are radian: 
    411          put(jh) = sh_xi     * Wave( ktide(jh) )%nksi   & 
    412             &    + sh_nu     * Wave( ktide(jh) )%nnu0   & 
    413             &    + sh_nuprim * Wave( ktide(jh) )%nnu1   & 
    414             &    + sh_nusec  * Wave( ktide(jh) )%nnu2   & 
    415             &    + sh_R      * Wave( ktide(jh) )%R 
     444         put(jh) = sh_xi     * tide_components( jh )%nksi   & 
     445            &    + sh_nu     * tide_components( jh )%nnu0   & 
     446            &    + sh_nuprim * tide_components( jh )%nnu1   & 
     447            &    + sh_nusec  * tide_components( jh )%nnu2   & 
     448            &    + sh_R      * tide_components( jh )%R 
    416449 
    417450         !  Nodal correction factor: 
    418          pcor(jh) = nodal_factort( Wave( ktide(jh) )%nformula ) 
     451         pcor(jh) = nodal_factort( tide_components( jh )%nformula ) 
    419452      END DO 
    420453      ! 
Note: See TracChangeset for help on using the changeset viewer.