- Timestamp:
- 2013-07-03T13:41:32+02:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r3858_NOC_ZTC/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90
r3651 r3953 1 1 MODULE tideini 2 !!================================================================================= 3 !! *** MODULE tideini *** 4 !! Initialization of tidal forcing 5 !! History : 9.0 ! 07 (O. Le Galloudec) Original code 6 !!================================================================================= 7 !! * Modules used 8 USE oce ! ocean dynamics and tracers variables 9 USE dom_oce ! ocean space and time domain 10 USE in_out_manager ! I/O units 11 USE ioipsl ! NetCDF IPSL library 12 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 13 USE phycst 14 USE daymod 15 USE dynspg_oce 16 USE tide_mod 17 USE iom 2 !!====================================================================== 3 !! *** MODULE tideini *** 4 !! Initialization of tidal forcing 5 !!====================================================================== 6 !! History : 1.0 ! 2007 (O. Le Galloudec) Original code 7 !!---------------------------------------------------------------------- 8 USE oce ! ocean dynamics and tracers variables 9 USE dom_oce ! ocean space and time domain 10 USE phycst 11 USE daymod 12 USE dynspg_oce 13 USE tide_mod 14 ! 15 USE iom 16 USE in_out_manager ! I/O units 17 USE ioipsl ! NetCDF IPSL library 18 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 18 19 19 IMPLICIT NONE20 PUBLIC20 IMPLICIT NONE 21 PUBLIC 21 22 22 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: & 23 omega_tide, & 24 v0tide, & 25 utide, & 26 ftide 23 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: omega_tide !: 24 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: v0tide !: 25 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: utide !: 26 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: ftide !: 27 27 28 LOGICAL, PUBLIC :: ln_tide_pot = .false., ln_tide_ramp = .false. 29 REAL(wp), PUBLIC :: rdttideramp 30 INTEGER, PUBLIC :: nb_harmo 31 INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:) :: ntide 32 INTEGER, PUBLIC :: kt_tide 28 LOGICAL , PUBLIC :: ln_tide_pot = .FALSE. !: 29 LOGICAL , PUBLIC :: ln_tide_ramp = .FALSE. !: 30 INTEGER , PUBLIC :: nb_harmo !: 31 INTEGER , PUBLIC :: kt_tide !: 32 REAL(wp), PUBLIC :: rdttideramp !: 33 34 INTEGER , PUBLIC, ALLOCATABLE, DIMENSION(:) :: ntide !: 33 35 34 !!--------------------------------------------------------------------------------- 35 !! OPA 9.0 , LODYC-IPSL (2003) 36 !!--------------------------------------------------------------------------------- 37 36 !!---------------------------------------------------------------------- 37 !! NEMO/OPA 3.5 , NEMO Consortium (2013) 38 !! $Id: $ 39 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 40 !!---------------------------------------------------------------------- 38 41 CONTAINS 39 42 40 SUBROUTINE tide_init ( kt ) 41 !!---------------------------------------------------------------------- 42 !! *** ROUTINE tide_init *** 43 !!---------------------------------------------------------------------- 44 !! * Local declarations 45 INTEGER :: ji, jk 46 INTEGER, INTENT( in ) :: kt ! ocean time-step 47 CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname 48 ! 49 NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname 50 !!---------------------------------------------------------------------- 43 SUBROUTINE tide_init ( kt ) 44 !!---------------------------------------------------------------------- 45 !! *** ROUTINE tide_init *** 46 !!---------------------------------------------------------------------- 47 INTEGER :: ji, jk 48 INTEGER, INTENT( in ) :: kt ! ocean time-step 49 CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname 50 ! 51 NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname 52 !!---------------------------------------------------------------------- 51 53 52 IF ( kt == nit000 ) THEN 53 ! 54 IF(lwp) THEN 55 WRITE(numout,*) 56 WRITE(numout,*) 'tide_init : Initialization of the tidal components' 57 WRITE(numout,*) '~~~~~~~~~ ' 58 ENDIF 59 ! 60 CALL tide_init_Wave 61 ! 62 clname(:)='' 63 ! 64 ! Read Namelist nam_tide 65 REWIND ( numnam ) 66 READ ( numnam, nam_tide ) 67 ! 68 nb_harmo=0 69 DO jk=1,jpmax_harmo 70 DO ji=1,jpmax_harmo 71 IF(TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN 72 nb_harmo=nb_harmo+1 73 ENDIF 74 END DO 75 ENDDO 76 ! 77 IF(lwp) THEN 78 WRITE(numout,*) ' Namelist nam_tide' 79 WRITE(numout,*) ' nb_harmo = ', nb_harmo 80 WRITE(numout,*) ' ln_tide_ramp = ', ln_tide_ramp 81 WRITE(numout,*) ' rdttideramp = ', rdttideramp 82 IF (ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp)) & 83 & CALL ctl_stop('rdttideramp must be lower than run duration') 84 IF (ln_tide_ramp.AND.(rdttideramp<0.)) & 85 & CALL ctl_stop('rdttideramp must be positive') 86 CALL flush(numout) 87 ENDIF 88 ! 89 ALLOCATE(ntide(nb_harmo)) 90 DO jk=1,nb_harmo 91 DO ji=1,jpmax_harmo 92 IF (TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN 93 ntide(jk) = ji 94 EXIT 95 END IF 96 END DO 97 END DO 98 ! 99 ALLOCATE(omega_tide(nb_harmo)) 100 ALLOCATE(v0tide (nb_harmo)) 101 ALLOCATE(utide (nb_harmo)) 102 ALLOCATE(ftide (nb_harmo)) 103 kt_tide = kt 104 ! 105 ENDIF 106 107 IF ( nsec_day == NINT(0.5 * rdttra(1)) ) THEN 108 ! 109 IF(lwp) THEN 110 WRITE(numout,*) 111 WRITE(numout,*) 'tide_ini : Update of the tidal components at kt=',kt 112 WRITE(numout,*) '~~~~~~~~ ' 113 ENDIF 114 CALL tide_harmo(omega_tide, v0tide, utide, ftide, ntide, nb_harmo) 115 DO jk =1,nb_harmo 116 IF(lwp) WRITE(numout,*) Wave(ntide(jk))%cname_tide,utide(jk),ftide(jk),v0tide(jk),omega_tide(jk) 117 call flush(numout) 118 END DO 119 ! 120 kt_tide = kt 121 ! 122 ENDIF 123 124 END SUBROUTINE tide_init 125 54 IF( kt == nit000 ) THEN 55 ! 56 IF(lwp) THEN 57 WRITE(numout,*) 58 WRITE(numout,*) 'tide_init : Initialization of the tidal components' 59 WRITE(numout,*) '~~~~~~~~~ ' 60 ENDIF 61 ! 62 CALL tide_init_Wave 63 ! 64 clname(:)='' 65 ! 66 REWIND( numnam ) ! Read Namelist nam_tide 67 READ ( numnam, nam_tide ) 68 ! 69 nb_harmo=0 70 DO jk = 1, jpmax_harmo 71 DO ji = 1,jpmax_harmo 72 IF( TRIM(clname(jk)) == Wave(ji)%cname_tide ) nb_harmo = nb_harmo + 1 73 END DO 74 END DO 75 ! 76 IF(lwp) THEN 77 WRITE(numout,*) ' Namelist nam_tide' 78 WRITE(numout,*) ' Apply astronomical potential : ln_tide_pot =', ln_tide_pot 79 WRITE(numout,*) ' nb_harmo = ', nb_harmo 80 WRITE(numout,*) ' ln_tide_ramp = ', ln_tide_ramp 81 WRITE(numout,*) ' rdttideramp = ', rdttideramp 82 ENDIF 83 IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp) ) & 84 & CALL ctl_stop('rdttideramp must be lower than run duration') 85 IF( ln_tide_ramp.AND.(rdttideramp<0.) ) & 86 & CALL ctl_stop('rdttideramp must be positive') 87 ! 88 IF( .NOT. lk_dynspg_ts ) CALL ctl_warn( 'sbc_tide : use of time splitting is recommended' ) 89 ! 90 ALLOCATE( ntide(nb_harmo) ) 91 DO jk = 1, nb_harmo 92 DO ji = 1, jpmax_harmo 93 IF( TRIM(clname(jk)) .eq. Wave(ji)%cname_tide ) THEN 94 ntide(jk) = ji 95 EXIT 96 END IF 97 END DO 98 END DO 99 ! 100 ALLOCATE( omega_tide(nb_harmo), v0tide (nb_harmo), & 101 & utide (nb_harmo), ftide (nb_harmo) ) 102 kt_tide = kt 103 ! 104 ENDIF 105 ! 106 IF( nsec_day == NINT(0.5 * rdttra(1)) ) THEN 107 ! 108 CALL tide_harmo( omega_tide, v0tide, utide, ftide, ntide, nb_harmo ) 109 ! 110 kt_tide = kt 111 ! 112 IF(lwp) THEN 113 WRITE(numout,*) 114 WRITE(numout,*) 'tide_ini : Update of the tidal components at kt=', kt 115 WRITE(numout,*) '~~~~~~~~ ' 116 DO jk = 1, nb_harmo 117 WRITE(numout,*) Wave(ntide(jk))%cname_tide, utide(jk), ftide(jk), v0tide(jk), omega_tide(jk) 118 END DO 119 ENDIF 120 ! 121 ENDIF 122 ! 123 END SUBROUTINE tide_init 124 125 !!====================================================================== 126 126 END MODULE tideini
Note: See TracChangeset
for help on using the changeset viewer.