Changeset 3666 for branches/2012/dev_LOCEAN_UKMO_CMCC_INGV_2012/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90
- Timestamp:
- 2012-11-26T15:22:04+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_LOCEAN_UKMO_CMCC_INGV_2012/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_muscl.F90
r3294 r3666 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 needed 10 11 !!---------------------------------------------------------------------- 11 12 … … 18 19 USE trdmod_oce ! tracers trends 19 20 USE trdtra ! tracers trends 21 USE eosbn2 ! equation of state 20 22 USE in_out_manager ! I/O manager 21 23 USE dynspg_oce ! choice/control of key cpp for surface pressure gradient 22 24 USE trabbl ! tracers: bottom boundary layer 25 USE sbcrnf ! river runoffs 23 26 USE lib_mpp ! distribued memory computing 24 27 USE lbclnk ! ocean lateral boundary condition (or mpp link) … … 27 30 USE wrk_nemo ! Memory Allocation 28 31 USE timing ! Timing 32 USE eosbn2 ! equation of state 33 USE sbcrnf ! river runoffs 29 34 30 35 IMPLICIT NONE … … 35 40 LOGICAL :: l_trd ! flag to compute trends 36 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: upsmsk !: mixed upstream/centered scheme near some straits 43 ! ! and in closed seas (orca 2 and 4 configurations) 37 44 !! * Substitutions 38 45 # include "domzgr_substitute.h90" … … 78 85 REAL(wp) :: ztra, zbtr, zdt, zalpha ! - - 79 86 REAL(wp), POINTER, DIMENSION(:,:,:) :: zslpx, zslpy 87 INTEGER :: ierr 88 REAL(wp) :: zice ! temporary scalars 89 REAL(wp), POINTER, DIMENSION(:,: ) :: ztfreez 90 REAL(wp), POINTER, DIMENSION(:,:,:) :: zind 80 91 !!---------------------------------------------------------------------- 81 92 ! … … 83 94 ! 84 95 CALL wrk_alloc( jpi, jpj, jpk, zslpx, zslpy ) 96 CALL wrk_alloc( jpi, jpj, ztfreez ) 97 CALL wrk_alloc( jpi, jpj, jpk, zind ) 85 98 ! 86 99 … … 89 102 IF(lwp) WRITE(numout,*) 'tra_adv : MUSCL advection scheme on ', cdtype 90 103 IF(lwp) WRITE(numout,*) '~~~~~~~' 104 IF(lwp) WRITE(numout,*) 105 ! 106 ! 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') 110 ENDIF 111 ! 112 upsmsk(:,:) = 0._wp ! not upstream by default 91 113 ! 92 114 l_trd = .FALSE. … … 94 116 ENDIF 95 117 118 ! 119 ! Upstream / centered scheme indicator 120 ! ------------------------------------ 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 96 138 ! ! =========== 97 139 DO jn = 1, kjpt ! tracer loop … … 148 190 zalpha = 0.5 - z0u 149 191 zu = z0u - 0.5 * pun(ji,jj,jk) * zdt / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 150 zzwx = ptb(ji+1,jj,jk,jn) + z u * zslpx(ji+1,jj,jk)151 zzwy = ptb(ji ,jj,jk,jn) + z u * zslpx(ji ,jj,jk)192 zzwx = ptb(ji+1,jj,jk,jn) + zind(ji,jj,jk) * (zu * zslpx(ji+1,jj,jk)) 193 zzwy = ptb(ji ,jj,jk,jn) + zind(ji,jj,jk) * (zu * zslpx(ji ,jj,jk)) 152 194 zwx(ji,jj,jk) = pun(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 153 195 ! … … 155 197 zalpha = 0.5 - z0v 156 198 zv = z0v - 0.5 * pvn(ji,jj,jk) * zdt / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 157 zzwx = ptb(ji,jj+1,jk,jn) + z v * zslpy(ji,jj+1,jk)158 zzwy = ptb(ji,jj ,jk,jn) + z v * zslpy(ji,jj ,jk)199 zzwx = ptb(ji,jj+1,jk,jn) + zind(ji,jj,jk) * (zv * zslpy(ji,jj+1,jk)) 200 zzwy = ptb(ji,jj ,jk,jn) + zind(ji,jj,jk) * (zv * zslpy(ji,jj ,jk)) 159 201 zwy(ji,jj,jk) = pvn(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 160 202 END DO … … 230 272 zalpha = 0.5 + z0w 231 273 zw = z0w - 0.5 * pwn(ji,jj,jk+1) * zdt * zbtr 232 zzwx = ptb(ji,jj,jk+1,jn) + z w * zslpx(ji,jj,jk+1)233 zzwy = ptb(ji,jj,jk ,jn) + z w * zslpx(ji,jj,jk)274 zzwx = ptb(ji,jj,jk+1,jn) + zind(ji,jj,jk) * (zw * zslpx(ji,jj,jk+1)) 275 zzwy = ptb(ji,jj,jk ,jn) + zind(ji,jj,jk) * (zw * zslpx(ji,jj,jk )) 234 276 zwx(ji,jj,jk+1) = pwn(ji,jj,jk+1) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 235 277 END DO … … 255 297 ! 256 298 CALL wrk_dealloc( jpi, jpj, jpk, zslpx, zslpy ) 299 CALL wrk_dealloc( jpi, jpj, ztfreez ) 300 CALL wrk_dealloc( jpi, jpj, jpk, zind ) 257 301 ! 258 302 IF( nn_timing == 1 ) CALL timing_stop('tra_adv_muscl')
Note: See TracChangeset
for help on using the changeset viewer.