Changeset 2977 for branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/TOP_SRC/TRP
- Timestamp:
- 2011-10-22T15:46:41+02:00 (13 years ago)
- Location:
- branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/TOP_SRC/TRP
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/TOP_SRC/TRP/trcldf.F90
r2715 r2977 18 18 USE trc ! ocean passive tracers variables 19 19 USE trcnam_trp ! passive tracers transport namelist variables 20 USE ldftra_oce ! lateral diffusion coefficient on tracers21 20 USE ldfslp ! ??? 22 21 USE traldf_bilapg ! lateral mixing (tra_ldf_bilapg routine) … … 33 32 PUBLIC trc_ldf ! called by step.F90 34 33 ! !!: ** lateral mixing namelist (nam_trcldf) ** 35 INTEGER :: nldf = 0 ! type of lateral diffusion used defined from ln_trcldf_... namlist logicals) 34 REAL(wp) :: rldf_rat ! ratio between active and passive tracers diffusive coefficient 35 INTEGER :: nldf = 0 ! type of lateral diffusion used defined from ln_trcldf_... namlist logicals) 36 36 !! * Substitutions 37 37 # include "domzgr_substitute.h90" … … 61 61 IF( kt == nit000 ) CALL ldf_ctl ! initialisation & control of options 62 62 63 rldf = rldf_rat 64 63 65 IF( l_trdtrc ) THEN 64 66 ALLOCATE( ztrtrd(jpi,jpj,jpk,jptra) ) ! temporary save of trends … … 67 69 68 70 SELECT CASE ( nldf ) ! compute lateral mixing trend and add it to the general trend 69 CASE ( 0 ) ; CALL tra_ldf_lap ( kt, 'TRC', gtru, gtrv, trb, tra, jptra ) ! iso-level laplacian70 CASE ( 1 ) ; CALL tra_ldf_iso ( kt, 'TRC', gtru, gtrv, trb, tra, jptra, rn_aht b_0 ) ! rotated laplacian71 CASE ( 2 ) ; CALL tra_ldf_bilap ( kt, 'TRC', gtru, gtrv, trb, tra, jptra ) ! iso-level bilaplacian72 CASE ( 3 ) ; CALL tra_ldf_bilapg( kt, 'TRC', trb, tra, jptra ) ! s-coord. horizontal bilaplacian71 CASE ( 0 ) ; CALL tra_ldf_lap ( kt, 'TRC', gtru, gtrv, trb, tra, jptra ) ! iso-level laplacian 72 CASE ( 1 ) ; CALL tra_ldf_iso ( kt, 'TRC', gtru, gtrv, trb, tra, jptra, rn_ahtrb_0 ) ! rotated laplacian 73 CASE ( 2 ) ; CALL tra_ldf_bilap ( kt, 'TRC', gtru, gtrv, trb, tra, jptra ) ! iso-level bilaplacian 74 CASE ( 3 ) ; CALL tra_ldf_bilapg( kt, 'TRC', trb, tra, jptra ) ! s-coord. horizontal bilaplacian 73 75 ! 74 76 CASE ( -1 ) ! esopa: test all possibility with control print 75 CALL tra_ldf_lap ( kt, 'TRC', gtru, gtrv, trb, tra, jptra )77 CALL tra_ldf_lap ( kt, 'TRC', gtru, gtrv, trb, tra, jptra ) 76 78 WRITE(charout, FMT="('ldf0 ')") ; CALL prt_ctl_trc_info(charout) 77 79 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 78 CALL tra_ldf_iso ( kt, 'TRC', gtru, gtrv, trb, tra, jptra, rn_aht b_0 )80 CALL tra_ldf_iso ( kt, 'TRC', gtru, gtrv, trb, tra, jptra, rn_ahtrb_0 ) 79 81 WRITE(charout, FMT="('ldf1 ')") ; CALL prt_ctl_trc_info(charout) 80 82 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 81 CALL tra_ldf_bilap ( kt, 'TRC', gtru, gtrv, trb, tra, jptra )83 CALL tra_ldf_bilap ( kt, 'TRC', gtru, gtrv, trb, tra, jptra ) 82 84 WRITE(charout, FMT="('ldf2 ')") ; CALL prt_ctl_trc_info(charout) 83 85 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 84 CALL tra_ldf_bilapg( kt, 'TRC', trb, tra, jptra )86 CALL tra_ldf_bilapg( kt, 'TRC', trb, tra, jptra ) 85 87 WRITE(charout, FMT="('ldf3 ')") ; CALL prt_ctl_trc_info(charout) 86 88 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) … … 119 121 INTEGER :: ioptio, ierr ! temporary integers 120 122 !!---------------------------------------------------------------------- 123 124 rldf_rat = rn_ahtrc_0 / rn_aht_0 121 125 122 126 ! Define the lateral mixing oparator for tracers … … 206 210 ENDIF 207 211 212 IF( ln_trcldf_bilap ) THEN 213 IF(lwp) WRITE(numout,*) ' biharmonic tracer diffusion' 214 IF( rn_ahtrc_0 > 0 .AND. .NOT. lk_esopa ) CALL ctl_stop( 'The horizontal diffusivity coef. rn_ahtrc_0 must be negative' ) 215 ELSE 216 IF(lwp) WRITE(numout,*) ' harmonic tracer diffusion (default)' 217 IF( rn_ahtrc_0 < 0 .AND. .NOT. lk_esopa ) CALL ctl_stop('The horizontal diffusivity coef. rn_ahtrc_0 must be positive' ) 218 ENDIF 219 220 ! ratio between active and passive tracers diffusive coef. 221 rldf_rat = rn_ahtrc_0 / rn_aht_0 222 IF( rldf_rat < 0 ) THEN 223 IF( .NOT.lk_offline ) THEN 224 CALL ctl_stop( 'Choose the same type of diffusive scheme both for active & passive tracers' ) 225 ELSE 226 CALL ctl_stop( 'Change the sign of rn_aht_0 in namelist to -/+1' ) 227 ENDIF 228 ENDIF 208 229 ! 209 230 END SUBROUTINE ldf_ctl -
branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/TOP_SRC/TRP/trcnam_trp.F90
r2528 r2977 36 36 LOGICAL , PUBLIC :: ln_trcldf_hor = .FALSE. !: horizontal (geopotential) direction 37 37 LOGICAL , PUBLIC :: ln_trcldf_iso = .TRUE. !: iso-neutral direction 38 REAL(wp), PUBLIC :: rn_ahtrc_0 !: diffusivity coefficient for passive tracer (m2/s) 38 39 REAL(wp), PUBLIC :: rn_ahtrb_0 !: background diffusivity coefficient for passive tracer (m2/s) 39 40 … … 76 77 NAMELIST/namtrc_ldf/ ln_trcldf_diff , ln_trcldf_lap , & 77 78 & ln_trcldf_bilap, ln_trcldf_level, & 78 & ln_trcldf_hor , ln_trcldf_iso , rn_ahtr b_079 & ln_trcldf_hor , ln_trcldf_iso , rn_ahtrc_0, rn_ahtrb_0 79 80 NAMELIST/namtrc_zdf/ ln_trczdf_exp , nn_trczdf_exp 80 81 NAMELIST/namtrc_rad/ ln_trcrad … … 119 120 WRITE(numout,*) ' horizontal (geopotential) ln_trcldf_hor = ', ln_trcldf_hor 120 121 WRITE(numout,*) ' iso-neutral ln_trcldf_iso = ', ln_trcldf_iso 122 WRITE(numout,*) ' diffusivity coefficient rn_ahtrc_0 = ', rn_ahtrc_0 121 123 WRITE(numout,*) ' background hor. diffusivity rn_ahtrb_0 = ', rn_ahtrb_0 122 124 ENDIF -
branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90
r2715 r2977 104 104 105 105 ! Local declarations 106 INTEGER :: 107 REAL(wp) :: z volk, ztrcorb, ztrmasb ! temporary scalars106 INTEGER :: ji, jj, jk, jn ! dummy loop indices 107 REAL(wp) :: ztrcorb, ztrmasb ! temporary scalars 108 108 REAL(wp) :: zcoef, ztrcorn, ztrmasn ! " " 109 109 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrtrdb ! workspace arrays … … 137 137 DO jj = 1, jpj 138 138 DO ji = 1, jpi 139 zvolk = cvol(ji,jj,jk) 140 # if defined key_degrad 141 zvolk = zvolk * facvol(ji,jj,jk) 142 # endif 143 ztrcorb = ztrcorb + MIN( 0., ptrb(ji,jj,jk,jn) ) * zvolk 144 ztrcorn = ztrcorn + MIN( 0., ptrn(ji,jj,jk,jn) ) * zvolk 139 ztrcorb = ztrcorb + MIN( 0., ptrb(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 140 ztrcorn = ztrcorn + MIN( 0., ptrn(ji,jj,jk,jn) ) * cvol(ji,jj,jk) 145 141 146 142 ptrb(ji,jj,jk,jn) = MAX( 0., ptrb(ji,jj,jk,jn) ) 147 143 ptrn(ji,jj,jk,jn) = MAX( 0., ptrn(ji,jj,jk,jn) ) 148 144 149 ztrmasb = ztrmasb + ptrb(ji,jj,jk,jn) * zvolk150 ztrmasn = ztrmasn + ptrn(ji,jj,jk,jn) * zvolk145 ztrmasb = ztrmasb + ptrb(ji,jj,jk,jn) * cvol(ji,jj,jk) 146 ztrmasn = ztrmasn + ptrn(ji,jj,jk,jn) * cvol(ji,jj,jk) 151 147 END DO 152 148 END DO
Note: See TracChangeset
for help on using the changeset viewer.