- Timestamp:
- 2012-11-16T17:18:17+01:00 (12 years ago)
- Location:
- branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC
- Files:
-
- 4 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90
r3294 r3583 667 667 !!---------------------------------------------------------------------- 668 668 #if defined key_bdy 669 USE bdy_oce, ONLY: dta_global ! workspace to read in global data arrays669 USE bdy_oce, ONLY: dta_global, dta_global2 ! workspace to read in global data arrays 670 670 #endif 671 671 … … 681 681 INTEGER :: ilendta ! length of data in file 682 682 INTEGER :: idvar ! variable ID 683 INTEGER :: ib, ik ! loop counters683 INTEGER :: ib, ik, ji, jj ! loop counters 684 684 INTEGER :: ierr 685 REAL(wp), POINTER, DIMENSION(:,:,:) :: dta_read ! work space for global data685 REAL(wp), POINTER, DIMENSION(:,:,:) :: dta_read ! work space for global data 686 686 !!--------------------------------------------------------------------- 687 687 688 #if defined key_bdy689 dta_read => dta_global690 #endif691 692 688 ipi = SIZE( dta, 1 ) 693 689 ipj = 1 … … 696 692 idvar = iom_varid( num, clvar ) 697 693 ilendta = iom_file(num)%dimsz(1,idvar) 694 695 #if defined key_bdy 696 ipj = iom_file(num)%dimsz(2,idvar) 697 IF (ipj == 1) THEN ! we assume that this is a structured open boundary file 698 dta_read => dta_global 699 ELSE 700 dta_read => dta_global2 701 ENDIF 702 #endif 703 704 IF ((lwp).AND.(ipi>ilendta*ipj)) CALL ctl_stop('fld_map problem with file dimension') 705 698 706 IF(lwp) WRITE(numout,*) 'Dim size for ',TRIM(clvar),' is ', ilendta 699 707 IF(lwp) WRITE(numout,*) 'Number of levels for ',TRIM(clvar),' is ', ipk 708 700 709 701 710 SELECT CASE( ipk ) … … 706 715 END SELECT 707 716 ! 708 DO ib = 1, ipi 709 DO ik = 1, ipk 710 dta(ib,1,ik) = dta_read(map(ib),1,ik) 717 IF (ipj==1) THEN 718 DO ib = 1, ipi 719 DO ik = 1, ipk 720 dta(ib,1,ik) = dta_read(map(ib),1,ik) 721 END DO 711 722 END DO 712 END DO 723 ELSE ! we assume that this is a structured open boundary file 724 DO ib = 1, ipi 725 jj=1+floor(REAL(map(ib)-1)/REAL(ilendta)) 726 ji=map(ib)-(jj-1)*ilendta 727 DO ik = 1, ipk 728 dta(ib,1,ik) = dta_read(ji,jj,ik) 729 END DO 730 END DO 731 ENDIF 713 732 714 733 END SUBROUTINE fld_map -
branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbcapr.F90
r3294 r3583 66 66 !! 67 67 INTEGER :: ierror ! local integer 68 REAL(wp) :: zpref ! local scalar69 68 !! 70 69 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 71 70 TYPE(FLD_N) :: sn_apr ! informations about the fields to be read 72 71 !! 73 NAMELIST/namsbc_apr/ cn_dir, sn_apr, ln_ref_apr 72 NAMELIST/namsbc_apr/ cn_dir, sn_apr, ln_ref_apr, rpref, ln_apr_obc 74 73 !!---------------------------------------------------------------------- 75 74 ! … … 113 112 ! 114 113 ! !* control check 115 IF( ln_apr_obc ) & 116 CALL ctl_stop( 'sbc_apr: inverse barometer added to OBC ssh data not yet implemented ' ) 117 IF( ln_apr_obc .AND. .NOT. lk_obc ) & 118 CALL ctl_stop( 'sbc_apr: add inverse barometer to OBC requires to use key_obc' ) 114 IF ( ln_apr_obc ) THEN 115 IF(lwp) WRITE(numout,*) ' Inverse barometer added to OBC ssh data' 116 ENDIF 119 117 IF( ( ln_apr_obc ) .AND. .NOT. lk_dynspg_ts ) & 120 118 CALL ctl_stop( 'sbc_apr: use inverse barometer ssh at open boundary ONLY possible with time-splitting' ) -
branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/sbctide.F90
r3294 r3583 14 14 USE daymod 15 15 USE dynspg_oce 16 USE tide _mod16 USE tideini 17 17 USE iom 18 18 … … 21 21 22 22 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: pot_astro 23 LOGICAL, PUBLIC :: ln_tide_pot = .false. 23 24 24 #if defined key_tide 25 25 26 26 LOGICAL, PUBLIC, PARAMETER :: lk_tide = .TRUE. 27 28 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:) :: omega_tide29 30 REAL(wp), ALLOCATABLE, DIMENSION(:) :: &31 v0tide, &32 utide, &33 ftide34 35 27 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: amp_pot,phi_pot 36 37 INTEGER, PUBLIC :: nb_harmo38 INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:) :: ntide39 INTEGER, PUBLIC :: nn_tide, kt_tide40 41 28 !!--------------------------------------------------------------------------------- 42 29 !! OPA 9.0 , LODYC-IPSL (2003) … … 51 38 !! * Arguments 52 39 INTEGER, INTENT( in ) :: kt ! ocean time-step 53 !! * Local declarations54 INTEGER :: jk,ji55 CHARACTER(LEN=4), DIMENSION(jpmax_harmo) :: clname56 40 !!---------------------------------------------------------------------- 57 41 58 NAMELIST/nam_tide/ln_tide_pot,nb_harmo,clname,nn_tide42 IF ( kt == nit000 .AND. .NOT. lk_dynspg_ts ) CALL ctl_stop( 'STOP', 'sbc_tide : tidal potential use only with time splitting' ) 59 43 60 IF ( kt == nit000 ) THEN 44 IF ( nsec_day == NINT(0.5 * rdttra(1)) ) THEN 45 ! 46 kt_tide = kt 61 47 62 IF( .NOT. lk_dynspg_ts ) CALL ctl_stop( 'STOP', 'sbc_tide : tidal potential use only with time splitting' ) 48 IF(lwp) THEN 49 WRITE(numout,*) 50 WRITE(numout,*) 'sbc_tide : (re)Initialization of the tidal potential at kt=',kt 51 WRITE(numout,*) '~~~~~~~ ' 52 ENDIF 63 53 64 ! Read Namelist nam_tide 54 IF(lwp) THEN 55 IF ( kt == nit000 ) WRITE(numout,*) 'Apply astronomical potential : ln_tide_pot =', ln_tide_pot 56 CALL flush(numout) 57 ENDIF 65 58 66 nn_tide=INT(rday/rdt) 59 IF ( kt == nit000 ) ALLOCATE(amp_pot(jpi,jpj,nb_harmo)) 60 IF ( kt == nit000 ) ALLOCATE(phi_pot(jpi,jpj,nb_harmo)) 61 IF ( kt == nit000 ) ALLOCATE(pot_astro(jpi,jpj)) 67 62 68 CALL tide_init_Wave 63 amp_pot(:,:,:) = 0.e0 64 phi_pot(:,:,:) = 0.e0 65 pot_astro(:,:) = 0.e0 69 66 70 REWIND ( numnam ) 71 READ ( numnam, nam_tide ) 72 73 IF(lwp) THEN 74 WRITE(numout,*) 75 WRITE(numout,*) 'sbc_tide : Initialization of the tidal components' 76 WRITE(numout,*) '~~~~~~~ ' 67 IF ( ln_tide_pot ) CALL tide_init_potential 68 ! 77 69 ENDIF 78 79 IF(lwp) THEN80 WRITE(numout,*) ' Namelist nam_tide'81 WRITE(numout,*) ' Apply astronomical potential : ln_tide_pot =', ln_tide_pot82 WRITE(numout,*) ' nb_harmo = ', nb_harmo83 CALL flush(numout)84 ENDIF85 86 ALLOCATE(ntide (nb_harmo))87 DO jk=1,nb_harmo88 DO ji=1,jpmax_harmo89 IF (TRIM(clname(jk)) .eq. Wave(ji)%cname_tide) THEN90 ntide(jk) = ji91 EXIT92 END IF93 END DO94 END DO95 ALLOCATE(omega_tide(nb_harmo))96 ALLOCATE(v0tide (nb_harmo))97 ALLOCATE(utide (nb_harmo))98 ALLOCATE(ftide (nb_harmo))99 ALLOCATE(amp_pot(jpi,jpj,nb_harmo))100 ALLOCATE(phi_pot(jpi,jpj,nb_harmo))101 ALLOCATE(pot_astro(jpi,jpj))102 ENDIF103 104 IF ( MOD( kt - 1, nn_tide ) == 0 ) THEN105 kt_tide = kt106 CALL tide_harmo(omega_tide, v0tide, utide, ftide, ntide, nb_harmo)107 ENDIF108 109 amp_pot(:,:,:) = 0.e0110 phi_pot(:,:,:) = 0.e0111 pot_astro(:,:) = 0.e0112 113 IF (ln_tide_pot ) CALL tide_init_potential114 70 115 71 END SUBROUTINE sbc_tide -
branches/2012/dev_MERCATOR_2012_rev3555/NEMOGCM/NEMO/OPA_SRC/SBC/updtide.F90
r3294 r3583 13 13 USE sbctide 14 14 USE dynspg_oce 15 USE tideini, ONLY: ln_tide_ramp, rdttideramp 15 16 16 17 IMPLICIT NONE … … 33 34 INTEGER, INTENT( in ) :: kt,kit ! ocean time-step index 34 35 INTEGER :: ji,jj,jk 36 REAL (wp) :: zramp 35 37 REAL (wp), DIMENSION(nb_harmo) :: zwt 36 !...............................................................................37 ! Potentiel astronomique38 38 !............................................................................... 39 39 40 40 pot_astro(:,:)=0.e0 41 zramp = 1.e0 41 42 42 43 IF (lk_dynspg_ts) THEN 43 44 zwt(:) = omega_tide(:)* ((kt-kt_tide)*rdt + kit*(rdt/REAL(nn_baro,wp))) 45 IF (ln_tide_ramp) THEN 46 zramp = MIN(MAX( ((kt-nit000)*rdt + kit*(rdt/REAL(nn_baro,wp)))/(rdttideramp*rday),0.),1.) 47 ENDIF 44 48 ELSE 45 49 zwt(:) = omega_tide(:)*(kt-kt_tide)*rdt 50 IF (ln_tide_ramp) THEN 51 zramp = MIN(MAX( ((kt-nit000)*rdt)/(rdttideramp*rday),0.),1.) 52 ENDIF 46 53 ENDIF 47 54 … … 49 56 do ji=1,jpi 50 57 do jj=1,jpj 51 pot_astro(ji,jj)=pot_astro(ji,jj) + (amp_pot(ji,jj,jk)*COS(zwt(jk)+phi_pot(ji,jj,jk)))58 pot_astro(ji,jj)=pot_astro(ji,jj) + zramp*(amp_pot(ji,jj,jk)*COS(zwt(jk)+phi_pot(ji,jj,jk))) 52 59 enddo 53 60 enddo
Note: See TracChangeset
for help on using the changeset viewer.