- Timestamp:
- 2016-07-19T10:38:35+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/SBC/tideini.F90
r5215 r6808 6 6 !! History : 1.0 ! 2007 (O. Le Galloudec) Original code 7 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 8 USE oce ! ocean dynamics and tracers variables 9 USE dom_oce ! ocean space and time domain 10 USE phycst ! physical constant 11 USE daymod ! calandar 12 USE tide_mod ! 14 13 ! 15 USE i om16 USE i n_out_manager ! I/O units17 USE ioipsl 18 USE lbclnk 14 USE in_out_manager ! I/O units 15 USE iom ! xIOs server 16 USE ioipsl ! NetCDF IPSL library 17 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 19 18 20 19 IMPLICIT NONE … … 28 27 LOGICAL , PUBLIC :: ln_tide_pot !: 29 28 LOGICAL , PUBLIC :: ln_tide_ramp !: 30 INTEGER , PUBLIC :: nb_harmo 31 INTEGER , PUBLIC :: kt_tide 32 REAL(wp), PUBLIC :: rdttideramp 29 INTEGER , PUBLIC :: nb_harmo !: 30 INTEGER , PUBLIC :: kt_tide !: 31 REAL(wp), PUBLIC :: rdttideramp !: 33 32 34 33 INTEGER , PUBLIC, ALLOCATABLE, DIMENSION(:) :: ntide !: … … 41 40 CONTAINS 42 41 43 SUBROUTINE tide_init ( kt ) 44 !!---------------------------------------------------------------------- 45 !! *** ROUTINE tide_init *** 46 !!---------------------------------------------------------------------- 47 !! * Local declarations 48 INTEGER :: ji, jk 49 INTEGER, INTENT( in ) :: kt ! ocean time-step 50 CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname 51 INTEGER :: ios ! Local integer output status for namelist read 52 ! 53 NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname 54 !!---------------------------------------------------------------------- 55 56 IF ( kt == nit000 ) THEN 57 ! 58 IF(lwp) THEN 59 WRITE(numout,*) 60 WRITE(numout,*) 'tide_init : Initialization of the tidal components' 61 WRITE(numout,*) '~~~~~~~~~ ' 62 ENDIF 63 ! 64 CALL tide_init_Wave 65 ! 66 ! Read Namelist nam_tide 67 REWIND( numnam_ref ) ! Namelist nam_tide in reference namelist : Tides 68 READ ( numnam_ref, nam_tide, IOSTAT = ios, ERR = 901) 69 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in reference namelist', lwp ) 70 71 REWIND( numnam_cfg ) ! Namelist nam_tide in configuration namelist : Tides 72 READ ( numnam_cfg, nam_tide, IOSTAT = ios, ERR = 902 ) 73 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in configuration namelist', lwp ) 74 IF(lwm) WRITE ( numond, nam_tide ) 75 ! 76 nb_harmo=0 77 DO jk = 1, jpmax_harmo 78 DO ji = 1,jpmax_harmo 79 IF( TRIM(clname(jk)) == Wave(ji)%cname_tide ) nb_harmo = nb_harmo + 1 80 END DO 81 END DO 82 ! 83 ! Ensure that tidal components have been set in namelist_cfg 84 IF( nb_harmo .EQ. 0 ) CALL ctl_stop( 'tide_init : No tidal components set in nam_tide' ) 85 ! 86 IF(lwp) THEN 87 WRITE(numout,*) ' Namelist nam_tide' 88 WRITE(numout,*) ' Apply astronomical potential : ln_tide_pot =', ln_tide_pot 89 WRITE(numout,*) ' nb_harmo = ', nb_harmo 90 WRITE(numout,*) ' ln_tide_ramp = ', ln_tide_ramp 91 WRITE(numout,*) ' rdttideramp = ', rdttideramp 92 ENDIF 93 IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp) ) & 94 & CALL ctl_stop('rdttideramp must be lower than run duration') 95 IF( ln_tide_ramp.AND.(rdttideramp<0.) ) & 96 & CALL ctl_stop('rdttideramp must be positive') 97 ! 98 IF( .NOT. lk_dynspg_ts ) CALL ctl_warn( 'sbc_tide : use of time splitting is recommended' ) 99 ! 100 ALLOCATE( ntide(nb_harmo) ) 101 DO jk = 1, nb_harmo 102 DO ji = 1, jpmax_harmo 103 IF( TRIM(clname(jk)) .eq. Wave(ji)%cname_tide ) THEN 104 ntide(jk) = ji 105 EXIT 106 END IF 107 END DO 108 END DO 109 ! 110 ALLOCATE( omega_tide(nb_harmo), v0tide (nb_harmo), & 111 & utide (nb_harmo), ftide (nb_harmo) ) 112 kt_tide = kt 113 ! 42 SUBROUTINE tide_init 43 !!---------------------------------------------------------------------- 44 !! *** ROUTINE tide_init *** 45 !!---------------------------------------------------------------------- 46 INTEGER :: ji, jk 47 CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname 48 INTEGER :: ios ! Local integer output status for namelist read 49 ! 50 NAMELIST/nam_tide/ln_tide_pot, ln_tide_ramp, rdttideramp, clname 51 !!---------------------------------------------------------------------- 52 ! 53 IF(lwp) THEN 54 WRITE(numout,*) 55 WRITE(numout,*) 'tide_init : Initialization of the tidal components' 56 WRITE(numout,*) '~~~~~~~~~ ' 114 57 ENDIF 58 ! 59 CALL tide_init_Wave 60 ! 61 ! Read Namelist nam_tide 62 REWIND( numnam_ref ) ! Namelist nam_tide in reference namelist : Tides 63 READ ( numnam_ref, nam_tide, IOSTAT = ios, ERR = 901) 64 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in reference namelist', lwp ) 65 ! 66 REWIND( numnam_cfg ) ! Namelist nam_tide in configuration namelist : Tides 67 READ ( numnam_cfg, nam_tide, IOSTAT = ios, ERR = 902 ) 68 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tide in configuration namelist', lwp ) 69 IF(lwm) WRITE ( numond, nam_tide ) 70 ! 71 nb_harmo=0 72 DO jk = 1, jpmax_harmo 73 DO ji = 1,jpmax_harmo 74 IF( TRIM(clname(jk)) == Wave(ji)%cname_tide ) nb_harmo = nb_harmo + 1 75 END DO 76 END DO 77 ! 78 ! Ensure that tidal components have been set in namelist_cfg 79 IF( nb_harmo == 0 ) CALL ctl_stop( 'tide_init : No tidal components set in nam_tide' ) 80 ! 81 IF(lwp) THEN 82 WRITE(numout,*) ' Namelist nam_tide' 83 WRITE(numout,*) ' Apply astronomical potential : ln_tide_pot =', ln_tide_pot 84 WRITE(numout,*) ' nb_harmo = ', nb_harmo 85 WRITE(numout,*) ' ln_tide_ramp = ', ln_tide_ramp 86 WRITE(numout,*) ' rdttideramp = ', rdttideramp 87 ENDIF 88 IF( ln_tide_ramp.AND.((nitend-nit000+1)*rdt/rday < rdttideramp) ) & 89 & CALL ctl_stop('rdttideramp must be lower than run duration') 90 IF( ln_tide_ramp.AND.(rdttideramp<0.) ) & 91 & CALL ctl_stop('rdttideramp must be positive') 92 ! 93 ALLOCATE( ntide(nb_harmo) ) 94 DO jk = 1, nb_harmo 95 DO ji = 1, jpmax_harmo 96 IF( TRIM(clname(jk)) == Wave(ji)%cname_tide ) THEN 97 ntide(jk) = ji 98 EXIT 99 ENDIF 100 END DO 101 END DO 102 ! 103 ALLOCATE( omega_tide(nb_harmo), v0tide (nb_harmo), & 104 & utide (nb_harmo), ftide (nb_harmo) ) 105 kt_tide = nit000 115 106 ! 116 107 END SUBROUTINE tide_init
Note: See TracChangeset
for help on using the changeset viewer.