- Timestamp:
- 2019-04-01T17:50:07+02:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10742_ENHANCE-12_SimonM-Tides/src/OCE/TDE/tide_mod.F90
r10811 r10822 22 22 PUBLIC tide_harmo ! called by tideini and diaharm modules 23 23 PUBLIC tide_init_components ! called internally and by module diaharm 24 PUBLIC tide_init_harmonics ! called internally and by module diaharm 24 25 PUBLIC tide_init_load 25 26 PUBLIC tide_init_potential … … 39 40 TYPE(tide), PUBLIC, DIMENSION(:), POINTER :: tide_components !: Array of selected tidal component parameters 40 41 41 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: omega_tide !: 42 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: v0tide !: 43 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: utide !: 44 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: ftide !: 42 TYPE, PUBLIC :: tide_harmonic !: Oscillation parameters of harmonic tidal components 43 CHARACTER(LEN=4) :: cname_tide ! Name of component 44 REAL(wp) :: equitide ! Amplitude of equilibrium tide 45 REAL(wp) :: f ! Node factor 46 REAL(wp) :: omega ! Angular velocity 47 REAL(wp) :: v0 ! Initial phase at prime meridian 48 REAL(wp) :: u ! Phase correction 49 END type tide_harmonic 50 51 TYPE(tide_harmonic), PUBLIC, DIMENSION(:), POINTER :: tide_harmonics !: Oscillation parameters of selected tidal components 45 52 46 53 LOGICAL , PUBLIC :: ln_tide !: … … 140 147 & CALL ctl_stop('rn_tide_ramp_dt must be positive') 141 148 ! 142 ALLOCATE( omega_tide(nb_harmo), v0tide (nb_harmo), & 143 & utide (nb_harmo), ftide (nb_harmo) ) 149 ! Initialise array used to store tidal oscillation parameters (frequency, 150 ! amplitude, phase) 151 CALL tide_init_harmonics(tide_components, tide_harmonics) 152 ! 153 ! Reference time step for time-dependent tidal parameters 144 154 kt_tide = nit000 145 155 ! … … 209 219 210 220 221 SUBROUTINE tide_init_harmonics(ptide_comp, ptide_harmo) 222 !!---------------------------------------------------------------------- 223 !! *** ROUTINE tide_init_harmonics *** 224 !! 225 !! Returns pointer to array of variables of type 'tide_harmonics' that 226 !! contain oscillation parameters of the selected harmonic tidal 227 !! components 228 !! ---------------------------------------------------------------------- 229 TYPE(tide), POINTER, DIMENSION(:) :: ptide_comp ! Selected components 230 TYPE(tide_harmonic), POINTER, DIMENSION(:) :: ptide_harmo ! Oscillation parameters of selected components 231 232 ! Allocate and populate array of oscillation parameters 233 ALLOCATE(ptide_harmo(size(ptide_comp))) 234 ptide_harmo(:)%cname_tide = ptide_comp(:)%cname_tide 235 ptide_harmo(:)%equitide = ptide_comp(:)%equitide 236 CALL tide_harmo(ptide_comp, ptide_harmo) 237 238 END SUBROUTINE tide_init_harmonics 239 240 211 241 SUBROUTINE tide_init_potential 212 242 !!---------------------------------------------------------------------- … … 218 248 219 249 DO jk = 1, nb_harmo 220 zcons = rn_tide_gamma * tide_components(jk)%equitide * ftide(jk)250 zcons = rn_tide_gamma * tide_components(jk)%equitide * tide_harmonics(jk)%f 221 251 DO ji = 1, jpi 222 252 DO jj = 1, jpj 223 ztmp1 = ftide(jk) * amp_pot(ji,jj,jk) * COS( phi_pot(ji,jj,jk) + v0tide(jk) + utide(jk) ) 224 ztmp2 = -ftide(jk) * amp_pot(ji,jj,jk) * SIN( phi_pot(ji,jj,jk) + v0tide(jk) + utide(jk) ) 253 ztmp1 = tide_harmonics(jk)%f * amp_pot(ji,jj,jk) * COS( phi_pot(ji,jj,jk) & 254 & + tide_harmonics(jk)%v0 + tide_harmonics(jk)%u ) 255 ztmp2 = -tide_harmonics(jk)%f * amp_pot(ji,jj,jk) * SIN( phi_pot(ji,jj,jk) & 256 & + tide_harmonics(jk)%v0 + tide_harmonics(jk)%u ) 225 257 zlat = gphit(ji,jj)*rad !! latitude en radian 226 258 zlon = glamt(ji,jj)*rad !! longitude en radian 227 ztmp = v0tide(jk) + utide(jk)+ tide_components(jk)%nutide * zlon259 ztmp = tide_harmonics(jk)%v0 + tide_harmonics(jk)%u + tide_components(jk)%nutide * zlon 228 260 ! le potentiel est composé des effets des astres: 229 261 IF ( tide_components(jk)%nutide == 1 ) THEN ; zcs = zcons * SIN( 2._wp*zlat ) … … 277 309 278 310 279 SUBROUTINE tide_harmo( pomega, pvt, put , pcor, kc) 280 !!---------------------------------------------------------------------- 281 !!---------------------------------------------------------------------- 282 INTEGER , INTENT(in ) :: kc ! Total number of tidal constituents 283 REAL(wp), DIMENSION(kc), INTENT(out) :: pomega ! pulsation in radians/s 284 REAL(wp), DIMENSION(kc), INTENT(out) :: pvt, put, pcor ! 285 !!---------------------------------------------------------------------- 311 SUBROUTINE tide_harmo( ptide_comp, ptide_harmo ) 312 ! 313 TYPE(tide), DIMENSION(:), POINTER :: ptide_comp ! Array of selected tidal component parameters 314 TYPE(tide_harmonic), DIMENSION(:), POINTER :: ptide_harmo ! Oscillation parameters of selected tidal components 286 315 ! 287 316 CALL astronomic_angle 288 CALL tide_pulse( p omega, kc)289 CALL tide_vuf ( pvt, put, pcor, kc)317 CALL tide_pulse( ptide_comp, ptide_harmo ) 318 CALL tide_vuf( ptide_comp, ptide_harmo ) 290 319 ! 291 320 END SUBROUTINE tide_harmo … … 383 412 384 413 385 SUBROUTINE tide_pulse( p omega, kc)414 SUBROUTINE tide_pulse( ptide_comp, ptide_harmo ) 386 415 !!---------------------------------------------------------------------- 387 416 !! *** ROUTINE tide_pulse *** … … 389 418 !! ** Purpose : Compute tidal frequencies 390 419 !!---------------------------------------------------------------------- 391 INTEGER , INTENT(in ) :: kc ! Total number of tidal constituents392 REAL(wp), DIMENSION(kc), INTENT(out) :: pomega ! pulsation in radians/s420 TYPE(tide), DIMENSION(:), POINTER :: ptide_comp ! Array of selected tidal component parameters 421 TYPE(tide_harmonic), DIMENSION(:), POINTER :: ptide_harmo ! Oscillation parameters of selected tidal components 393 422 ! 394 423 INTEGER :: jh … … 404 433 zscale = rad / ( 36525._wp * 86400._wp ) 405 434 ! 406 DO jh = 1, kc407 p omega(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 ) * zscale435 DO jh = 1, nb_harmo 436 ptide_harmo(jh)%omega = ( zomega_T * ptide_comp( jh )%nT & 437 & + zomega_s * ptide_comp( jh )%ns & 438 & + zomega_h * ptide_comp( jh )%nh & 439 & + zomega_p * ptide_comp( jh )%np & 440 & + zomega_p1* ptide_comp( jh )%np1 ) * zscale 412 441 END DO 413 442 ! … … 415 444 416 445 417 SUBROUTINE tide_vuf( p vt, put, pcor, kc)446 SUBROUTINE tide_vuf( ptide_comp, ptide_harmo ) 418 447 !!---------------------------------------------------------------------- 419 448 !! *** ROUTINE tide_vuf *** … … 425 454 !! ft: Nodal correction factor 426 455 !!---------------------------------------------------------------------- 427 INTEGER , INTENT(in ) :: kc ! Total number of tidal constituents428 REAL(wp), DIMENSION(kc), INTENT(out) :: pvt, put, pcor !456 TYPE(tide), DIMENSION(:), POINTER :: ptide_comp ! Array of selected tidal component parameters 457 TYPE(tide_harmonic), DIMENSION(:), POINTER :: ptide_harmo ! Oscillation parameters of selected tidal components 429 458 ! 430 459 INTEGER :: jh ! dummy loop index 431 460 !!---------------------------------------------------------------------- 432 461 ! 433 DO jh = 1, kc462 DO jh = 1, nb_harmo 434 463 ! Phase of the tidal potential relative to the Greenwhich 435 464 ! meridian (e.g. the position of the fictuous celestial body). Units are radian: 436 p vt(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 * rad465 ptide_harmo(jh)%v0 = sh_T * ptide_comp( jh )%nT & 466 & + sh_s * ptide_comp( jh )%ns & 467 & + sh_h * ptide_comp( jh )%nh & 468 & + sh_p * ptide_comp( jh )%np & 469 & + sh_p1* ptide_comp( jh )%np1 & 470 & + ptide_comp( jh )%shift * rad 442 471 ! 443 472 ! Phase correction u due to nodal motion. Units are radian: 444 p ut(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 )%R473 ptide_harmo(jh)%u = sh_xi * ptide_comp( jh )%nksi & 474 & + sh_nu * ptide_comp( jh )%nnu0 & 475 & + sh_nuprim * ptide_comp( jh )%nnu1 & 476 & + sh_nusec * ptide_comp( jh )%nnu2 & 477 & + sh_R * ptide_comp( jh )%R 449 478 450 479 ! Nodal correction factor: 451 p cor(jh) = nodal_factort( tide_components( jh )%nformula )480 ptide_harmo(jh)%f = nodal_factort( ptide_comp( jh )%nformula ) 452 481 END DO 453 482 ! … … 672 701 ENDIF 673 702 ! 674 zwt(:) = omega_tide(:)* zt703 zwt(:) = tide_harmonics(:)%omega * zt 675 704 676 705 pot_astro(:,:) = 0._wp ! update tidal potential (sum of all harmonics)
Note: See TracChangeset
for help on using the changeset viewer.