Changeset 3671
- Timestamp:
- 2012-11-27T13:49:55+01:00 (11 years ago)
- Location:
- branches/2012/dev_LOCEAN_UKMO_CMCC_INGV_2012/NEMOGCM/NEMO/OPA_SRC/TRA
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_LOCEAN_UKMO_CMCC_INGV_2012/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r3294 r3671 45 45 LOGICAL :: ln_traadv_qck = .FALSE. ! QUICKEST scheme flag 46 46 47 47 48 INTEGER :: nadv ! choice of the type of advection scheme 48 49 … … 152 153 NAMELIST/namtra_adv/ ln_traadv_cen2 , ln_traadv_tvd, & 153 154 & ln_traadv_muscl, ln_traadv_muscl2, & 154 & ln_traadv_ubs , ln_traadv_qck 155 & ln_traadv_ubs , ln_traadv_qck, & 156 & ln_traadv_msc_ups 155 157 !!---------------------------------------------------------------------- 156 158 … … 169 171 WRITE(numout,*) ' UBS advection scheme ln_traadv_ubs = ', ln_traadv_ubs 170 172 WRITE(numout,*) ' QUICKEST advection scheme ln_traadv_qck = ', ln_traadv_qck 173 WRITE(numout,*) ' upstream scheme within muscl ln_traadv_msc_ups= ', ln_traadv_msc_ups 171 174 ENDIF 172 175 -
branches/2012/dev_LOCEAN_UKMO_CMCC_INGV_2012/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90
r3666 r3671 8 8 !! NEMO 1.0 ! 2002-06 (G. Madec) F90: Free form and module 9 9 !! 3.2 ! 2010-05 (C. Ethe, G. Madec) merge TRC-TRA + switch from velocity to transport 10 !! 3.4 ! 2012-06 (P. Oddo ) include the upstream where needed10 !! 3.4 ! 2012-06 (P. Oddo, M. Vichi) include the upstream where needed 11 11 !!---------------------------------------------------------------------- 12 12 … … 18 18 USE dom_oce ! ocean space and time domain 19 19 USE trdmod_oce ! tracers trends 20 USE trdtra ! tracers trends20 USE trdtra ! tracers trends 21 21 USE eosbn2 ! equation of state 22 22 USE in_out_manager ! I/O manager … … 38 38 PUBLIC tra_adv_muscl ! routine called by step.F90 39 39 40 LOGICAL :: l_trd ! flag to compute trends 40 LOGICAL :: l_trd ! flag to compute trends 41 LOGICAL, PUBLIC :: ln_traadv_msc_ups= .FALSE. ! use upstream scheme within muscl 41 42 42 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: upsmsk !: mixed upstream/centered scheme near some straits 43 44 ! ! and in closed seas (orca 2 and 4 configurations) 45 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: zind !: mixed upstream/centered index 44 46 !! * Substitutions 45 47 # include "domzgr_substitute.h90" … … 86 88 REAL(wp), POINTER, DIMENSION(:,:,:) :: zslpx, zslpy 87 89 INTEGER :: ierr 88 REAL(wp) :: zice ! temporary scalars89 REAL(wp), POINTER, DIMENSION(:,: ) :: ztfreez90 REAL(wp), POINTER, DIMENSION(:,:,:) :: zind91 90 !!---------------------------------------------------------------------- 92 91 ! … … 94 93 ! 95 94 CALL wrk_alloc( jpi, jpj, jpk, zslpx, zslpy ) 96 CALL wrk_alloc( jpi, jpj, ztfreez )97 CALL wrk_alloc( jpi, jpj, jpk, zind )98 95 ! 99 96 … … 101 98 IF(lwp) WRITE(numout,*) 102 99 IF(lwp) WRITE(numout,*) 'tra_adv : MUSCL advection scheme on ', cdtype 100 IF(lwp) WRITE(numout,*) ' : xed up-stream ' , ln_traadv_msc_ups 103 101 IF(lwp) WRITE(numout,*) '~~~~~~~' 104 102 IF(lwp) WRITE(numout,*) 105 103 ! 106 104 ! 107 IF (.not. ALLOCATED(upsmsk))THEN 108 ALLOCATE( upsmsk(jpi,jpj), STAT=ierr ) 109 IF( ierr /= 0 ) CALL ctl_stop('STOP', 'tra_adv_muscl: unable to allocate array') 105 IF(ln_traadv_msc_ups) THEN 106 IF (.not. ALLOCATED(upsmsk))THEN 107 ALLOCATE( upsmsk(jpi,jpj), STAT=ierr ) 108 IF( ierr /= 0 ) CALL ctl_stop('STOP', 'tra_adv_muscl: unable to allocate upsmsk array') 109 ENDIF 110 upsmsk(:,:) = 0._wp ! not upstream by default 110 111 ENDIF 111 ! 112 upsmsk(:,:) = 0._wp ! not upstream by default 112 113 IF (.not. ALLOCATED(zind))THEN 114 ALLOCATE( zind(jpi,jpj,jpk), STAT=ierr ) 115 IF( ierr /= 0 ) CALL ctl_stop('STOP', 'tra_adv_muscl: unable to allocate zind array') 116 ENDIF 117 ! 113 118 ! 114 119 l_trd = .FALSE. 115 120 IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) l_trd = .TRUE. 116 ENDIF117 121 118 122 ! 119 123 ! Upstream / centered scheme indicator 120 124 ! ------------------------------------ 121 ztfreez(:,:) = tfreez( tsn(:,:,1,jp_sal) ) 122 DO jk = 1, jpk 123 DO jj = 1, jpj 124 DO ji = 1, jpi 125 ! ! below ice covered area (if tn < "freezing"+0.1 ) 126 IF( tsn(ji,jj,jk,jp_tem) <= ztfreez(ji,jj) + 0.1_wp ) THEN ; zice = 1.e0 127 ELSE ; zice = 0.e0 128 ENDIF 129 zind(ji,jj,jk) = MAX ( & 130 rnfmsk(ji,jj) * rnfmsk_z(jk), & ! near runoff mouths (& closed sea outflows) 131 upsmsk(ji,jj) , & ! some of some straits 132 zice & ! below ice covered area (if tn < "freezing"+0.1 ) 133 & ) * tmask(ji,jj,jk) 134 zind(ji,jj,jk) = 1 - zind(ji,jj,jk) 135 END DO 136 END DO 137 END DO 125 zind(:,:,:) = 1._wp ! set equal to 0 where up-stream is needed 126 127 IF(ln_traadv_msc_ups) THEN 128 DO jk = 1, jpk 129 DO jj = 1, jpj 130 DO ji = 1, jpi 131 zind(ji,jj,jk) = 1 - MAX ( & 132 rnfmsk(ji,jj) * rnfmsk_z(jk), & ! near runoff mouths (& closed sea outflows) 133 upsmsk(ji,jj) ) * tmask(ji,jj,jk) ! some of some straits 134 END DO 135 END DO 136 END DO 137 ENDIF 138 ! 139 ENDIF ! end kit000 138 140 ! ! =========== 139 141 DO jn = 1, kjpt ! tracer loop … … 297 299 ! 298 300 CALL wrk_dealloc( jpi, jpj, jpk, zslpx, zslpy ) 299 CALL wrk_dealloc( jpi, jpj, ztfreez )300 CALL wrk_dealloc( jpi, jpj, jpk, zind )301 301 ! 302 302 IF( nn_timing == 1 ) CALL timing_stop('tra_adv_muscl')
Note: See TracChangeset
for help on using the changeset viewer.