Changeset 791 for branches/dev_001_GM/NEMO/OPA_SRC/TRA/traadv.F90
- Timestamp:
- 2008-01-12T21:33:34+01:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_001_GM/NEMO/OPA_SRC/TRA/traadv.F90
r786 r791 4 4 !! Ocean active tracers: advection trend 5 5 !!============================================================================== 6 !! History : 9.0 ! 05-11 (G. Madec) Original code 6 !! History : 1.0 ! 2005-11 (G. Madec) Original code 7 !! 2.4 ! 2008-01 (G. Madec) merge TRC-TRA + switch from velocity to transport 7 8 !!---------------------------------------------------------------------- 8 9 … … 23 24 USE ldftra_oce ! lateral diffusion coefficient on tracers 24 25 USE in_out_manager ! I/O manager 25 ! USE prtctl ! Print control26 26 27 27 IMPLICIT NONE … … 59 59 !! ** Method : - Update (ua,va) with the advection term following nadv 60 60 !!---------------------------------------------------------------------- 61 #if ( defined key_trabbl_adv || defined key_traldf_eiv ) 62 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zun, zvn, zwn ! effective velocity 63 #else 64 USE oce, ONLY : zun => un ! the effective velocity is the 65 USE oce, ONLY : zvn => vn ! Eulerian velocity 66 USE oce, ONLY : zwn => wn ! 67 #endif 61 INTEGER, INTENT( in ) :: kt ! ocean time-step index 68 62 !! 69 INTEGER, INTENT( in ) :: kt ! ocean time-step index 63 INTEGER :: jk ! dummy loop index 64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zun, zvn, zwn ! effective transports 70 65 !!---------------------------------------------------------------------- 71 66 72 67 IF( kt == nit000 ) CALL tra_adv_ctl ! initialisation & control of options 73 68 69 70 ! ! effective transport 71 DO jk = 1, jpkm1 74 72 #if defined key_trabbl_adv 75 zun(:,:,:) = un(:,:,:) - u_bbl(:,:,:) ! add the bbl velocity 76 zvn(:,:,:) = vn(:,:,:) - v_bbl(:,:,:) 77 zwn(:,:,:) = wn(:,:,:) + w_bbl(:,:,:) 73 ! ! eulerian + bbl transport 74 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * ( un(:,:,jk) - u_bbl(:,:,jk) ) 75 zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * ( vn(:,:,jk) - v_bbl(:,:,jk) ) 76 zwn(:,:,jk) = e1t(:,:) * e2t(:,:) * ( wn(:,:,jk) + w_bbl(:,:,jk) ) 77 #else 78 ! ! eulerian transport only 79 zun(:,:,jk) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk) 80 zvn(:,:,jk) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk) 81 zwn(:,:,jk) = e1t(:,:) * e2t(:,:) * wn(:,:,jk) 78 82 #endif 79 IF( lk_traldf_eiv ) THEN ! commpute and add the eiv velocity 80 IF( .NOT. lk_trabbl_adv ) THEN 81 zun(:,:,:) = un(:,:,:) 82 zvn(:,:,:) = vn(:,:,:) 83 zwn(:,:,:) = wn(:,:,:) 84 ENDIF 85 CALL tra_adv_eiv( kt, zun, zvn, zwn ) 86 ENDIF 83 END DO 84 zwn(:,:,jpk) = 0.e0 ! no transport trough the bottom 85 86 ! ! add the eiv transport (if necessary) 87 IF( lk_traldf_eiv ) CALL tra_adv_eiv( kt, zun, zvn, zwn ) 88 87 89 88 90 SELECT CASE ( nadv ) ! compute advection trend and add it to general trend 89 CASE ( 0 ) ; CALL tra_adv_cen2 ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! 2nd order centered 90 CALL tra_adv_cen2 ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! 2nd order centered 91 ! CASE ( 1 ) ; CALL tra_adv_cen2_jki( kt, zun, zvn, zwn ) ! 2nd order centered scheme 91 ! 92 CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! 2nd order centered 93 CALL tra_adv_cen2 ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! on T & S 94 ! 92 95 CASE ( 2 ) ; CALL tra_adv_tvd ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! TVD scheme 93 CALL tra_adv_tvd ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! TVD scheme 96 CALL tra_adv_tvd ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! on T & S 97 ! 94 98 CASE ( 3 ) ; CALL tra_adv_muscl ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb , ta ) ! MUSCL scheme 95 CALL tra_adv_muscl ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb , sa ) ! MUSCL scheme 99 CALL tra_adv_muscl ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb , sa ) ! on T & S 100 ! 96 101 CASE ( 4 ) ; CALL tra_adv_muscl2 ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! MUSCL2 scheme 97 CALL tra_adv_muscl2 ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! MUSCL2 scheme 102 CALL tra_adv_muscl2 ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! on T & S 103 ! 98 104 CASE ( 5 ) ; CALL tra_adv_ubs ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! UBS scheme 99 CALL tra_adv_ubs ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! UBS scheme 105 CALL tra_adv_ubs ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! on T & S 106 ! 100 107 CASE ( 6 ) ; CALL tra_adv_qck ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! QUICKEST scheme 101 CALL tra_adv_qck ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! QUICKEST scheme108 CALL tra_adv_qck ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! on T & S 102 109 ! 103 CASE (-1 ) ! esopa: test all possibility with control print110 CASE (-1 ) ! NEMO debug : test all the schemes at once 104 111 CALL tra_adv_cen2 ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! 2nd order centered 105 CALL tra_adv_cen2 ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! 2nd order centered112 CALL tra_adv_cen2 ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) 106 113 CALL tra_adv_tvd ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! TVD scheme 107 CALL tra_adv_tvd ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! TVD scheme114 CALL tra_adv_tvd ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) 108 115 CALL tra_adv_muscl ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb , ta ) ! MUSCL scheme 109 CALL tra_adv_muscl ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb , sa ) ! MUSCL scheme116 CALL tra_adv_muscl ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb , sa ) 110 117 CALL tra_adv_muscl2 ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! MUSCL2 scheme 111 CALL tra_adv_muscl2 ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! MUSCL2 scheme118 CALL tra_adv_muscl2 ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) 112 119 CALL tra_adv_ubs ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! UBS scheme 113 CALL tra_adv_ubs ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! UBS scheme120 CALL tra_adv_ubs ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) 114 121 CALL tra_adv_qck ( kt, 'TRA', jp_tem, zun, zvn, zwn, tb, tn, ta ) ! QUICKEST scheme 115 CALL tra_adv_qck ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) ! QUICKEST scheme122 CALL tra_adv_qck ( kt, 'TRA', jp_sal, zun, zvn, zwn, sb, sn, sa ) 116 123 END SELECT 117 124 ! … … 127 134 !!---------------------------------------------------------------------- 128 135 INTEGER :: ioptio 129 136 !! 130 137 NAMELIST/nam_traadv/ ln_traadv_cen2 , ln_traadv_tvd, & 131 138 & ln_traadv_muscl, ln_traadv_muscl2, & … … 163 170 & CALL ctl_stop( 'cross-land advection only with 2nd order advection scheme' ) 164 171 165 ! ! Set nadv 166 IF( ln_traadv_cen2 ) nadv = 0 167 #if defined key_mpp_omp 172 ! ! Set nadv 168 173 IF( ln_traadv_cen2 ) nadv = 1 169 #endif170 174 IF( ln_traadv_tvd ) nadv = 2 171 175 IF( ln_traadv_muscl ) nadv = 3 … … 175 179 IF( lk_esopa ) nadv = -1 176 180 177 IF(lwp) THEN ! Print the choice181 IF(lwp) THEN ! Print the choice 178 182 WRITE(numout,*) 179 IF( nadv == 0 ) WRITE(numout,*) ' 2nd order scheme is used' 180 IF( nadv == 1 ) WRITE(numout,*) ' 2nd order scheme is usedi, k-j-i case' 183 IF( nadv == 1 ) WRITE(numout,*) ' 2nd order scheme is used' 181 184 IF( nadv == 2 ) WRITE(numout,*) ' TVD scheme is used' 182 185 IF( nadv == 3 ) WRITE(numout,*) ' MUSCL scheme is used' … … 185 188 IF( nadv == 6 ) WRITE(numout,*) ' PPM scheme is used' 186 189 IF( nadv == 7 ) WRITE(numout,*) ' QUICKEST scheme is used' 187 IF( nadv == -1 ) WRITE(numout,*) ' esopa test: use all advection scheme'190 IF( nadv == -1 ) WRITE(numout,*) ' NEMO debug: test all advection scheme at once' 188 191 ENDIF 189 192 !
Note: See TracChangeset
for help on using the changeset viewer.