- Timestamp:
- 2015-11-09T11:51:12+01:00 (8 years ago)
- Location:
- branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/SHARED/namelist_ref
r5868 r5869 863 863 ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) 864 864 ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) 865 ln_dynhpg_imp = .false. ! time stepping: semi-implicit time scheme (T)866 ! centered time scheme (F)867 865 / 868 866 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r5836 r5869 58 58 LOGICAL , PUBLIC :: ln_hpg_prj !: s-coordinate (Pressure Jacobian scheme) 59 59 LOGICAL , PUBLIC :: ln_hpg_isf !: s-coordinate similar to sco modify for isf 60 LOGICAL , PUBLIC :: ln_dynhpg_imp !: semi-implicite hpg flag61 60 62 61 INTEGER , PUBLIC :: nhpg = 0 ! = 0 to 7, type of pressure gradient scheme used ! (deduced from ln_hpg_... flags) (PUBLIC for TAM) … … 132 131 !! 133 132 NAMELIST/namdyn_hpg/ ln_hpg_zco, ln_hpg_zps, ln_hpg_sco, & 134 & ln_hpg_djc, ln_hpg_prj, ln_hpg_isf , ln_dynhpg_imp133 & ln_hpg_djc, ln_hpg_prj, ln_hpg_isf 135 134 !!---------------------------------------------------------------------- 136 135 ! … … 155 154 WRITE(numout,*) ' s-coord. (Density Jacobian: Cubic polynomial) ln_hpg_djc = ', ln_hpg_djc 156 155 WRITE(numout,*) ' s-coord. (Pressure Jacobian: Cubic polynomial) ln_hpg_prj = ', ln_hpg_prj 157 WRITE(numout,*) ' time stepping: centered (F) or semi-implicit (T) ln_dynhpg_imp = ', ln_dynhpg_imp158 156 ENDIF 159 157 ! -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r5868 r5869 22 22 USE dynspg_ts ! surface pressure gradient (dyn_spg_ts routine) 23 23 USE dynadv ! dynamics: vector invariant versus flux form 24 USE dynhpg, ONLY: ln_dynhpg_imp25 24 USE sbctide 26 25 USE updtide … … 235 234 IF( nspg == 1 ) WRITE(numout,*) ' free surface with time splitting scheme' 236 235 ENDIF 237 ! ! Control of hydrostatic pressure choice238 IF( lk_dynspg_ts .AND. ln_dynhpg_imp ) CALL ctl_stop( 'Semi-implicit hpg not compatible with time splitting' )239 236 ! 240 237 IF( nn_timing == 1 ) CALL timing_stop('dyn_spg_init') -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r5836 r5869 32 32 USE domvvl ! variable volume 33 33 USE dynspg_oce ! surface pressure gradient variables 34 USE dynhpg ! hydrostatic pressure gradient35 34 USE trd_oce ! trends: ocean variables 36 35 USE trdtra ! trends manager: tracers … … 58 57 PUBLIC tra_nxt_vvl ! to be used in trcnxt 59 58 60 REAL(wp) :: rbcp ! Brown & Campana parameters for semi-implicit hpg61 59 62 60 !! * Substitutions … … 90 88 !! 91 89 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 92 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)90 !! 93 91 !!---------------------------------------------------------------------- 94 92 INTEGER, INTENT(in) :: kt ! ocean time-step index … … 105 103 IF(lwp) WRITE(numout,*) 'tra_nxt : achieve the time stepping by Asselin filter and array swap' 106 104 IF(lwp) WRITE(numout,*) '~~~~~~~' 107 !108 rbcp = 0.25_wp * (1._wp + atfp) * (1._wp + atfp) * ( 1._wp - atfp) ! Brown & Campana parameter for semi-implicit hpg109 105 ENDIF 110 106 … … 181 177 !! 182 178 !! ** Method : - Apply a Asselin time filter on now fields. 183 !! - save in (ta,sa) an average over the three time levels184 !! which will be used to compute rdn and thus the semi-implicit185 !! hydrostatic pressure gradient (ln_dynhpg_imp = T)186 179 !! - swap tracer fields to prepare the next time_step. 187 !! This can be summurized for tempearture as:188 !! ztm = tn + rbcp * [ta -2 tn + tb ] ln_dynhpg_imp = T189 !! ztm = 0 otherwise190 !! with rbcp=1/4 * (1-atfp^4) / (1-atfp)191 !! tb = tn + atfp*[ tb - 2 tn + ta ]192 !! tn = ta193 !! ta = ztm (NB: reset to 0 after eos_bn2 call)194 180 !! 195 181 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 196 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)182 !! 197 183 !!---------------------------------------------------------------------- 198 184 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 205 191 ! 206 192 INTEGER :: ji, jj, jk, jn ! dummy loop indices 207 LOGICAL :: ll_tra_hpg ! local logical208 193 REAL(wp) :: ztn, ztd ! local scalars 209 194 !!---------------------------------------------------------------------- … … 215 200 ENDIF 216 201 ! 217 IF( cdtype == 'TRA' ) THEN ; ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg218 ELSE ; ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg219 ENDIF220 202 ! 221 203 DO jn = 1, kjpt … … 230 212 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 231 213 ! 232 IF( ll_tra_hpg ) pta(ji,jj,jk,jn) = ztn + rbcp * ztd ! pta <-- Brown & Campana average233 214 END DO 234 215 END DO … … 248 229 !! 249 230 !! ** Method : - Apply a thickness weighted Asselin time filter on now fields. 250 !! - save in (ta,sa) a thickness weighted average over the three251 !! time levels which will be used to compute rdn and thus the semi-252 !! implicit hydrostatic pressure gradient (ln_dynhpg_imp = T)253 231 !! - swap tracer fields to prepare the next time_step. 254 232 !! This can be summurized for tempearture as: 255 !! ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) ln_dynhpg_imp = T256 !! /( e3t_n + rbcp*[ e3t_b - 2 e3t_n + e3t_a ] )257 !! ztm = 0 otherwise258 !! tb = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] )259 !! /( e3t_n + atfp*[ e3t_b - 2 e3t_n + e3t_a ] )260 !! tn = ta261 !! ta = zt (NB: reset to 0 after eos_bn2 call)262 233 !! 263 234 !! ** Action : - (tb,sb) and (tn,sn) ready for the next time step 264 !! - (ta,sa) time averaged (t,s) (ln_dynhpg_imp = T)235 !! 265 236 !!---------------------------------------------------------------------- 266 237 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 276 247 277 248 !! 278 LOGICAL :: ll_tra _hpg, ll_traqsr, ll_rnf, ll_isf ! local logical249 LOGICAL :: ll_traqsr, ll_rnf, ll_isf ! local logical 279 250 INTEGER :: ji, jj, jk, jn ! dummy loop indices 280 251 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar … … 289 260 ! 290 261 IF( cdtype == 'TRA' ) THEN 291 ll_tra_hpg = ln_dynhpg_imp ! active tracers case and semi-implicit hpg292 262 ll_traqsr = ln_traqsr ! active tracers case and solar penetration 293 263 ll_rnf = ln_rnf ! active tracers case and river runoffs … … 298 268 END IF 299 269 ELSE 300 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg301 270 ll_traqsr = .FALSE. ! active tracers case and NO solar penetration 302 271 ll_rnf = .FALSE. ! passive tracers or NO river runoffs … … 356 325 ptn(ji,jj,jk,jn) = pta(ji,jj,jk,jn) ! ptn <-- pta 357 326 ! 358 IF( ll_tra_hpg ) THEN ! semi-implicit hpg (T & S only)359 ze3t_d = 1.e0 / ( ze3t_n + rbcp * ze3t_d )360 pta(ji,jj,jk,jn) = ze3t_d * ( ztc_n + rbcp * ztc_d ) ! ta <-- Brown & Campana average361 ENDIF362 327 END DO 363 328 END DO -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/step.F90
r5868 r5869 268 268 #endif 269 269 CALL tra_zdf ( kstp ) ! vertical mixing and after tracer fields 270 271 IF( ln_dynhpg_imp ) THEN ! semi-implicit hpg (time stepping then eos) 272 IF( ln_zdfnpc ) CALL tra_npc( kstp ) ! update after fields by non-penetrative convection 273 CALL tra_nxt( kstp ) ! tracer fields at next time step 270 ! centered hpg (eos then time stepping) 271 IF ( .NOT. lk_dynspg_ts ) THEN ! eos already called in time-split case 274 272 !!gm : why again a call to sto_pts ??? 275 IF( ln_sto_eos ) CALL sto_pts( tsn ) ! Random T/S fluctuations 276 !!gm 277 CALL eos ( tsa, rhd, rhop, fsdept_n(:,:,:) ) ! Time-filtered in situ density for hpg computation 278 IF( ln_zps .AND. .NOT. ln_isfcav) & 279 & CALL zps_hde ( kstp, jpts, tsa, gtsu, gtsv, & ! Partial steps: before horizontal gradient 280 & rhd, gru , grv ) ! of t, s, rd at the last ocean level 281 IF( ln_zps .AND. ln_isfcav) & 282 & CALL zps_hde_isf( kstp, jpts, tsa, gtsu, gtsv, gtui, gtvi, & ! Partial steps for top/bottom cells 283 & rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv , & 284 & grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi ) 285 ELSE ! centered hpg (eos then time stepping) 286 IF ( .NOT. lk_dynspg_ts ) THEN ! eos already called in time-split case 287 !!gm : why again a call to sto_pts ??? 288 IF( ln_sto_eos ) CALL sto_pts( tsn ) ! Random T/S fluctuations 273 IF( ln_sto_eos ) CALL sto_pts( tsn ) ! Random T/S fluctuations 289 274 !!gm 290 275 CALL eos ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation … … 296 281 & rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv , & 297 282 & grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi ) ! of t, s, rd at the last ocean level 298 299 IF( ln_zdfnpc )CALL tra_npc( kstp ) ! update after fields by non-penetrative convection283 ENDIF 284 IF( ln_zdfnpc ) CALL tra_npc( kstp ) ! update after fields by non-penetrative convection 300 285 CALL tra_nxt( kstp ) ! tracer fields at next time step 301 ENDIF302 286 303 287 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Note: See TracChangeset
for help on using the changeset viewer.