Changeset 3327 for branches/2012/dev_r3309_LOCEAN12_Ediag
- Timestamp:
- 2012-03-14T16:09:33+01:00 (12 years ago)
- Location:
- branches/2012/dev_r3309_LOCEAN12_Ediag/NEMOGCM/NEMO/OPA_SRC/TRD
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_r3309_LOCEAN12_Ediag/NEMOGCM/NEMO/OPA_SRC/TRD/trdpen.F90
r3326 r3327 70 70 REAL(wp) , INTENT(in) :: pdt ! time step [s] 71 71 ! 72 INTEGER :: jk ! dummy loop indices 72 73 REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace 73 74 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpe ! 3D workspace … … 87 88 88 89 SELECT CASE ( ktrd ) 89 CASE ( jptra_xad ) ; CALL iom_put( "petrd_xad", z ke ) ! zonal advection90 CASE ( jptra_yad ) ; CALL iom_put( "petrd_yad", z ke ) ! merid. advection91 CASE ( jptra_zad ) ; CALL iom_put( "petrd_zad", z ke ) ! vertical advection90 CASE ( jptra_xad ) ; CALL iom_put( "petrd_xad", zpe ) ! zonal advection 91 CASE ( jptra_yad ) ; CALL iom_put( "petrd_yad", zpe ) ! merid. advection 92 CASE ( jptra_zad ) ; CALL iom_put( "petrd_zad", zpe ) ! vertical advection 92 93 IF( .NOT.lk_vvl ) THEN ! cst volume : adv flux through z=0 surface 93 94 CALL wrk_alloc( jpi, jpj, z2d ) 94 z2d(:,:) = wn(:,:,1) * ( drau_dt(:,:,1) * tsn(:,:,1,jp_tem) 95 z2d(:,:) = wn(:,:,1) * ( drau_dt(:,:,1) * tsn(:,:,1,jp_tem) & 95 96 & + drau_ds(:,:,1) * tsn(:,:,1,jp_sal) ) / fse3t(:,:,1) 96 97 CALL iom_put( "petrd_sad" , z2d ) … … 104 105 CASE ( jptra_npc ) ; CALL iom_put( "petrd_npc" , zpe ) ! non penetr convect adjustment 105 106 CASE ( jptra_nsr ) ; CALL iom_put( "petrd_for" , zpe ) ! surface forcing + runoff (ln_rnf=T) 106 CASE ( jptra_qsr ) ; CALL iom_put( "petrd_qsr" , z ke ) ! air-sea : penetrative sol radiat107 CASE ( jptra_bbc ) ; CALL iom_put( "petrd_bbc" , zke ) ! bottom bound cond (geoth flux)108 CASE ( jptra_atf ) ; CALL iom_put( "petrd_atf" , zke ) ! asselin time filter (last trend)107 CASE ( jptra_qsr ) ; CALL iom_put( "petrd_qsr" , zpe ) ! air-sea : penetrative sol radiat 108 CASE ( jptra_bbc ) ; CALL iom_put( "petrd_bbc" , zpe ) ! bottom bound cond (geoth flux) 109 CASE ( jptra_atf ) ; CALL iom_put( "petrd_atf" , zpe ) ! asselin time filter (last trend) 109 110 IF( .NOT.lk_vvl ) THEN ! cst volume : ssh term (otherwise include in e3t variation) 110 111 CALL wrk_alloc( jpi, jpj, z2d ) 111 z2d(:,:) = ( ssha(:,:) - sshb(:,:) ) &112 & * ( drau_dt(:,:,1) * tsn(:,:,1,jp_tem) 112 z2d(:,:) = ( ssha(:,:) - sshb(:,:) ) & 113 & * ( drau_dt(:,:,1) * tsn(:,:,1,jp_tem) & 113 114 & + drau_ds(:,:,1) * tsn(:,:,1,jp_sal) ) / ( fse3t(:,:,1) * pdt ) 114 115 CALL iom_put( "petrd_sad" , z2d ) … … 141 142 IF ( lk_vvl ) CALL ctl_stop('trd_pen_init : PE trends not coded for variable volume') 142 143 ! 143 r1_2_rau0 = 0.5_wp / rau0144 !145 144 END SUBROUTINE trd_pen_init 146 145 147 146 !!====================================================================== 148 END MODULE trd tra147 END MODULE trdpen -
branches/2012/dev_r3309_LOCEAN12_Ediag/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90
r3326 r3327 20 20 USE trd_oce ! trends: ocean variables 21 21 USE trdmod_trc ! ocean passive mixed layer tracers trends 22 USE trdglo ! trends:global domain averaged 22 USE trdglo ! trends: global domain averaged 23 USE trdpen ! trends: Potential ENergy 23 24 USE trdmld ! ocean active mixed layer tracers trends 24 25 USE ldftra_oce ! ocean active tracers lateral physics … … 94 95 IF( ctype == 'TRA' .AND. ktra == jp_tem ) THEN !== Temperature trend ==! 95 96 ! 96 IF( PRESENT( ptra ) ) THEN ! advection: transform flux into trend 97 SELECT CASE( ktrd ) 98 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd, pun, ptra, 'X', trdtx ) 99 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd, pun, ptra, 'Y', trdty ) 100 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd, pun, ptra, 'Z', trdt ) 101 END SELECT 102 ELSE ! other trends: 97 SELECT CASE( ktrd ) 98 ! ! advection: transform the advective flux into a trend 99 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd, pun, ptra, 'X', trdtx ) 100 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd, pun, ptra, 'Y', trdty ) 101 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd, pun, ptra, 'Z', trdt ) 102 CASE( jptra_bbc, & ! qsr, bbc: on temperature only, send to trd_tra_mng 103 & jptra_qsr ) ; ztrds(:,:,:) = 0._wp 104 CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 105 CASE DEFAULT ! other trends: masked trends 103 106 trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) ! mask & store 104 IF( ktrd == jptra_bbc .OR. ktrd == jptra_qsr ) THEN ! qsr, bbc: on temperature only 105 ztrds(:,:,:) = 0._wp 106 CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) ! send to trd_tra_mng 107 ENDIF 108 ENDIF 107 END SELECT 109 108 ! 110 109 ENDIF … … 112 111 IF( ctype == 'TRA' .AND. ktra == jp_sal ) THEN !== Salinity trends ==! 113 112 ! 114 IF( PRESENT( ptra ) ) THEN ! advection: transform the advective flux into a trend 115 SELECT CASE( ktrd ) ! and send T & S trends to trd_tra_mng 116 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'X' , ztrds ) 117 CALL trd_tra_mng( trdtx, ztrds, ktrd, kt ) 118 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Y' , ztrds ) 119 ; CALL trd_tra_mng( trdty, ztrds, ktrd, kt ) 120 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Z' , ztrds ) 121 CALL trd_tra_mng( trdt , ztrds, ktrd, kt ) 122 END SELECT 123 ELSE ! other trends: mask and send T & S trends to trd_tra_mng 113 SELECT CASE( ktrd ) 114 ! ! advection: transform the advective flux into a trend 115 ! ! and send T & S trends to trd_tra_mng 116 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'X' , ztrds ) 117 CALL trd_tra_mng( trdtx, ztrds, ktrd, kt ) 118 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Y' , ztrds ) 119 ; CALL trd_tra_mng( trdty, ztrds, ktrd, kt ) 120 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Z' , ztrds ) 121 CALL trd_tra_mng( trdt , ztrds, ktrd, kt ) 122 CASE( jptra_zdfp ) ! diagnose the "PURE" Kz trend (here: just before the swap) 123 ! ! iso-neutral diffusion case otherwise jptra_zdf is "PURE" 124 CALL wrk_alloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 124 125 ! 125 IF( ktrd == jptra_zdfp ) THEN ! diagnose the "PURE" Kz trend (here: just before the swap) 126 ! 127 IF( ln_traldf_iso ) THEN ! iso-neutral diffusion only otherwise jptra_zdf is "PURE" 128 ! 129 CALL wrk_alloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 130 ! 131 zwt(:,:, 1 ) = 0._wp ; zws(:,:, 1 ) = 0._wp ! vertical diffusive fluxes 132 zwt(:,:,jpk) = 0._wp ; zws(:,:,jpk) = 0._wp 133 DO jk = 2, jpk 134 zwt(:,:,jk) = avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 135 zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk) 136 END DO 137 ! 138 ztrdt(:,:,jpk) = 0._wp ; ztrds(:,:,jpk) = 0._wp 139 DO jk = 1, jpkm1 140 ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk) 141 ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk) 142 END DO 143 CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt ) 144 ! 145 CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 146 ! 147 ENDIF 148 ! 149 ELSE ! 150 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 151 CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 152 ENDIF 126 zwt(:,:, 1 ) = 0._wp ; zws(:,:, 1 ) = 0._wp ! vertical diffusive fluxes 127 zwt(:,:,jpk) = 0._wp ; zws(:,:,jpk) = 0._wp 128 DO jk = 2, jpk 129 zwt(:,:,jk) = avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk) 130 zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk) 131 END DO 132 ! 133 ztrdt(:,:,jpk) = 0._wp ; ztrds(:,:,jpk) = 0._wp 134 DO jk = 1, jpkm1 135 ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk) 136 ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk) 137 END DO 138 CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt ) 139 ! 140 CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 141 ! 142 CASE DEFAULT ! other trends: mask and send T & S trends to trd_tra_mng 143 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 144 CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 145 END SELECT 153 146 ENDIF 154 147 155 148 IF( ctype == 'TRC' ) THEN !== passive tracer trend ==! 156 149 ! 157 IF( PRESENT( ptra ) ) THEN ! advection: transform flux into a masked trend 158 SELECT CASE( ktrd ) 159 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'X', ztrds ) 160 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Y', ztrds ) 161 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds ) 162 END SELECT 163 ELSE ! other trends: masked trend 164 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 165 END IF 166 ! 167 CALL trd_mod_trc( ztrds, ktra, ktrd, kt ) ! send trend to trd_mod_trc 150 SELECT CASE( ktrd ) 151 ! ! advection: transform the advective flux into a masked trend 152 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'X', ztrds ) 153 CASE( jptra_yad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Y', ztrds ) 154 CASE( jptra_zad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds ) 155 CASE DEFAULT ! other trends: just masked 156 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 157 END SELECT 158 ! ! send trend to trd_mod_trc 159 CALL trd_mod_trc( ztrds, ktra, ktrd, kt ) 168 160 ! 169 161 ENDIF … … 243 235 ! ! Integral Constraints Properties for tracers trends !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 244 236 IF( ln_glo_trd ) CALL trd_glo( ptrdx, ptrdy, ktrd, 'TRA', kt ) 237 238 ! ! Potential ENergy trends 239 IF( ln_glo_trd ) CALL trd_pen( ptrdx, ptrdy, ktrd, kt, r2dt ) 245 240 246 241 ! ! Mixed layer trends for active tracers
Note: See TracChangeset
for help on using the changeset viewer.