- Timestamp:
- 2020-04-20T18:53:13+02:00 (4 years ago)
- Location:
- NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OFF
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OFF/dtadyn.F90
r12724 r12779 23 23 USE c1d ! 1D configuration: lk_c1d 24 24 USE dom_oce ! ocean domain: variables 25 #if ! defined key_qco 25 26 USE domvvl ! variable volume 27 #else 28 USE domqco 29 #endif 26 30 USE zdf_oce ! ocean vertical physics: variables 27 31 USE sbc_oce ! surface module: variables … … 52 56 PUBLIC dta_dyn_sed ! called by nemo_gcm 53 57 PUBLIC dta_dyn_atf ! called by nemo_gcm 58 #if ! defined key_qco 54 59 PUBLIC dta_dyn_sf_interp ! called by nemo_gcm 60 #endif 55 61 56 62 CHARACTER(len=100) :: cn_dir !: Root directory for location of ssr files … … 128 134 IF( l_ldfslp .AND. .NOT.lk_c1d ) CALL dta_dyn_slp( kt, Kbb, Kmm ) ! Computation of slopes 129 135 ! 130 ts (:,:,:,jp_tem,Kmm) = sf_dyn(jf_tem)%fnow(:,:,:)* tmask(:,:,:) ! temperature131 ts (:,:,:,jp_sal,Kmm) = sf_dyn(jf_sal)%fnow(:,:,:)* tmask(:,:,:) ! salinity132 wndm (:,:) = sf_dyn(jf_wnd)%fnow(:,:,1)* tmask(:,:,1) ! wind speed - needed for gas exchange133 fmmflx(:,:) = sf_dyn(jf_fmf)%fnow(:,:,1)* tmask(:,:,1) ! downward salt flux (v3.5+)134 fr_i (:,:) = sf_dyn(jf_ice)%fnow(:,:,1)* tmask(:,:,1) ! Sea-ice fraction135 qsr (:,:) = sf_dyn(jf_qsr)%fnow(:,:,1)* tmask(:,:,1) ! solar radiation136 emp (:,:) = sf_dyn(jf_emp)%fnow(:,:,1)* tmask(:,:,1) ! E-P136 ts (:,:,:,jp_tem,Kmm) = sf_dyn(jf_tem)%fnow(:,:,:) * tmask(:,:,:) ! temperature 137 ts (:,:,:,jp_sal,Kmm) = sf_dyn(jf_sal)%fnow(:,:,:) * tmask(:,:,:) ! salinity 138 wndm (:,:) = sf_dyn(jf_wnd)%fnow(:,:,1) * tmask(:,:,1) ! wind speed - needed for gas exchange 139 fmmflx(:,:) = sf_dyn(jf_fmf)%fnow(:,:,1) * tmask(:,:,1) ! downward salt flux (v3.5+) 140 fr_i (:,:) = sf_dyn(jf_ice)%fnow(:,:,1) * tmask(:,:,1) ! Sea-ice fraction 141 qsr (:,:) = sf_dyn(jf_qsr)%fnow(:,:,1) * tmask(:,:,1) ! solar radiation 142 emp (:,:) = sf_dyn(jf_emp)%fnow(:,:,1) * tmask(:,:,1) ! E-P 137 143 IF( ln_dynrnf ) THEN 138 rnf (:,:)= sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1) ! E-P139 IF( ln_dynrnf_depth .AND. .NOT. ln_linssh ) CALL dta_dyn_hrnf(Kmm)140 ENDIF 141 ! 142 uu(:,:,:,Kmm) = sf_dyn(jf_uwd)%fnow(:,:,:) * umask(:,:,:) ! effective u-transport143 vv(:,:,:,Kmm) = sf_dyn(jf_vwd)%fnow(:,:,:) * vmask(:,:,:) ! effective v-transport144 ww(:,:,:) = sf_dyn(jf_wwd)%fnow(:,:,:) * tmask(:,:,:) ! effective v-transport144 rnf(:,:) = sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1) ! E-P 145 IF( ln_dynrnf_depth .AND. .NOT.ln_linssh ) CALL dta_dyn_hrnf( Kmm ) 146 ENDIF 147 ! 148 uu(:,:,:,Kmm) = sf_dyn(jf_uwd)%fnow(:,:,:) * umask(:,:,:) ! effective u-transport 149 vv(:,:,:,Kmm) = sf_dyn(jf_vwd)%fnow(:,:,:) * vmask(:,:,:) ! effective v-transport 150 ww(:,:,:) = sf_dyn(jf_wwd)%fnow(:,:,:) * tmask(:,:,:) ! effective v-transport 145 151 ! 146 152 IF( .NOT.ln_linssh ) THEN 147 153 ALLOCATE( zemp(jpi,jpj) , zhdivtr(jpi,jpj,jpk) ) 148 zhdivtr(:,:,:) = sf_dyn(jf_div )%fnow(:,:,:)* tmask(:,:,:) ! effective u-transport154 zhdivtr(:,:,:) = sf_dyn(jf_div )%fnow(:,:,:) * tmask(:,:,:) ! effective u-transport 149 155 emp_b (:,:) = sf_dyn(jf_empb)%fnow(:,:,1) * tmask(:,:,1) ! E-P 150 156 zemp (:,:) = ( 0.5_wp * ( emp(:,:) + emp_b(:,:) ) + rnf(:,:) + fwbcorr ) * tmask(:,:,1) 151 CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa), e3t(:,:,:,Kaa) ) != ssh, vertical scale factor & vertical transport 157 #if defined key_qco 158 CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa) ) 159 CALL dom_qco_r3c( ssh(:,:,Kaa), r3t(:,:,Kaa), r3u(:,:,Kaa), r3v(:,:,Kaa) ) 160 #else 161 CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Kbb), zemp, ssh(:,:,Kaa), e3t(:,:,:,Kaa) ) != ssh, vertical scale factor 162 #endif 152 163 DEALLOCATE( zemp , zhdivtr ) 153 164 ! Write in the tracer restart file … … 329 340 ENDIF 330 341 ! 342 #if defined key_qco 343 CALL dom_qco_r3c( ssh(:,:,Kbb), r3t(:,:,Kbb), r3u(:,:,Kbb), r3v(:,:,Kbb) ) 344 CALL dom_qco_r3c( ssh(:,:,Kmm), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm) ) 345 #else 331 346 DO jk = 1, jpkm1 332 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( 1._wp + ssh(:,:,Kmm) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1)) )333 END DO347 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( 1._wp + ssh(:,:,Kmm) * r1_ht_0(:,:) * tmask(:,:,jk) ) 348 END DO 334 349 e3t(:,:,jpk,Kaa) = e3t_0(:,:,jpk) 335 350 … … 342 357 ! ------------------------------------ 343 358 CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w(:,:,:,Kmm), 'W' ) 344 359 !!gm this should be computed from ssh(Kbb) 345 360 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 346 361 e3u(:,:,:,Kbb) = e3u(:,:,:,Kmm) … … 366 381 gdepw(:,:,:,Kbb) = gdepw(:,:,:,Kmm) 367 382 ! 368 ENDIF 383 ENDIF 384 #endif 369 385 ! 370 386 IF( ln_dynrnf .AND. ln_dynrnf_depth ) THEN ! read depht over which runoffs are distributed … … 389 405 ENDIF 390 406 END_2D 407 !!st pourquoi on n'utilise pas le gde3w ici plutôt que de faire une boucle ? 391 408 DO_2D_11_11 392 409 h_rnf(ji,jj) = 0._wp … … 413 430 END SUBROUTINE dta_dyn_init 414 431 432 415 433 SUBROUTINE dta_dyn_sed( kt, Kmm ) 416 434 !!---------------------------------------------------------------------- … … 529 547 END SUBROUTINE dta_dyn_sed_init 530 548 549 531 550 SUBROUTINE dta_dyn_atf( kt, Kbb, Kmm, Kaa ) 532 551 !!--------------------------------------------------------------------- … … 551 570 ! 552 571 END SUBROUTINE dta_dyn_atf 572 553 573 574 #if ! defined key_qco 554 575 SUBROUTINE dta_dyn_sf_interp( kt, Kmm ) 555 576 !!--------------------------------------------------------------------- … … 588 609 ! 589 610 END SUBROUTINE dta_dyn_sf_interp 590 611 #endif 612 613 591 614 SUBROUTINE dta_dyn_ssh( kt, phdivtr, psshb, pemp, pssha, pe3ta ) 592 615 !!---------------------------------------------------------------------- … … 606 629 !! The boundary conditions are w=0 at the bottom (no flux) 607 630 !! 608 !! ** action : ssh(:,:,Kaa) / e3t(:,:, :,Kaa) / ww631 !! ** action : ssh(:,:,Kaa) / e3t(:,:,k,Kaa) / ww 609 632 !! 610 633 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. … … 630 653 ! ! Sea surface elevation time-stepping 631 654 pssha(:,:) = ( psshb(:,:) - z2dt * ( r1_rho0 * pemp(:,:) + zhdiv(:,:) ) ) * ssmask(:,:) 632 ! ! 633 ! ! After acale factors at t-points ( z_star coordinate ) 634 DO jk = 1, jpkm1 635 pe3ta(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + pssha(:,:) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1) ) ) 636 END DO 655 ! 656 IF( PRESENT( pe3ta ) ) THEN ! After acale factors at t-points ( z_star coordinate ) 657 DO jk = 1, jpkm1 658 pe3ta(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + pssha(:,:) * r1_ht_0(:,:) * tmask(:,:,jk) ) 659 END DO 660 ENDIF 637 661 ! 638 662 END SUBROUTINE dta_dyn_ssh … … 657 681 !!---------------------------------------------------------------------- 658 682 ! 683 !!st code dupliqué même remarque que plus haut pourquoi ne pas utiliser gdepw ? 659 684 DO_2D_11_11 660 685 h_rnf(ji,jj) = 0._wp -
NEMO/branches/2020/dev_r12377_KERNEL-06_techene_e3/src/OFF/nemogcm.F90
r12724 r12779 28 28 USE usrdef_nam ! user defined configuration 29 29 USE eosbn2 ! equation of state (eos bn2 routine) 30 #if defined key_qco 31 USE domqco ! tools for scale factor (dom_qco_r3c routine) 32 #endif 30 33 ! ! ocean physics 31 34 USE ldftra ! lateral diffusivity setting (ldf_tra_init routine) … … 117 120 CALL dta_dyn ( istp, Nbb, Nnn, Naa ) ! Interpolation of the dynamical fields 118 121 #endif 122 #if ! defined key_sed_off 123 IF( .NOT.ln_linssh ) THEN 124 CALL dta_dyn_atf( istp, Nbb, Nnn, Naa ) ! time filter of sea surface height and vertical scale factors 125 # if defined key_qco 126 CALL dom_qco_r3c( ssh(:,:,Kmm), r3t_f, r3u_f, r3v_f ) 127 # endif 128 ENDIF 119 129 CALL trc_stp ( istp, Nbb, Nnn, Nrhs, Naa ) ! time-stepping 120 #if ! defined key_sed_off 121 IF( .NOT.ln_linssh ) CALL dta_dyn_atf( istp, Nbb, Nnn, Naa ) ! time filter of sea surface height and vertical scale factors 130 # if defined key_qco 131 !r3t(:,:,Kmm) = r3t_f(:,:) ! update ssh to h0 ratio 132 !r3u(:,:,Kmm) = r3u_f(:,:) 133 !r3v(:,:,Kmm) = r3v_f(:,:) 134 # endif 122 135 #endif 123 136 ! Swap time levels … … 127 140 Naa = Nrhs 128 141 ! 129 #if ! defined key_sed_off 142 #if ! defined key_qco 143 # if ! defined key_sed_off 130 144 IF( .NOT.ln_linssh ) CALL dta_dyn_sf_interp( istp, Nnn ) ! calculate now grid parameters 131 #endif 145 # endif 146 #endif 132 147 CALL stp_ctl ( istp, indic ) ! Time loop: control and print 133 148 istp = istp + 1
Note: See TracChangeset
for help on using the changeset viewer.