Changeset 5866
- Timestamp:
- 2015-11-06T11:42:35+01:00 (9 years ago)
- Location:
- branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM
- Files:
-
- 77 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/AMM12/EXP00/namelist_cfg
r5836 r5866 34 34 &namzgr ! vertical coordinate 35 35 !----------------------------------------------------------------------- 36 ln_zps = .false. ! z-coordinate - partial steps (T/F) 37 ln_sco = .true. ! s- or hybrid z-s-coordinate (T/F) 36 ln_sco = .true. ! s- or hybrid z-s-coordinate 38 37 / 39 38 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/AMM12/cpp_AMM12.fcm
r5836 r5866 1 bld::tool::fppkeys key_bdy key_tide key_dynspg_ts key_zdfgls key_vvlkey_diainstant key_mpp_mpi key_iomput1 bld::tool::fppkeys key_bdy key_tide key_dynspg_ts key_zdfgls key_diainstant key_mpp_mpi key_iomput -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/C1D_PAPA/EXP00/namelist_cfg
r5836 r5866 30 30 &namzgr ! vertical coordinate 31 31 !----------------------------------------------------------------------- 32 ln_zps = .true. ! z-coordinate - partial steps 32 33 / 33 34 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/GYRE/EXP00/namelist_cfg
r5836 r5866 32 32 &namzgr ! vertical coordinate 33 33 !----------------------------------------------------------------------- 34 ln_zco = .true. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined)35 ln_ zps = .false. ! z-coordinate - partial steps (T/F)34 ln_zco = .true. ! z-coordinate - full steps 35 ln_linssh = .true. ! linear free surface 36 36 / 37 37 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/GYRE_BFM/EXP00/namelist_cfg
r5836 r5866 35 35 &namzgr ! vertical coordinate 36 36 !----------------------------------------------------------------------- 37 ln_zco = .true. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined)38 ln_ zps = .false. ! z-coordinate - partial steps (T/F)37 ln_zco = .true. ! z-coordinate - full steps 38 ln_linssh = .true. ! linear free surface 39 39 / 40 40 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_cfg
r5836 r5866 29 29 &namzgr ! vertical coordinate 30 30 !----------------------------------------------------------------------- 31 ln_zco = .true. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined)32 ln_ zps = .false. ! z-coordinate - partial steps (T/F)31 ln_zco = .true. ! z-coordinate - full steps 32 ln_linssh = .true. ! linear free surface 33 33 / 34 34 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/GYRE_XIOS/EXP00/namelist_cfg
r5836 r5866 29 29 &namzgr ! vertical coordinate 30 30 !----------------------------------------------------------------------- 31 ln_zco = .true. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined)32 ln_ zps = .false. ! z-coordinate - partial steps (T/F)31 ln_zco = .true. ! z-coordinate - full steps 32 ln_linssh = .true. ! linear free surface 33 33 / 34 34 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/1_namelist_cfg
r5836 r5866 29 29 &namzgr ! vertical coordinate 30 30 !----------------------------------------------------------------------- 31 ln_zps = .true. ! z-coordinate - partial steps 32 ln_linssh = .true. ! linear free surface 31 33 / 32 34 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/namelist_cfg
r5836 r5866 6 6 &namrun ! parameters of the run 7 7 !----------------------------------------------------------------------- 8 nn_no = 0 ! job number (no more used...) 9 cn_exp = "ORCA2" ! experience name 10 nn_it000 = 1 ! first time step 11 nn_itend = 300 ! last time step (std 5475) 8 12 / 9 13 !----------------------------------------------------------------------- … … 24 28 &namzgr ! vertical coordinate 25 29 !----------------------------------------------------------------------- 30 ln_zps = .true. ! z-coordinate - partial steps 31 ln_linssh = .true. ! linear free surface 26 32 / 27 33 !----------------------------------------------------------------------- … … 181 187 ln_dynvor_mix = .false. ! mixed scheme 182 188 ln_dynvor_een = .true. ! energy & enstrophy scheme 183 nn_een_e3f = 1! e3f = masked averaging of e3t divided by 4 (=0) or by the sum of mask (=1)189 nn_een_e3f = 0 ! e3f = masked averaging of e3t divided by 4 (=0) or by the sum of mask (=1) 184 190 / 185 191 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM/cpp_ORCA2_LIM.fcm
r5836 r5866 1 bld::tool::fppkeys key_trabbl key_lim2 key_dynspg_flt key_zdftke key_zdfddm key_zdftmx key_mpp_mpi key_iomput 1 bld::tool::fppkeys key_trabbl key_lim2 key_dynspg_flt key_zdftke key_zdfddm key_zdftmx key_mpp_mpi key_iomput key_nosignedzero -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/1_namelist_cfg
r5836 r5866 28 28 &namzgr ! vertical coordinate 29 29 !----------------------------------------------------------------------- 30 ln_zps = .true. ! z-coordinate - partial steps 30 31 / 31 32 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/namelist_cfg
r5836 r5866 6 6 &namrun ! parameters of the run 7 7 !----------------------------------------------------------------------- 8 nn_no = 0 ! job number (no more used...) 9 cn_exp = "ORCA2" ! experience name 10 nn_it000 = 1 ! first time step 11 nn_itend = 300 ! last time step (std 5475) 8 12 / 9 13 !----------------------------------------------------------------------- … … 24 28 &namzgr ! vertical coordinate 25 29 !----------------------------------------------------------------------- 30 ln_zps = .true. ! z-coordinate - partial steps 26 31 / 27 32 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM3/cpp_ORCA2_LIM3.fcm
r5836 r5866 1 bld::tool::fppkeys key_trabbl key_lim3 key_ vvl key_dynspg_ts key_zdftke key_zdfddm key_zdftmx key_mpp_mpi key_diaobs key_asminc key_iomput key_nosignedzero1 bld::tool::fppkeys key_trabbl key_lim3 key_dynspg_ts key_zdftke key_zdfddm key_zdftmx key_mpp_mpi key_diaobs key_asminc key_iomput key_nosignedzero -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/1_namelist_cfg
r5836 r5866 59 59 &namzgr ! vertical coordinate 60 60 !----------------------------------------------------------------------- 61 ln_zco = .false. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined)62 61 ln_zps = .true. ! z-coordinate - partial steps (T/F) 63 ln_ sco = .false. ! s- or hybrid z-s-coordinate (T/F)62 ln_linssh = .true. ! linear free surface 64 63 / 65 64 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/namelist_cfg
r5836 r5866 31 31 &namzgr ! vertical coordinate 32 32 !----------------------------------------------------------------------- 33 ln_zps = .true. ! z-coordinate - partial steps 34 ln_linssh = .true. ! linear free surface 33 35 / 34 36 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_cfg
r5836 r5866 24 24 &namzgr ! vertical coordinate 25 25 !----------------------------------------------------------------------- 26 ln_zps = .true. ! z-coordinate - partial steps 27 ln_linssh = .true. ! linear free surface 26 28 / 27 29 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_cfg
r5836 r5866 27 27 &namzgr ! vertical coordinate 28 28 !----------------------------------------------------------------------- 29 ln_zps = .true. ! z-coordinate - partial steps 30 ln_linssh = .true. ! linear free surface 29 31 / 30 32 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/ORCA2_SAS_LIM/EXP00/namelist_cfg
r5836 r5866 26 26 &namzgr ! vertical coordinate 27 27 !----------------------------------------------------------------------- 28 ln_zco = .true. ! z-coordinate - full steps 29 ln_linssh = .true. ! linear free surface 28 30 / 29 31 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/CONFIG/SHARED/namelist_ref
r5845 r5866 89 89 &namzgr ! vertical coordinate 90 90 !----------------------------------------------------------------------- 91 ln_zco = .false. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined) 92 ln_zps = .true. ! z-coordinate - partial steps (T/F) 93 ln_sco = .false. ! s- or hybrid z-s-coordinate (T/F) 94 ln_isfcav = .false. ! ice shelf cavity (T/F) 91 ln_zco = .false. ! z-coordinate - full steps 92 ln_zps = .false. ! z-coordinate - partial steps 93 ln_sco = .false. ! s- or hybrid z-s-coordinate 94 ln_isfcav = .false. ! ice shelf cavity 95 ln_linssh = .false. ! linear free surface 95 96 / 96 97 !----------------------------------------------------------------------- -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90
r5862 r5866 469 469 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 470 470 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 471 !!gm like for lim3 : 472 #if defined key_vvl 471 !!gm I really don't like this staff here... Find a way to put that elsewhere or differently 473 472 !!gm 474 do jk = 1,jpkm1 ! adjust initial vertical scale factors 475 e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 476 e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 477 end do 478 e3t_a(:,:,:) = e3t_b(:,:,:) 479 ! Reconstruction of all vertical scale factors at now and before time steps 480 ! ============================================================================= 481 ! Horizontal scale factor interpolations 482 ! -------------------------------------- 483 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 484 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 485 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 486 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 487 CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 488 ! Vertical scale factor interpolations 489 ! ------------------------------------ 490 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 491 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 492 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 493 CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 494 CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 495 ! t- and w- points depth 496 ! ---------------------- 497 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 498 gdepw_n(:,:,1) = 0.0_wp 499 gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 500 DO jk = 2, jpk 501 gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 502 gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 503 gde3w_n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:) 504 END DO 505 !!gm 506 #endif 507 !!gm 473 IF( .NOT. ln_linssh ) THEN 474 475 do jk = 1,jpkm1 ! adjust initial vertical scale factors 476 e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 477 e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 478 end do 479 e3t_a(:,:,:) = e3t_b(:,:,:) 480 ! Reconstruction of all vertical scale factors at now and before time steps 481 ! ! Horizontal scale factor interpolations 482 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 483 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 484 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 485 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 486 CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 487 ! ! Vertical scale factor interpolations 488 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 489 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 490 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 491 CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 492 CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 493 ! ! t- and w- points depth 494 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 495 gdepw_n(:,:,1) = 0.0_wp 496 gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 497 DO jk = 2, jpk 498 gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 499 gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 500 gde3w_n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:) 501 END DO 502 ENDIF 503 !!gm end 508 504 ENDIF 509 505 ! -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90
r5845 r5866 335 335 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 336 336 337 #if defined key_vvl338 !!gm key_vvl necessary? clem: yes for compilation purpose339 337 !!gm I really don't like this staff here... Find a way to put that elsewhere or differently 340 DO jk = 1,jpkm1 ! adjust initial vertical scale factors 341 e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 342 e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 343 END DO 344 e3t_a(:,:,:) = e3t_b(:,:,:) 345 ! Reconstruction of all vertical scale factors at now and before time 346 ! steps 347 ! ============================================================================= 348 ! Horizontal scale factor interpolations 349 ! -------------------------------------- 350 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 351 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 352 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 353 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 354 CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 355 ! Vertical scale factor interpolations 356 ! ------------------------------------ 357 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 358 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 359 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 360 CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 361 CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 362 ! t- and w- points depth 363 ! ---------------------- 338 !!gm 339 IF( .NOT.ln_linssh ) THEN 340 DO jk = 1,jpkm1 ! adjust initial vertical scale factors 341 e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 342 e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 343 END DO 344 e3t_a(:,:,:) = e3t_b(:,:,:) 345 ! Reconstruction of all vertical scale factors at now and before time-steps 346 ! ========================================================================= 347 ! Horizontal scale factor interpolations 348 ! -------------------------------------- 349 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 350 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 351 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 352 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 353 CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 354 ! Vertical scale factor interpolations 355 ! ------------------------------------ 356 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 357 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 358 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 359 CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 360 CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 361 ! t- and w- points depth 362 ! ---------------------- 364 363 !!gm not sure of that.... 365 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1)366 gdepw_n(:,:,1) = 0.0_wp367 gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:)368 DO jk = 2, jpk369 gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk)370 gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1)371 gde3w_n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:)372 END DO373 #endif 364 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 365 gdepw_n(:,:,1) = 0.0_wp 366 gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 367 DO jk = 2, jpk 368 gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 369 gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 370 gde3w_n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:) 371 END DO 372 ENDIF 374 373 ENDIF 375 374 ENDIF ! .NOT. ln_rstart 376 375 ! 377 378 376 END SUBROUTINE lim_sbc_init 379 377 -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90
r5845 r5866 870 870 sshb(:,:) = sshn(:,:) ! Update before fields 871 871 ! 872 IF( lk_vvl) THEN872 IF( .NOT.ln_linssh ) THEN 873 873 DO jk = 1, jpk 874 874 e3t_b(:,:,jk) = e3t_n(:,:,jk) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/BDY/bdyini.F90
r5845 r5866 1310 1310 ! Compute total lateral surface for volume correction: 1311 1311 ! ---------------------------------------------------- 1312 ! JC: this must be done at each time step with key_vvl1313 bdysurftot = 0. e01312 ! JC: this must be done at each time step with non-linear free surface 1313 bdysurftot = 0._wp 1314 1314 IF( ln_vol ) THEN 1315 1315 igrd = 2 ! Lateral surface at U-points -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/CRS/crsini.F90
r5845 r5866 12 12 USE par_kind, ONLY: wp 13 13 USE par_oce ! For parameter jpi,jpj,jphgr_msh 14 USE dom_oce ! For parameters in par_oce (jperio, lk_vvl)14 USE dom_oce ! For parameters in par_oce 15 15 USE crs ! Coarse grid domain 16 16 USE phycst, ONLY: omega, rad ! physical constants -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90
r5845 r5866 103 103 zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 104 104 END DO 105 IF( .NOT.lk_vvl) THEN105 IF( ln_linssh ) THEN 106 106 IF ( ln_isfcav ) THEN 107 107 DO ji=1,jpi … … 129 129 zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 130 130 END DO 131 IF( .NOT.lk_vvl) THEN131 IF( ln_linssh ) THEN 132 132 IF ( ln_isfcav ) THEN 133 133 DO ji=1,jpi … … 163 163 END DO 164 164 END DO 165 IF( .NOT.lk_vvl) THEN165 IF( ln_linssh ) THEN 166 166 IF ( ln_isfcav ) THEN 167 167 DO ji=1,jpi -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DIA/diadct.F90
r5845 r5866 1 1 MODULE diadct 2 !!===================================================================== 3 !! *** MODULE diadct *** 4 !! Ocean diagnostics: Compute the transport trough a sec. 5 !!=============================================================== 6 !! History : 7 !! 8 !! original : 02/99 (Y Drillet) 9 !! addition : 10/01 (Y Drillet, R Bourdalle Badie) 10 !! : 10/05 (M Laborie) F90 11 !! addition : 04/07 (G Garric) Ice sections 12 !! bugfix : 04/07 (C Bricaud) test on sec%nb_point 13 !! initialisation of ztransp1,ztransp2,... 14 !! nemo_v_3_4: 09/2011 (C Bricaud) 15 !! 16 !! 17 !!---------------------------------------------------------------------- 2 !!====================================================================== 3 !! *** MODULE diadct *** 4 !! Ocean diagnostics: Compute the transport trough a sec. 5 !!====================================================================== 6 !! History : OPA ! 02/1999 (Y Drillet) original code 7 !! ! 10/2001 (Y Drillet, R Bourdalle Badie) 8 !! NEMO 1.0 ! 10/2005 (M Laborie) F90 9 !! 3.0 ! 04/2007 (G Garric) Ice sections 10 !! - ! 04/2007 (C Bricaud) test on sec%nb_point, initialisation of ztransp1,ztransp2,... 11 !! 3.4 ! 09/2011 (C Bricaud) 12 !!---------------------------------------------------------------------- 18 13 #if defined key_diadct 19 !!----------------------------------------------------------------------20 !! 'key_diadct' :21 !!----------------------------------------------------------------------22 !!----------------------------------------------------------------------23 !! dia_dct : Compute the transport through a sec.24 !! dia_dct_init : Read namelist.25 !! readsec : Read sections description and pathway26 !! removepoints : Remove points which are common to 2 procs27 !! transport : Compute transport for each sections28 !! dia_dct_wri : Write tranports results in ascii files29 !! interp : Compute temperature/salinity/density at U-point or V-point30 !!31 !!----------------------------------------------------------------------32 USE oce ! ocean dynamics and tracers33 USE dom_oce ! ocean space and time domain34 USE phycst ! physical constants35 USE in_out_manager ! I/O manager36 USE daymod ! calendar37 USE dianam ! build name of file38 USE lib_mpp ! distributed memory computing library14 !!---------------------------------------------------------------------- 15 !! 'key_diadct' : 16 !!---------------------------------------------------------------------- 17 !!---------------------------------------------------------------------- 18 !! dia_dct : Compute the transport through a sec. 19 !! dia_dct_init : Read namelist. 20 !! readsec : Read sections description and pathway 21 !! removepoints : Remove points which are common to 2 procs 22 !! transport : Compute transport for each sections 23 !! dia_dct_wri : Write tranports results in ascii files 24 !! interp : Compute temperature/salinity/density at U-point or V-point 25 !! 26 !!---------------------------------------------------------------------- 27 USE oce ! ocean dynamics and tracers 28 USE dom_oce ! ocean space and time domain 29 USE phycst ! physical constants 30 USE in_out_manager ! I/O manager 31 USE daymod ! calendar 32 USE dianam ! build name of file 33 USE lib_mpp ! distributed memory computing library 39 34 #if defined key_lim2 40 USE ice_235 USE ice_2 41 36 #endif 42 37 #if defined key_lim3 43 USE ice38 USE ice 44 39 #endif 45 USE domvvl46 USE timing ! preformance summary47 USE wrk_nemo ! working arrays48 49 IMPLICIT NONE50 PRIVATE51 52 PUBLIC dia_dct ! routine called by step.F9053 PUBLIC dia_dct_init ! routine called by opa.F9054 PUBLIC diadct_alloc ! routine called by nemo_init in nemogcm.F9055 PRIVATE readsec56 PRIVATE removepoints57 PRIVATE transport58 PRIVATE dia_dct_wri59 60 LOGICAL, PUBLIC, PARAMETER :: lk_diadct = .TRUE. !: model-data diagnostics flag61 62 INTEGER :: nn_dct ! Frequency of computation63 INTEGER :: nn_dctwri ! Frequency of output64 INTEGER :: nn_secdebug ! Number of the section to debug40 USE domvvl 41 USE timing ! preformance summary 42 USE wrk_nemo ! working arrays 43 44 IMPLICIT NONE 45 PRIVATE 46 47 PUBLIC dia_dct ! routine called by step.F90 48 PUBLIC dia_dct_init ! routine called by opa.F90 49 PUBLIC diadct_alloc ! routine called by nemo_init in nemogcm.F90 50 PRIVATE readsec 51 PRIVATE removepoints 52 PRIVATE transport 53 PRIVATE dia_dct_wri 54 55 LOGICAL, PUBLIC, PARAMETER :: lk_diadct = .TRUE. !: model-data diagnostics flag 56 57 INTEGER :: nn_dct ! Frequency of computation 58 INTEGER :: nn_dctwri ! Frequency of output 59 INTEGER :: nn_secdebug ! Number of the section to debug 65 60 66 INTEGER, PARAMETER :: nb_class_max = 1067 INTEGER, PARAMETER :: nb_sec_max = 15068 INTEGER, PARAMETER :: nb_point_max = 200069 INTEGER, PARAMETER :: nb_type_class = 1070 INTEGER, PARAMETER :: nb_3d_vars = 371 INTEGER, PARAMETER :: nb_2d_vars = 272 INTEGER :: nb_sec73 74 TYPE POINT_SECTION75 INTEGER :: I,J76 END TYPE POINT_SECTION77 78 TYPE COORD_SECTION79 REAL(wp) :: lon,lat80 END TYPE COORD_SECTION81 82 TYPE SECTION83 CHARACTER(len=60) :: name ! name of the sec84 LOGICAL :: llstrpond ! true if you want the computation of salt and61 INTEGER, PARAMETER :: nb_class_max = 10 62 INTEGER, PARAMETER :: nb_sec_max = 150 63 INTEGER, PARAMETER :: nb_point_max = 2000 64 INTEGER, PARAMETER :: nb_type_class = 10 65 INTEGER, PARAMETER :: nb_3d_vars = 3 66 INTEGER, PARAMETER :: nb_2d_vars = 2 67 INTEGER :: nb_sec 68 69 TYPE POINT_SECTION 70 INTEGER :: I,J 71 END TYPE POINT_SECTION 72 73 TYPE COORD_SECTION 74 REAL(wp) :: lon,lat 75 END TYPE COORD_SECTION 76 77 TYPE SECTION 78 CHARACTER(len=60) :: name ! name of the sec 79 LOGICAL :: llstrpond ! true if you want the computation of salt and 85 80 ! heat transports 86 LOGICAL :: ll_ice_section ! ice surface and ice volume computation87 LOGICAL :: ll_date_line ! = T if the section crosses the date-line88 TYPE(COORD_SECTION), DIMENSION(2) :: coordSec ! longitude and latitude of the extremities of the sec89 INTEGER :: nb_class ! number of boundaries for density classes90 INTEGER, DIMENSION(nb_point_max) :: direction ! vector direction of the point in the section91 CHARACTER(len=40),DIMENSION(nb_class_max) :: classname ! characteristics of the class92 REAL(wp), DIMENSION(nb_class_max) :: zsigi ,&! in-situ density classes (99 if you don't want)93 zsigp ,&! potential density classes (99 if you don't want)94 zsal ,&! salinity classes (99 if you don't want)95 ztem ,&! temperature classes(99 if you don't want)96 zlay ! level classes (99 if you don't want)97 REAL(wp), DIMENSION(nb_type_class,nb_class_max) :: transport ! transport output98 REAL(wp) :: slopeSection ! slope of the section99 INTEGER :: nb_point ! number of points in the section100 TYPE(POINT_SECTION),DIMENSION(nb_point_max) :: listPoint ! list of points in the sections101 END TYPE SECTION102 103 TYPE(SECTION),DIMENSION(nb_sec_max) :: secs ! Array of sections104 105 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: transports_3d106 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: transports_2d81 LOGICAL :: ll_ice_section ! ice surface and ice volume computation 82 LOGICAL :: ll_date_line ! = T if the section crosses the date-line 83 TYPE(COORD_SECTION), DIMENSION(2) :: coordSec ! longitude and latitude of the extremities of the sec 84 INTEGER :: nb_class ! number of boundaries for density classes 85 INTEGER, DIMENSION(nb_point_max) :: direction ! vector direction of the point in the section 86 CHARACTER(len=40),DIMENSION(nb_class_max) :: classname ! characteristics of the class 87 REAL(wp), DIMENSION(nb_class_max) :: zsigi ,&! in-situ density classes (99 if you don't want) 88 zsigp ,&! potential density classes (99 if you don't want) 89 zsal ,&! salinity classes (99 if you don't want) 90 ztem ,&! temperature classes(99 if you don't want) 91 zlay ! level classes (99 if you don't want) 92 REAL(wp), DIMENSION(nb_type_class,nb_class_max) :: transport ! transport output 93 REAL(wp) :: slopeSection ! slope of the section 94 INTEGER :: nb_point ! number of points in the section 95 TYPE(POINT_SECTION),DIMENSION(nb_point_max) :: listPoint ! list of points in the sections 96 END TYPE SECTION 97 98 TYPE(SECTION),DIMENSION(nb_sec_max) :: secs ! Array of sections 99 100 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: transports_3d 101 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: transports_2d 107 102 108 103 !!---------------------------------------------------------------------- … … 618 613 619 614 TYPE(POINT_SECTION) :: k 620 !!--------------------------------------------------------621 622 IF( ld_debug )WRITE(numout,*)' Compute transport'623 624 !---------------------------!625 ! COMPUTE TRANSPORT !626 !---------------------------!627 IF(sec%nb_point .NE. 0)THEN628 629 !----------------------------------------------------------------------------------------------------630 !Compute sign for velocities:631 !632 !convention:633 ! non horizontal section: direction + is toward left hand of section634 ! horizontal section: direction + is toward north of section635 !636 !637 ! slopeSection < 0 slopeSection > 0 slopeSection=inf slopeSection=0638 ! ---------------- ----------------- --------------- --------------639 !640 ! isgnv=1 direction +641 ! ______ _____ ______642 ! | //| | | direction +643 ! | isgnu=1 // | |isgnu=1 |isgnu=1 /|\644 ! |_______ // ______| \\ | ---\ |645 ! | | isgnv=-1 \\ | | ---/ direction + ____________646 ! | | __\\| |647 ! | | direction + | isgnv=1648 !649 !----------------------------------------------------------------------------------------------------650 isgnu = 1651 IF( sec%slopeSection .GT. 0 ) THEN ; isgnv = -1652 ELSE ; isgnv = 1653 ENDIF654 IF( sec%slopeSection .GE. 9999. ) isgnv = 1655 656 IF( ld_debug )write(numout,*)"sec%slopeSection isgnu isgnv ",sec%slopeSection,isgnu,isgnv657 658 !--------------------------------------!659 ! LOOP ON THE SEGMENT BETWEEN 2 NODES !660 !--------------------------------------!661 DO jseg=1,MAX(sec%nb_point-1,0)615 !!-------------------------------------------------------- 616 ! 617 IF( ld_debug )WRITE(numout,*)' Compute transport' 618 619 !---------------------------! 620 ! COMPUTE TRANSPORT ! 621 !---------------------------! 622 IF(sec%nb_point .NE. 0)THEN 623 624 !---------------------------------------------------------------------------------------------------- 625 !Compute sign for velocities: 626 ! 627 !convention: 628 ! non horizontal section: direction + is toward left hand of section 629 ! horizontal section: direction + is toward north of section 630 ! 631 ! 632 ! slopeSection < 0 slopeSection > 0 slopeSection=inf slopeSection=0 633 ! ---------------- ----------------- --------------- -------------- 634 ! 635 ! isgnv=1 direction + 636 ! ______ _____ ______ 637 ! | //| | | direction + 638 ! | isgnu=1 // | |isgnu=1 |isgnu=1 /|\ 639 ! |_______ // ______| \\ | ---\ | 640 ! | | isgnv=-1 \\ | | ---/ direction + ____________ 641 ! | | __\\| | 642 ! | | direction + | isgnv=1 643 ! 644 !---------------------------------------------------------------------------------------------------- 645 isgnu = 1 646 IF( sec%slopeSection .GT. 0 ) THEN ; isgnv = -1 647 ELSE ; isgnv = 1 648 ENDIF 649 IF( sec%slopeSection .GE. 9999. ) isgnv = 1 650 651 IF( ld_debug )write(numout,*)"sec%slopeSection isgnu isgnv ",sec%slopeSection,isgnu,isgnv 652 653 !--------------------------------------! 654 ! LOOP ON THE SEGMENT BETWEEN 2 NODES ! 655 !--------------------------------------! 656 DO jseg=1,MAX(sec%nb_point-1,0) 662 657 663 !------------------------------------------------------------------------------------------- 664 ! Select the appropriate coordinate for computing the velocity of the segment 665 ! 666 ! CASE(0) Case (2) 667 ! ------- -------- 668 ! listPoint(jseg) listPoint(jseg+1) listPoint(jseg) F(i,j) 669 ! F(i,j)----------V(i+1,j)-------F(i+1,j) | 670 ! | 671 ! | 672 ! | 673 ! Case (3) U(i,j) 674 ! -------- | 675 ! | 676 ! listPoint(jseg+1) F(i,j+1) | 677 ! | | 678 ! | | 679 ! | listPoint(jseg+1) F(i,j-1) 680 ! | 681 ! | 682 ! U(i,j+1) 683 ! | Case(1) 684 ! | ------ 685 ! | 686 ! | listPoint(jseg+1) listPoint(jseg) 687 ! | F(i-1,j)-----------V(i,j) -------f(jseg) 688 ! listPoint(jseg) F(i,j) 689 ! 690 !------------------------------------------------------------------------------------------- 691 692 SELECT CASE( sec%direction(jseg) ) 693 CASE(0) ; k = sec%listPoint(jseg) 694 CASE(1) ; k = POINT_SECTION(sec%listPoint(jseg)%I+1,sec%listPoint(jseg)%J) 695 CASE(2) ; k = sec%listPoint(jseg) 696 CASE(3) ; k = POINT_SECTION(sec%listPoint(jseg)%I,sec%listPoint(jseg)%J+1) 697 END SELECT 698 699 !---------------------------| 700 ! LOOP ON THE LEVEL | 701 !---------------------------| 702 !Sum of the transport on the vertical 703 DO jk=1,mbathy(k%I,k%J) 704 705 ! compute temperature, salinity, insitu & potential density, ssh and depth at U/V point 706 SELECT CASE( sec%direction(jseg) ) 707 CASE(0,1) 708 ztn = interp(k%I,k%J,jk,'V',tsn(:,:,:,jp_tem) ) 709 zsn = interp(k%I,k%J,jk,'V',tsn(:,:,:,jp_sal) ) 710 zrhop = interp(k%I,k%J,jk,'V',rhop) 711 zrhoi = interp(k%I,k%J,jk,'V',rhd*rau0+rau0) 712 zsshn = 0.5*( sshn(k%I,k%J) + sshn(k%I,k%J+1) ) * vmask(k%I,k%J,1) 713 CASE(2,3) 714 ztn = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_tem) ) 715 zsn = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_sal) ) 716 zrhop = interp(k%I,k%J,jk,'U',rhop) 717 zrhoi = interp(k%I,k%J,jk,'U',rhd*rau0+rau0) 718 zsshn = 0.5*( sshn(k%I,k%J) + sshn(k%I+1,k%J) ) * umask(k%I,k%J,1) 719 END SELECT 720 721 zdep= gdept_n(k%I,k%J,jk) 658 !------------------------------------------------------------------------------------------- 659 ! Select the appropriate coordinate for computing the velocity of the segment 660 ! 661 ! CASE(0) Case (2) 662 ! ------- -------- 663 ! listPoint(jseg) listPoint(jseg+1) listPoint(jseg) F(i,j) 664 ! F(i,j)----------V(i+1,j)-------F(i+1,j) | 665 ! | 666 ! | 667 ! | 668 ! Case (3) U(i,j) 669 ! -------- | 670 ! | 671 ! listPoint(jseg+1) F(i,j+1) | 672 ! | | 673 ! | | 674 ! | listPoint(jseg+1) F(i,j-1) 675 ! | 676 ! | 677 ! U(i,j+1) 678 ! | Case(1) 679 ! | ------ 680 ! | 681 ! | listPoint(jseg+1) listPoint(jseg) 682 ! | F(i-1,j)-----------V(i,j) -------f(jseg) 683 ! listPoint(jseg) F(i,j) 684 ! 685 !------------------------------------------------------------------------------------------- 686 687 SELECT CASE( sec%direction(jseg) ) 688 CASE(0) ; k = sec%listPoint(jseg) 689 CASE(1) ; k = POINT_SECTION(sec%listPoint(jseg)%I+1,sec%listPoint(jseg)%J) 690 CASE(2) ; k = sec%listPoint(jseg) 691 CASE(3) ; k = POINT_SECTION(sec%listPoint(jseg)%I,sec%listPoint(jseg)%J+1) 692 END SELECT 693 694 !---------------------------| 695 ! LOOP ON THE LEVEL | 696 !---------------------------| 697 DO jk = 1, mbathy(k%I,k%J) !Sum of the transport on the vertical 698 ! ! compute temperature, salinity, insitu & potential density, ssh and depth at U/V point 699 SELECT CASE( sec%direction(jseg) ) 700 CASE(0,1) 701 ztn = interp(k%I,k%J,jk,'V',tsn(:,:,:,jp_tem) ) 702 zsn = interp(k%I,k%J,jk,'V',tsn(:,:,:,jp_sal) ) 703 zrhop = interp(k%I,k%J,jk,'V',rhop) 704 zrhoi = interp(k%I,k%J,jk,'V',rhd*rau0+rau0) 705 zsshn = 0.5*( sshn(k%I,k%J) + sshn(k%I,k%J+1) ) * vmask(k%I,k%J,1) 706 CASE(2,3) 707 ztn = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_tem) ) 708 zsn = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_sal) ) 709 zrhop = interp(k%I,k%J,jk,'U',rhop) 710 zrhoi = interp(k%I,k%J,jk,'U',rhd*rau0+rau0) 711 zsshn = 0.5*( sshn(k%I,k%J) + sshn(k%I+1,k%J) ) * umask(k%I,k%J,1) 712 END SELECT 713 ! 714 zdep= gdept_n(k%I,k%J,jk) 722 715 723 !compute velocity with the correct direction724 SELECT CASE( sec%direction(jseg) )725 CASE(0,1)726 zumid=0.727 zvmid=isgnv*vn(k%I,k%J,jk)*vmask(k%I,k%J,jk)728 CASE(2,3)729 zumid=isgnu*un(k%I,k%J,jk)*umask(k%I,k%J,jk)730 zvmid=0.731 END SELECT732 733 !zTnorm=transport through one cell;734 !velocity* cell's length * cell's thickness735 zTnorm=zumid*e2u(k%I,k%J)* e3u_n(k%I,k%J,jk)+ &736 zvmid*e1v(k%I,k%J)* e3v_n(k%I,k%J,jk) 737 738 #if ! defined key_vvl 739 !add transport due to free surface740 IF( jk==1 )THEN741 zTnorm = zTnorm + zumid* e2u(k%I,k%J) * zsshn * umask(k%I,k%J,jk) + &742 zvmid* e1v(k%I,k%J) * zsshn * vmask(k%I,k%J,jk)743 ENDIF744 #endif 716 SELECT CASE( sec%direction(jseg) ) !compute velocity with the correct direction 717 CASE(0,1) 718 zumid=0._wp 719 zvmid=isgnv*vn(k%I,k%J,jk)*vmask(k%I,k%J,jk) 720 CASE(2,3) 721 zumid=isgnu*un(k%I,k%J,jk)*umask(k%I,k%J,jk) 722 zvmid=0._wp 723 END SELECT 724 725 !zTnorm=transport through one cell; 726 !velocity* cell's length * cell's thickness 727 zTnorm = zumid*e2u(k%I,k%J) * e3u_n(k%I,k%J,jk) & 728 & + zvmid*e1v(k%I,k%J) * e3v_n(k%I,k%J,jk) 729 730 !!gm THIS is WRONG no transport due to ssh in linear free surface case !!!!! 731 IF( ln_linssh ) THEN !add transport due to free surface 732 IF( jk==1 ) THEN 733 zTnorm = zTnorm + zumid* e2u(k%I,k%J) * zsshn * umask(k%I,k%J,jk) & 734 & + zvmid* e1v(k%I,k%J) * zsshn * vmask(k%I,k%J,jk) 735 ENDIF 736 ENDIF 737 !!gm end 745 738 !COMPUTE TRANSPORT 746 739 747 740 transports_3d(1,jsec,jseg,jk) = transports_3d(1,jsec,jseg,jk) + zTnorm 748 741 749 IF 742 IF( sec%llstrpond ) THEN 750 743 transports_3d(2,jsec,jseg,jk) = transports_3d(2,jsec,jseg,jk) + zTnorm * ztn * zrhop * rcp 751 744 transports_3d(3,jsec,jseg,jk) = transports_3d(3,jsec,jseg,jk) + zTnorm * zsn * zrhop * 0.001 752 745 ENDIF 753 746 754 END DO !end of loop on the level747 END DO !end of loop on the level 755 748 756 749 #if defined key_lim2 || defined key_lim3 … … 793 786 transports_2d(2,jsec,jseg) = transports_2d(2,jsec,jseg) + (zTnorm)* & 794 787 a_i(sec%listPoint(jseg)%I,sec%listPoint(jseg)%J,jl) 795 END DO788 END DO 796 789 #endif 797 790 … … 799 792 #endif 800 793 801 END DO !end of loop on the segment794 END DO !end of loop on the segment 802 795 803 796 ENDIF !end of sec%nb_point =0 case 804 797 ! 805 798 END SUBROUTINE transport 806 799 800 807 801 SUBROUTINE dia_dct_sum(sec,jsec) 808 802 !!------------------------------------------------------------- … … 986 980 #endif 987 981 988 END DO !end of loop on the segment982 END DO !end of loop on the segment 989 983 990 984 ELSE !if sec%nb_point =0 … … 995 989 996 990 END SUBROUTINE dia_dct_sum 997 991 992 998 993 SUBROUTINE dia_dct_wri(kt,ksec,sec) 999 994 !!------------------------------------------------------------- … … 1133 1128 sec%transport(9,1),sec%transport(10,1), & 1134 1129 sec%transport(9,1)+sec%transport(10,1) 1135 ENDIF1130 ENDIF 1136 1131 1137 118 FORMAT(I8,1X,I8,1X,I4,1X,A30,1X,f9.2,1X,I4,3X,A8,1X,2F12.4,5X,3F12.4)1138 119 FORMAT(I8,1X,I8,1X,I4,1X,A30,1X,f9.2,1X,I4,3X,A8,1X,2F12.4,5X,3E15.6)1139 1140 CALL wrk_dealloc(nb_type_class , zsumclasses )1141 !1142 END SUBROUTINE dia_dct_wri1143 1144 1145 FUNCTION interp(ki, kj, kk, cd_point, ptab)1132 118 FORMAT(I8,1X,I8,1X,I4,1X,A30,1X,f9.2,1X,I4,3X,A8,1X,2F12.4,5X,3F12.4) 1133 119 FORMAT(I8,1X,I8,1X,I4,1X,A30,1X,f9.2,1X,I4,3X,A8,1X,2F12.4,5X,3E15.6) 1134 1135 CALL wrk_dealloc(nb_type_class , zsumclasses ) 1136 ! 1137 END SUBROUTINE dia_dct_wri 1138 1139 1140 FUNCTION interp(ki, kj, kk, cd_point, ptab) 1146 1141 !!---------------------------------------------------------------------- 1147 1142 !! … … 1297 1292 #endif 1298 1293 1294 !!====================================================================== 1299 1295 END MODULE diadct -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r5845 r5866 109 109 IF( ln_trabbc ) z_frc_trd_t = z_frc_trd_t + glob_sum( qgh_trd0(:,:) * surf(:,:) ) 110 110 ! 111 IF( .NOT. lk_vvl) THEN111 IF( ln_linssh ) THEN 112 112 IF ( ln_isfcav ) THEN 113 113 DO ji=1,jpi … … 129 129 frc_s = frc_s + z_frc_trd_s * rdt 130 130 ! ! Advection flux through fixed surface (z=0) 131 IF( .NOT. lk_vvl) THEN131 IF( ln_linssh ) THEN 132 132 frc_wn_t = frc_wn_t + z_wn_trd_t * rdt 133 133 frc_wn_s = frc_wn_s + z_wn_trd_s * rdt … … 145 145 146 146 ! heat & salt content variation (associated with ssh) 147 IF( .NOT. lk_vvl) THEN147 IF( ln_linssh ) THEN 148 148 IF ( ln_isfcav ) THEN 149 149 DO ji = 1, jpi … … 175 175 ! Substract forcing from heat content, salt content and volume variations 176 176 zdiff_v1 = zdiff_v1 - frc_v 177 IF( lk_vvl) zdiff_v2 = zdiff_v2 - frc_v177 IF( .NOT.ln_linssh ) zdiff_v2 = zdiff_v2 - frc_v 178 178 zdiff_hc = zdiff_hc - frc_t 179 179 zdiff_sc = zdiff_sc - frc_s 180 IF( .NOT. lk_vvl) THEN180 IF( ln_linssh ) THEN 181 181 zdiff_hc1 = zdiff_hc + z_ssh_hc 182 182 zdiff_sc1 = zdiff_sc + z_ssh_sc … … 194 194 195 195 !!gm to be added ? 196 ! IF( .NOT. lk_vvl) THEN ! fixed volume, add the ssh contribution196 ! IF( ln_linssh ) THEN ! fixed volume, add the ssh contribution 197 197 ! zvol_tot = zvol_tot + glob_sum( surf(:,:) * sshn(:,:) ) 198 198 ! ENDIF 199 199 !!gm end 200 200 201 IF( lk_vvl) THEN201 IF( .NOT.ln_linssh ) THEN 202 202 CALL iom_put( 'bgtemper' , zdiff_hc / zvol_tot ) ! Temperature variation (C) 203 203 CALL iom_put( 'bgsaline' , zdiff_sc / zvol_tot ) ! Salinity variation (psu) … … 256 256 CALL iom_get( numror, 'frc_t', frc_t ) 257 257 CALL iom_get( numror, 'frc_s', frc_s ) 258 IF( .NOT. lk_vvl) THEN258 IF( ln_linssh ) THEN 259 259 CALL iom_get( numror, 'frc_wn_t', frc_wn_t ) 260 260 CALL iom_get( numror, 'frc_wn_s', frc_wn_s ) … … 264 264 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini ) 265 265 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini ) 266 IF( .NOT. lk_vvl) THEN266 IF( ln_linssh ) THEN 267 267 CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini ) 268 268 CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini ) … … 281 281 frc_t = 0._wp ! heat content - - - - 282 282 frc_s = 0._wp ! salt content - - - - 283 IF( .NOT. lk_vvl) THEN283 IF( ln_linssh ) THEN 284 284 IF ( ln_isfcav ) THEN 285 285 DO ji=1,jpi … … 307 307 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t ) 308 308 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s ) 309 IF( .NOT. lk_vvl) THEN309 IF( ln_linssh ) THEN 310 310 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t ) 311 311 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s ) … … 315 315 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini ) 316 316 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini ) 317 IF( .NOT. lk_vvl) THEN317 IF( ln_linssh ) THEN 318 318 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini ) 319 319 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini ) … … 384 384 ENDIF 385 385 386 IF( .NOT. lk_vvl )ALLOCATE( ssh_hc_loc_ini(jpi,jpj), ssh_sc_loc_ini(jpi,jpj),STAT=ierror )386 IF( ln_linssh ) ALLOCATE( ssh_hc_loc_ini(jpi,jpj), ssh_sc_loc_ini(jpi,jpj),STAT=ierror ) 387 387 IF( ierror > 0 ) THEN 388 388 CALL ctl_stop( 'dia_hsb: unable to allocate hc_loc_ini' ) ; RETURN -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DIA/diahth.F90
r5845 r5866 311 311 END DO 312 312 ! surface boundary condition 313 IF( lk_vvl) THEN ; zthick(:,:) = 0._wp ; htc3(:,:) = 0._wp314 ELSE ; zthick(:,:) = sshn(:,:) ; htc3(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) * tmask(:,:,1)313 IF( .NOT.ln_linssh ) THEN ; zthick(:,:) = 0._wp ; htc3(:,:) = 0._wp 314 ELSE ; zthick(:,:) = sshn(:,:) ; htc3(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) * tmask(:,:,1) 315 315 ENDIF 316 316 ! integration down to ilevel -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
r5845 r5866 146 146 ENDIF 147 147 148 IF( .NOT.lk_vvl) THEN148 IF( ln_linssh ) THEN 149 149 CALL iom_put( "e3t" , e3t_n(:,:,:) ) 150 150 CALL iom_put( "e3u" , e3u_n(:,:,:) ) … … 419 419 IF( nn_timing == 1 ) CALL timing_start('dia_wri') 420 420 ! 421 CALL wrk_alloc( jpi,jpj , zw2d )422 IF( lk_vvl) CALL wrk_alloc( jpi,jpj,jpk , zw3d )421 CALL wrk_alloc( jpi,jpj , zw2d ) 422 IF( .NOT.ln_linssh ) CALL wrk_alloc( jpi,jpj,jpk , zw3d ) 423 423 ! 424 424 ! Output the initial state and forcings … … 563 563 CALL histdef( nid_T, "vosaline", "Salinity" , "PSU" , & ! sn 564 564 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout ) 565 IF( lk_vvl) THEN565 IF( .NOT.ln_linssh ) THEN 566 566 CALL histdef( nid_T, "vovvle3t", "Level thickness" , "m" ,& ! e3t_n 567 567 & jpi, jpj, nh_T, ipk, 1, ipk, nz_T, 32, clop, zsto, zout ) … … 584 584 CALL histdef( nid_T, "sosfldow", "downward salt flux" , "PSU/m2/s", & ! sfx 585 585 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 586 IF( .NOT. lk_vvl) THEN586 IF( ln_linssh ) THEN 587 587 CALL histdef( nid_T, "sosst_cd", "Concentration/Dilution term on temperature" & ! emp * tsn(:,:,1,jp_tem) 588 588 & , "KgC/m2/s", & ! sosst_cd … … 730 730 ENDIF 731 731 732 IF( lk_vvl) THEN732 IF( .NOT.ln_linssh ) THEN 733 733 CALL histwrite( nid_T, "votemper", it, tsn(:,:,:,jp_tem) * e3t_n(:,:,:) , ndim_T , ndex_T ) ! heat content 734 734 CALL histwrite( nid_T, "vosaline", it, tsn(:,:,:,jp_sal) * e3t_n(:,:,:) , ndim_T , ndex_T ) ! salt content … … 741 741 CALL histwrite( nid_T, "sosaline", it, tsn(:,:,1,jp_sal) , ndim_hT, ndex_hT ) ! sea surface salinity 742 742 ENDIF 743 IF( lk_vvl) THEN743 IF( .NOT.ln_linssh ) THEN 744 744 zw3d(:,:,:) = ( ( e3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100 * tmask(:,:,:) ) ** 2 745 745 CALL histwrite( nid_T, "vovvle3t", it, e3t_n (:,:,:) , ndim_T , ndex_T ) ! level thickness … … 753 753 ! (includes virtual salt flux beneath ice 754 754 ! in linear free surface case) 755 IF( .NOT. lk_vvl) THEN755 IF( ln_linssh ) THEN 756 756 zw2d(:,:) = emp (:,:) * tsn(:,:,1,jp_tem) 757 757 CALL histwrite( nid_T, "sosst_cd", it, zw2d, ndim_hT, ndex_hT ) ! c/d term on sst … … 838 838 ENDIF 839 839 ! 840 CALL wrk_dealloc( jpi , jpj , zw2d )841 IF( lk_vvl) CALL wrk_dealloc( jpi , jpj , jpk , zw3d )840 CALL wrk_dealloc( jpi , jpj , zw2d ) 841 IF( .NOT.ln_linssh ) CALL wrk_dealloc( jpi , jpj , jpk , zw3d ) 842 842 ! 843 843 IF( nn_timing == 1 ) CALL timing_stop('dia_wri') … … 936 936 CALL histdef( id_i, "sometauy", "Meridional Wind Stress", "N/m2" , & ! j-wind stress 937 937 & jpi, jpj, nh_i, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 938 IF( lk_vvl) THEN938 IF( .NOT.ln_linssh ) THEN 939 939 CALL histdef( id_i, "vovvldep", "T point depth" , "m" , & ! t-point depth 940 940 & jpi, jpj, nh_i, jpk, 1, jpk, nz_i, 32, clop, zsto, zout ) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90
r5862 r5866 173 173 !! vertical coordinate and scale factors 174 174 !! --------------------------------------------------------------------- 175 ! !!* Namelist namzgr : vertical coordinate * 176 LOGICAL, PUBLIC :: ln_zco !: z-coordinate - full step 177 LOGICAL, PUBLIC :: ln_zps !: z-coordinate - partial step 178 LOGICAL, PUBLIC :: ln_sco !: s-coordinate or hybrid z-s coordinate 179 LOGICAL, PUBLIC :: ln_isfcav !: presence of ISF 180 181 !!gm 182 #if defined key_vvl 183 LOGICAL, PUBLIC, PARAMETER :: lk_vvl = .TRUE. !: variable grid flag 184 LOGICAL, PUBLIC :: lk_linssh = .FALSE. !: variable grid flag 185 #else 186 LOGICAL, PUBLIC, PARAMETER :: lk_vvl = .FALSE. !: variable grid flag 187 LOGICAL, PUBLIC :: lk_linssh = .TRUE. !: variable grid flag 188 #endif 189 !!gm 175 ! !!* Namelist namzgr : vertical coordinate * 176 LOGICAL, PUBLIC :: ln_zco !: z-coordinate - full step 177 LOGICAL, PUBLIC :: ln_zps !: z-coordinate - partial step 178 LOGICAL, PUBLIC :: ln_sco !: s-coordinate or hybrid z-s coordinate 179 LOGICAL, PUBLIC :: ln_isfcav !: presence of ISF 180 LOGICAL, PUBLIC :: ln_linssh !: variable grid flag 190 181 191 182 ! ! ref. ! before ! now ! after ! -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90
r5863 r5866 101 101 END DO 102 102 ! 103 IF( lk_vvl ) THEN !== time varying coordinate system ==! 104 ! 105 CALL dom_vvl_init ! set before/now/after variables 106 ! 107 ELSE !== Fix in time ==! set everything to the reference one for all 108 ! 103 ! !== time varying part of coordinate system ==! 104 ! 105 IF( .NOT.ln_linssh ) THEN ! time varying : initialize before/now/after variables 106 ! 107 CALL dom_vvl_init 108 ! 109 ELSE ! Fix in time : set to the reference one for all 109 110 ! before ! now ! after ! 110 111 ; gdept_b = gdept_0 ; gdept_n = gdept_0 ! --- ! depth of grid-points -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DOM/domstp.F90
r5845 r5866 82 82 IF(lwp) WRITE(numout,*)' accelerating the convergence' 83 83 IF(lwp) WRITE(numout,*)' dynamics time step = ', rdt/3600., ' hours' 84 IF( ln_sco .AND. rdtmin /= rdtmax .AND. lk_vvl) &84 IF( ln_sco .AND. rdtmin /= rdtmax .AND. .NOT.ln_linssh ) & 85 85 & CALL ctl_stop ( ' depth dependent acceleration of convergence not implemented in s-coordinates & 86 86 & nor in variable volume' ) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r5862 r5866 178 178 ht_n(:,:) = e3t_n(:,:,1) * tmask(:,:,1) !!gm BUG : this should be 1/2 * e3w(k=1) .... 179 179 hu_b(:,:) = e3u_b(:,:,1) * umask(:,:,1) 180 hv_b(:,:) = e3u_b(:,:,1) * vmask(:,:,1)181 180 hu_n(:,:) = e3u_n(:,:,1) * umask(:,:,1) 181 hv_b(:,:) = e3v_b(:,:,1) * vmask(:,:,1) 182 182 hv_n(:,:) = e3v_n(:,:,1) * vmask(:,:,1) 183 183 DO jk = 2, jpkm1 … … 617 617 618 618 ! Vertical scale factor interpolations 619 ! ------------------------------------ 620 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 619 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n(:,:,:), 'W' ) 621 620 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 622 621 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 623 CALL dom_vvl_interpol( e3t_b(:,:,:), e3w_b(:,:,:), 'W' )622 CALL dom_vvl_interpol( e3t_b(:,:,:), e3w_b(:,:,:), 'W' ) 624 623 CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 625 624 CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 626 ! t- and w- points depth 627 ! ---------------------- 628 ! set the isf depth as it is in the initial step 625 626 ! t- and w- points depth (set the isf depth as it is in the initial step) 629 627 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 630 628 gdepw_n(:,:,1) = 0.0_wp … … 656 654 ! Write outputs 657 655 ! ============= 658 CALL iom_put( "e3t" , e3t_n(:,:,:) )659 CALL iom_put( "e3u" , e3u_n(:,:,:) )660 CALL iom_put( "e3v" , e3v_n(:,:,:) )661 CALL iom_put( "e3w" , e3w_n(:,:,:) )662 CALL iom_put( "tpt_dep" 656 CALL iom_put( "e3t", e3t_n(:,:,:) ) 657 CALL iom_put( "e3u", e3u_n(:,:,:) ) 658 CALL iom_put( "e3v", e3v_n(:,:,:) ) 659 CALL iom_put( "e3w", e3w_n(:,:,:) ) 660 CALL iom_put( "tpt_dep", gde3w_n(:,:,:) ) 663 661 IF( iom_use("e3tdef") ) & 664 CALL iom_put( "e3tdef" , ( ( e3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100* tmask(:,:,:) ) ** 2 )662 CALL iom_put( "e3tdef", ( ( e3t_n(:,:,:) - e3t_0(:,:,:) ) / e3t_0(:,:,:) * 100. * tmask(:,:,:) ) ** 2 ) 665 663 666 664 ! write restart file 667 665 ! ================== 668 IF( lrst_oce ) CALL dom_vvl_rst( kt, 'WRITE' )669 ! 670 IF( nn_timing == 1 ) CALL timing_stop('dom_vvl_sf_swp')666 IF( lrst_oce ) CALL dom_vvl_rst( kt, 'WRITE' ) 667 ! 668 IF( nn_timing == 1 ) CALL timing_stop('dom_vvl_sf_swp') 671 669 ! 672 670 END SUBROUTINE dom_vvl_sf_swp … … 691 689 !!---------------------------------------------------------------------- 692 690 ! 693 IF( nn_timing == 1 ) CALL timing_start('dom_vvl_interpol')691 IF( nn_timing == 1 ) CALL timing_start('dom_vvl_interpol') 694 692 ! 695 693 SELECT CASE ( pout ) !== type of interpolation ==! … … 765 763 END SELECT 766 764 ! 767 IF( nn_timing == 1 ) CALL timing_stop('dom_vvl_interpol')765 IF( nn_timing == 1 ) CALL timing_stop('dom_vvl_interpol') 768 766 ! 769 767 END SUBROUTINE dom_vvl_interpol … … 970 968 ! 971 969 IF( ioptio /= 1 ) CALL ctl_stop( 'Choose ONE vertical coordinate in namelist nam_vvl' ) 972 IF( .NOT. ln_vvl_zstar .AND. nn_isf .NE. 0)CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' )970 IF( .NOT. ln_vvl_zstar .AND. nn_isf /= 0) CALL ctl_stop( 'Only vvl_zstar has been tested with ice shelf cavity' ) 973 971 ! 974 972 IF(lwp) THEN ! Print the choice … … 984 982 ! 985 983 #if defined key_agrif 986 IF (.NOT.Agrif_Root()) CALL ctl_stop( 'AGRIF not implemented with non-linear free surface (key_vvl)' )984 IF(.NOT.Agrif_Root() ) CALL ctl_stop( 'AGRIF not implemented with non-linear free surface' ) 987 985 #endif 988 986 ! … … 991 989 !!====================================================================== 992 990 END MODULE domvvl 993 994 995 -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90
r5862 r5866 102 102 INTEGER :: ios 103 103 ! 104 NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav 104 NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav, ln_linssh 105 105 !!---------------------------------------------------------------------- 106 106 ! … … 120 120 WRITE(numout,*) 'dom_zgr : vertical coordinate' 121 121 WRITE(numout,*) '~~~~~~~' 122 WRITE(numout,*) ' Namelist namzgr : set vertical coordinate' 123 WRITE(numout,*) ' z-coordinate - full steps ln_zco = ', ln_zco 124 WRITE(numout,*) ' z-coordinate - partial steps ln_zps = ', ln_zps 125 WRITE(numout,*) ' s- or hybrid z-s-coordinate ln_sco = ', ln_sco 126 WRITE(numout,*) ' ice shelf cavities ln_isfcav = ', ln_isfcav 122 WRITE(numout,*) ' Namelist namzgr : set vertical coordinate' 123 WRITE(numout,*) ' z-coordinate - full steps ln_zco = ', ln_zco 124 WRITE(numout,*) ' z-coordinate - partial steps ln_zps = ', ln_zps 125 WRITE(numout,*) ' s- or hybrid z-s-coordinate ln_sco = ', ln_sco 126 WRITE(numout,*) ' ice shelf cavities ln_isfcav = ', ln_isfcav 127 WRITE(numout,*) ' linear free surface ln_linssh = ', ln_linssh 127 128 ENDIF 129 130 IF( ln_linssh .AND. lwp) WRITE(numout,*) ' linear free surface: the vertical mesh does not change in time' 128 131 129 132 ioptio = 0 ! Check Vertical coordinate options … … 2059 2062 e3uw_n (:,:,:) = e3uw_0 (:,:,:) 2060 2063 e3vw_n (:,:,:) = e3vw_0 (:,:,:) 2064 !!gm and obviously in the following, use the _0 arrays until the end of this subroutine 2061 2065 !! gm end 2062 2066 !! … … 2190 2194 !!---------------------------------------------------------------------- 2191 2195 2192 CALL wrk_alloc( jpi,jpj,jpk, z_gsigw3, z_gsigt3, z_gsi3w3 )2193 CALL wrk_alloc( jpi,jpj,jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 )2196 CALL wrk_alloc( jpi,jpj,jpk, z_gsigw3, z_gsigt3, z_gsi3w3 ) 2197 CALL wrk_alloc( jpi,jpj,jpk, z_esigt3, z_esigw3, z_esigtu3, z_esigtv3, z_esigtf3, z_esigwu3, z_esigwv3 ) 2194 2198 2195 2199 z_gsigw3 = 0._wp ; z_gsigt3 = 0._wp ; z_gsi3w3 = 0._wp -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90
r5845 r5866 124 124 ! 125 125 ! - ML - sshn could be modified by istate_eel, so that initialization of e3t_b is done here 126 IF( lk_vvl) THEN126 IF( .NOT.ln_linssh ) THEN 127 127 DO jk = 1, jpk 128 128 e3t_b(:,:,jk) = e3t_n(:,:,jk) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_cen2.F90
r5845 r5866 119 119 zfv_vw(:,:,jpk) = 0.e0 120 120 ! ! Surface value : 121 IF( lk_vvl ) THEN! variable volume : flux set to zero122 zfu_uw(:,:, 1 ) = 0. e0123 zfv_vw(:,:, 1 ) = 0. e0121 IF( .NOT.ln_linssh ) THEN ! variable volume : flux set to zero 122 zfu_uw(:,:, 1 ) = 0._wp 123 zfv_vw(:,:, 1 ) = 0._wp 124 124 ELSE ! constant volume : advection through the surface 125 125 DO jj = 2, jpjm1 -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_ubs.F90
r5845 r5866 208 208 zfv_vw(:,:,jpk) = 0.e0 209 209 ! ! Surface value : 210 IF( lk_vvl ) THEN! variable volume : flux set to zero211 zfu_uw(:,:, 1 ) = 0. e0212 zfv_vw(:,:, 1 ) = 0. e0210 IF( .NOT.ln_linssh ) THEN ! variable volume : flux set to zero 211 zfu_uw(:,:, 1 ) = 0._wp 212 zfv_vw(:,:, 1 ) = 0._wp 213 213 ELSE ! constant volume : advection through the surface 214 214 DO jj = 2, jpjm1 215 215 DO ji = fs_2, fs_jpim1 216 zfu_uw(ji,jj, 1 ) = 2. e0* ( zfw(ji,jj,1) + zfw(ji+1,jj ,1) ) * un(ji,jj,1)217 zfv_vw(ji,jj, 1 ) = 2. e0* ( zfw(ji,jj,1) + zfw(ji ,jj+1,1) ) * vn(ji,jj,1)216 zfu_uw(ji,jj, 1 ) = 2._wp * ( zfw(ji,jj,1) + zfw(ji+1,jj ,1) ) * un(ji,jj,1) 217 zfv_vw(ji,jj, 1 ) = 2._wp * ( zfw(ji,jj,1) + zfw(ji ,jj+1,1) ) * vn(ji,jj,1) 218 218 END DO 219 219 END DO -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r5864 r5866 162 162 & either ln_hpg_sco or ln_hpg_prj instead') 163 163 ! 164 IF( lk_vvl .AND. .NOT. (ln_hpg_sco.OR.ln_hpg_prj.OR.ln_hpg_isf) )&165 & CALL ctl_stop('dyn_hpg_init : variable volume key_vvl requires:&166 & the standard jacobian formulation hpg_sco or&167 & the pressure jacobian formulation hpg_prj')164 IF( .NOT.ln_linssh .AND. .NOT. (ln_hpg_sco.OR.ln_hpg_prj.OR.ln_hpg_isf) ) & 165 & CALL ctl_stop('dyn_hpg_init : non-linear free surface requires either ', & 166 & ' the standard jacobian formulation hpg_sco or ' , & 167 & ' the pressure jacobian formulation hpg_prj' ) 168 168 169 169 IF( ln_hpg_isf .AND. .NOT. ln_isfcav ) & … … 393 393 zcoef0 = - grav * 0.5_wp 394 394 ! To use density and not density anomaly 395 IF ( lk_vvl) THEN ; znad = 1._wp ! Variable volume396 ELSE ; znad = 0._wp ! Fixed volume395 IF ( .NOT.ln_linssh ) THEN ; znad = 1._wp ! Variable volume 396 ELSE ; znad = 0._wp ! Fixed volume 397 397 ENDIF 398 398 … … 484 484 zcoef0 = - grav * 0.5_wp 485 485 ! To use density and not density anomaly 486 ! IF ( lk_vvl) THEN ; znad = 1._wp ! Variable volume487 ! ELSE ; znad = 0._wp ! Fixed volume486 ! IF ( .NOT.ln_linssh ) THEN ; znad = 1._wp ! Variable volume 487 ! ELSE ; znad = 0._wp ! Fixed volume 488 488 ! ENDIF 489 489 znad=1._wp … … 970 970 zcoef0 = - grav 971 971 znad = 0.0_wp 972 IF( lk_vvl )znad = 1._wp972 IF( .NOT.ln_linssh ) znad = 1._wp 973 973 974 974 ! Clean 3-D work arrays … … 1145 1145 1146 1146 zdpdx1 = zcoef0 * r1_e1u(ji,jj) * ( zhpi(ji+1,jj,jk) - zhpi(ji,jj,jk) ) 1147 IF( lk_vvl) THEN1147 IF( .NOT.ln_linssh ) THEN 1148 1148 zdpdx2 = zcoef0 * r1_e1u(ji,jj) * & 1149 1149 & ( REAL(jis-jid, wp) * (zpwes + zpwed) + (sshn(ji+1,jj)-sshn(ji,jj)) ) … … 1202 1202 1203 1203 zdpdy1 = zcoef0 * r1_e2v(ji,jj) * ( zhpi(ji,jj+1,jk) - zhpi(ji,jj,jk) ) 1204 IF( lk_vvl) THEN1204 IF( .NOT.ln_linssh ) THEN 1205 1205 zdpdy2 = zcoef0 * r1_e2v(ji,jj) * & 1206 1206 ( REAL(jjs-jjd, wp) * (zpnss + zpnsd) + (sshn(ji,jj+1)-sshn(ji,jj)) ) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap_blp.F90
r5845 r5866 86 86 DO ji = fs_2, jpi ! vector opt. 87 87 ! ! ahm * e3 * curl (computed from 1 to jpim1/jpjm1) 88 zcur(ji-1,jj-1) = ahmf(ji-1,jj-1,jk) * e3f_n(ji-1,jj-1,jk) * r1_e1e2f(ji-1,jj-1) & 89 & * ( e2v(ji ,jj-1) * pvb(ji ,jj-1,jk) - e2v(ji-1,jj-1) * pvb(ji-1,jj-1,jk) & 90 & - e1u(ji-1,jj ) * pub(ji-1,jj ,jk) + e1u(ji-1,jj-1) * pub(ji-1,jj-1,jk) ) * fmask(ji-1,jj-1,jk) 88 !!gm open question here : fse3f at before or now ? probably now... 89 !!gm note that ahmf has already been multiplied by fmask 90 zcur(ji-1,jj-1) = ahmf(ji-1,jj-1,jk) * e3f_n(ji-1,jj-1,jk) * r1_e1e2f(ji-1,jj-1) & 91 & * ( e2v(ji ,jj-1) * pvb(ji ,jj-1,jk) - e2v(ji-1,jj-1) * pvb(ji-1,jj-1,jk) & 92 & - e1u(ji-1,jj ) * pub(ji-1,jj ,jk) + e1u(ji-1,jj-1) * pub(ji-1,jj-1,jk) ) 91 93 ! ! ahm * div (computed from 2 to jpi/jpj) 92 zdiv(ji,jj) = ahmt(ji,jj,jk) / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) * tmask(ji,jj,jk) & 93 & * ( e2u(ji,jj)*e3u_n(ji,jj,jk) * pub(ji,jj,jk) - e2u(ji-1,jj)*e3u_n(ji-1,jj,jk) * pub(ji-1,jj,jk) & 94 & + e1v(ji,jj)*e3v_n(ji,jj,jk) * pvb(ji,jj,jk) - e1v(ji,jj-1)*e3v_n(ji,jj-1,jk) * pvb(ji,jj-1,jk) ) 94 !!gm note that ahmt has already been multiplied by tmask 95 zdiv(ji,jj) = ahmt(ji,jj,jk) * r1_e1e2t(ji,jj) / e3t_b(ji,jj,jk) & 96 & * ( e2u(ji,jj)*e3u_b(ji,jj,jk) * pub(ji,jj,jk) - e2u(ji-1,jj)*e3u_b(ji-1,jj,jk) * pub(ji-1,jj,jk) & 97 & + e1v(ji,jj)*e3v_b(ji,jj,jk) * pvb(ji,jj,jk) - e1v(ji,jj-1)*e3v_b(ji,jj-1,jk) * pvb(ji,jj-1,jk) ) 95 98 END DO 96 99 END DO … … 98 101 DO jj = 2, jpjm1 ! - curl( curl) + grad( div ) 99 102 DO ji = fs_2, fs_jpim1 ! vector opt. 100 pua(ji,jj,jk) = pua(ji,jj,jk) + zsign * ( 101 & - ( zcur(ji ,jj) - zcur(ji,jj-1) ) / ( e2u(ji,jj) * e3u_n(ji,jj,jk)) &103 pua(ji,jj,jk) = pua(ji,jj,jk) + zsign * ( & 104 & - ( zcur(ji ,jj) - zcur(ji,jj-1) ) * r1_e2u(ji,jj) / e3u_n(ji,jj,jk) & 102 105 & + ( zdiv(ji+1,jj) - zdiv(ji,jj ) ) * r1_e1u(ji,jj) ) 103 106 ! 104 pva(ji,jj,jk) = pva(ji,jj,jk) + zsign * ( 105 & ( zcur(ji,jj ) - zcur(ji-1,jj) ) / ( e1v(ji,jj) * e3v_n(ji,jj,jk)) &107 pva(ji,jj,jk) = pva(ji,jj,jk) + zsign * ( & 108 & ( zcur(ji,jj ) - zcur(ji-1,jj) ) * r1_e1v(ji,jj) / e3v_n(ji,jj,jk) & 106 109 & + ( zdiv(ji,jj+1) - zdiv(ji ,jj) ) * r1_e2v(ji,jj) ) 107 110 END DO -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90
r5845 r5866 73 73 !! ** Method : * After velocity is compute using a leap-frog scheme: 74 74 !! (ua,va) = (ub,vb) + 2 rdt (ua,va) 75 !! Note that with flux form advection and variable volume layer 76 !! (lk_vvl=T), the leap-frog is applied on thickness weighted 77 !! velocity. 75 !! Note that with flux form advection and non linear free surface, 76 !! the leap-frog is applied on thickness weighted velocity. 78 77 !! Note also that in filtered free surface (lk_dynspg_flt=T), 79 78 !! the time stepping has already been done in dynspg module … … 88 87 !! (ub,vb) = (un,vn) + atfp [ (ub,vb) + (ua,va) - 2 (un,vn) ] 89 88 !! (un,vn) = (ua,va). 90 !! Note that with flux form advection and variable volume layer 91 !! (lk_vvl=T), the time filter is applied on thickness weighted 92 !! velocity. 89 !! Note that with flux form advection and non linear free surface, 90 !! the time filter is applied on thickness weighted velocity. 93 91 !! 94 92 !! ** Action : ub,vb filtered before horizontal velocity of next time-step … … 137 135 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 138 136 ! 139 IF( ln_dynadv_vec .OR. .NOT. lk_vvl ) THEN ! applied on velocity137 IF( ln_dynadv_vec .OR. ln_linssh ) THEN !== applied on velocity ==! 140 138 DO jk = 1, jpkm1 141 139 ua(:,:,jk) = ( ub(:,:,jk) + z2dt * ua(:,:,jk) ) * umask(:,:,jk) 142 140 va(:,:,jk) = ( vb(:,:,jk) + z2dt * va(:,:,jk) ) * vmask(:,:,jk) 143 141 END DO 144 ELSE ! applied on thickness weighted velocity142 ELSE !== applied on thickness weighted velocity ==! 145 143 DO jk = 1, jpkm1 146 144 ua(:,:,jk) = ( ub(:,:,jk) * e3u_b(:,:,jk) & … … 225 223 vn(:,:,jk) = va(:,:,jk) 226 224 END DO 227 IF (lk_vvl) THEN225 IF(.NOT.ln_linssh ) THEN 228 226 DO jk = 1, jpkm1 229 227 e3t_b(:,:,jk) = e3t_n(:,:,jk) 230 228 e3u_b(:,:,jk) = e3u_n(:,:,jk) 231 229 e3v_b(:,:,jk) = e3v_n(:,:,jk) 232 END DO230 END DO 233 231 ENDIF 234 232 ELSE !* Leap-Frog : Asselin filter and swap 235 233 ! ! =============! 236 IF( .NOT. lk_vvl ) THEN! Fixed volume !234 IF( ln_linssh ) THEN ! Fixed volume ! 237 235 ! ! =============! 238 236 DO jk = 1, jpkm1 … … 354 352 ! 355 353 ! 356 IF (lk_vvl) THEN354 IF(.NOT.ln_linssh ) THEN 357 355 hu_b(:,:) = e3u_b(:,:,1) * umask(:,:,1) 358 356 hv_b(:,:) = e3v_b(:,:,1) * vmask(:,:,1) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_exp.F90
r5845 r5866 73 73 spgu(:,:) = 0._wp ; spgv(:,:) = 0._wp 74 74 ! 75 IF( lk_vvl .AND. lwp ) WRITE(numout,*) ' lk_vvl=T: spg is included in dynhpg'75 IF( .NOT.ln_linssh .AND. lwp ) WRITE(numout,*) ' non linear free surface: spg is included in dynhpg' 76 76 ENDIF 77 77 78 IF( .NOT. lk_vvl ) THEN !* fixed volume : add the surface pressure gradient trend78 IF( ln_linssh ) THEN !* linear free surface : add the surface pressure gradient trend 79 79 ! 80 80 DO jj = 2, jpjm1 ! now surface pressure gradient -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90
r5845 r5866 138 138 ! Evaluate the masked next velocity (effect of the additional force not included) 139 139 ! --------------------------------- 140 IF( lk_vvl ) THEN! variable volume (surface pressure gradient already included in dyn_hpg)140 IF( .NOT.ln_linssh ) THEN ! variable volume (surface pressure gradient already included in dyn_hpg) 141 141 ! 142 142 IF( ln_dynadv_vec ) THEN ! vector form : applied on velocity … … 230 230 CALL lbc_lnk( spgv, 'V', -1. ) 231 231 232 IF( lk_vvl ) CALL sol_mat( kt ) ! build the matrix at kt (vvl case only)232 IF( .NOT.ln_linssh ) CALL sol_mat( kt ) ! build the matrix at kt (non-linear free surface only) 233 233 234 234 ! Right hand side of the elliptic equation and first guess -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r5845 r5866 212 212 ! and update depths at T-F points (ht and zhf resp.) at each barotropic time step 213 213 ! 214 IF ( kt == nit000 .OR. lk_vvl) THEN214 IF ( kt == nit000 .OR. .NOT.ln_linssh ) THEN 215 215 IF ( ln_dynvor_een ) THEN !== EEN scheme ==! 216 216 SELECT CASE( nn_een_e3f ) !* ff/e3 at F-point … … 366 366 ! !* Right-Hand-Side of the barotropic momentum equation 367 367 ! ! ---------------------------------------------------- 368 IF( lk_vvl ) THEN! Variable volume : remove surface pressure gradient368 IF( .NOT.ln_linssh ) THEN ! Variable volume : remove surface pressure gradient 369 369 DO jj = 2, jpjm1 370 370 DO ji = fs_2, fs_jpim1 ! vector opt. … … 530 530 va_e(:,:) = za1 * zvn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:) 531 531 532 IF( lk_vvl ) THEN!* Update ocean depth (variable volume case only)532 IF( .NOT.ln_linssh ) THEN !* Update ocean depth (variable volume case only) 533 533 ! ! ------------------ 534 534 ! Extrapolate Sea Level at step jit+0.5: … … 562 562 ! 563 563 #if defined key_agrif 564 ! Set fluxes during predictor step to ensure 565 ! volume conservation 566 IF( (.NOT.Agrif_Root()).AND.ln_bt_fw ) THEN 564 ! Set fluxes during predictor step to ensure volume conservation 565 IF( .NOT.Agrif_Root() .AND. ln_bt_fw ) THEN 567 566 IF((nbondi == -1).OR.(nbondi == 2)) THEN 568 567 DO jj=1,jpj … … 604 603 605 604 #if defined key_bdy 606 ! Duplicate sea level across open boundaries (this is only cosmetic if l k_vvl=.false.)607 IF (lk_bdy)CALL bdy_ssh( ssha_e )605 ! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T) 606 IF( lk_bdy ) CALL bdy_ssh( ssha_e ) 608 607 #endif 609 608 #if defined key_agrif 610 IF( .NOT.Agrif_Root() ) CALL agrif_ssh_ts( jn )609 IF( .NOT.Agrif_Root() ) CALL agrif_ssh_ts( jn ) 611 610 #endif 612 611 ! 613 612 ! Sea Surface Height at u-,v-points (vvl case only) 614 IF ( lk_vvl) THEN613 IF( .NOT.ln_linssh ) THEN 615 614 DO jj = 2, jpjm1 616 615 DO ji = 2, jpim1 ! NO Vector Opt. … … 644 643 za3=0.013_wp ! za3 = eps 645 644 ENDIF 646 645 ! 647 646 zsshp2_e(:,:) = za0 * ssha_e(:,:) + za1 * sshn_e (:,:) & 648 647 & + za2 * sshb_e(:,:) + za3 * sshbb_e(:,:) 649 650 648 ! 651 649 ! Compute associated depths at U and V points: 652 IF ( lk_vvl.AND.(.NOT.ln_dynadv_vec) ) THEN650 IF( ln_dynadv_vec .OR. ln_linssh ) THEN !* Vector form 653 651 ! 654 652 DO jj = 2, jpjm1 … … 667 665 ! 668 666 ! Add Coriolis trend: 669 ! zwz array below or triads normally depend on sea level with key_vvland should be updated667 ! zwz array below or triads normally depend on sea level with ln_linssh=F and should be updated 670 668 ! at each time step. We however keep them constant here for optimization. 671 669 ! Recall that zwx and zwy arrays hold fluxes at this stage: … … 741 739 ! 742 740 ! Set next velocities: 743 IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN !Vector form741 IF( ln_dynadv_vec .OR. ln_linssh ) THEN !* Vector form 744 742 DO jj = 2, jpjm1 745 743 DO ji = fs_2, fs_jpim1 ! vector opt. … … 758 756 END DO 759 757 760 ELSE !Flux form758 ELSE !* Flux form 761 759 DO jj = 2, jpjm1 762 760 DO ji = fs_2, fs_jpim1 ! vector opt. … … 780 778 ENDIF 781 779 ! 782 IF( lk_vvl ) THEN!* Update ocean depth (variable volume case only)780 IF( .NOT.ln_linssh ) THEN !* Update ocean depth (variable volume case only) 783 781 ! ! ---------------------------------------------- 784 782 hu_e (:,:) = hu_0(:,:) + zsshu_a(:,:) … … 788 786 ! 789 787 ENDIF 790 ! 791 ! 788 ! !* domain lateral boundary 789 ! ! ----------------------- 792 790 ! 793 791 CALL lbc_lnk_multi( ua_e, 'U', -1._wp, va_e , 'V', -1._wp ) 794 792 ! 795 793 #if defined key_bdy 796 794 ! ! open boundaries 797 795 IF( lk_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, zun_e, zvn_e, hur_e, hvr_e, ssha_e ) 798 796 #endif … … 817 815 ! ! ---------------------- 818 816 za1 = wgtbtp1(jn) 819 IF (( ln_dynadv_vec ).OR. (.NOT. lk_vvl)) THEN ! Sum velocities817 IF( ln_dynadv_vec .OR. ln_linssh ) THEN ! Sum velocities 820 818 ua_b (:,:) = ua_b (:,:) + za1 * ua_e (:,:) 821 819 va_b (:,:) = va_b (:,:) + za1 * va_e (:,:) … … 835 833 ! At this stage ssha holds a time averaged value 836 834 ! ! Sea Surface Height at u-,v- and f-points 837 IF( lk_vvl ) THEN ! (required only in key_vvlcase)835 IF( .NOT.ln_linssh ) THEN ! (required only in non-linear free surface case) 838 836 DO jj = 1, jpjm1 839 837 DO ji = 1, jpim1 ! NO Vector Opt. … … 864 862 ! 865 863 ! Update barotropic trend: 866 IF( ln_dynadv_vec .OR. .NOT.lk_vvl) THEN864 IF( ln_dynadv_vec .OR. ln_linssh ) THEN 867 865 DO jk=1,jpkm1 868 866 ua(:,:,jk) = ua(:,:,jk) + ( ua_b(:,:) - ub_b(:,:) ) * z1_2dt_b … … 1079 1077 CALL wrk_alloc( jpi, jpj, zcu ) 1080 1078 ! 1081 IF (lk_vvl) THEN1079 IF( .NOT.ln_linssh ) THEN 1082 1080 DO jj = 1, jpj 1083 1081 DO ji =1, jpi -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90
r5845 r5866 33 33 PUBLIC dyn_zdf_imp ! called by step.F90 34 34 35 REAL(wp) :: r_vvl ! variable volume indicator, =1 if l k_vvl=T, =0 otherwise35 REAL(wp) :: r_vvl ! variable volume indicator, =1 if ln_linssh=F, =0 otherwise 36 36 37 37 !! * Substitutions … … 81 81 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ ' 82 82 ! 83 IF( lk_vvl) THEN ; r_vvl = 1._wp ! Variable volume indicator84 ELSE ; r_vvl = 0._wp83 IF( .NOT.ln_linssh ) THEN ; r_vvl = 1._wp ! Variable volume indicator 84 ELSE ; r_vvl = 0._wp 85 85 ENDIF 86 86 ENDIF … … 119 119 120 120 #if defined key_dynspg_ts 121 IF( ln_dynadv_vec .OR. .NOT. lk_vvl) THEN ! applied on velocity121 IF( ln_dynadv_vec .OR. ln_linssh ) THEN ! applied on velocity 122 122 DO jk = 1, jpkm1 123 123 ua(:,:,jk) = ( ub(:,:,jk) + p2dt * ua(:,:,jk) ) * umask(:,:,jk) 124 124 va(:,:,jk) = ( vb(:,:,jk) + p2dt * va(:,:,jk) ) * vmask(:,:,jk) 125 125 END DO 126 ELSE 126 ELSE ! applied on thickness weighted velocity 127 127 DO jk = 1, jpkm1 128 ua(:,:,jk) = ( ub(:,:,jk) * e3u_b(:,:,jk) & 129 & + p2dt * ua(:,:,jk) * e3u_n(:,:,jk) ) & 130 & / e3u_a(:,:,jk) * umask(:,:,jk) 131 va(:,:,jk) = ( vb(:,:,jk) * e3v_b(:,:,jk) & 132 & + p2dt * va(:,:,jk) * e3v_n(:,:,jk) ) & 133 & / e3v_a(:,:,jk) * vmask(:,:,jk) 128 ua(:,:,jk) = ( ub(:,:,jk) * e3u_b(:,:,jk) & 129 & + p2dt * ua(:,:,jk) * e3u_n(:,:,jk) ) / e3u_a(:,:,jk) * umask(:,:,jk) 130 va(:,:,jk) = ( vb(:,:,jk) * e3v_b(:,:,jk) & 131 & + p2dt * va(:,:,jk) * e3v_n(:,:,jk) ) / e3v_a(:,:,jk) * vmask(:,:,jk) 134 132 END DO 135 133 ENDIF … … 178 176 ze3ua = ( 1._wp - r_vvl ) * e3u_n(ji,jj,jk) + r_vvl * e3u_a(ji,jj,jk) ! after scale factor at T-point 179 177 zcoef = - p2dt / ze3ua 180 zzwi = zcoef * avmu (ji,jj,jk ) / e3uw_n(ji,jj,jk ) 178 zzwi = zcoef * avmu(ji,jj,jk ) / e3uw_n(ji,jj,jk ) 179 zzws = zcoef * avmu(ji,jj,jk+1) / e3uw_n(ji,jj,jk+1) 181 180 zwi(ji,jj,jk) = zzwi * wumask(ji,jj,jk ) 182 zzws = zcoef * avmu (ji,jj,jk+1) / e3uw_n(ji,jj,jk+1)183 181 zws(ji,jj,jk) = zzws * wumask(ji,jj,jk+1) 184 182 zwd(ji,jj,jk) = 1._wp - zzwi - zzws … … 223 221 & / ( ze3ua * rau0 ) * umask(ji,jj,1) 224 222 #else 225 ua(ji,jj,1) = ub(ji,jj,1) &226 & + p2dt *(ua(ji,jj,1) + 0.5_wp * ( utau_b(ji,jj) + utau(ji,jj) ) &227 & / ( e3u_n(ji,jj,1) * rau0) * umask(ji,jj,1) )223 ua(ji,jj,1) = ub(ji,jj,1) & 224 & + p2dt *( ua(ji,jj,1) + 0.5_wp * ( utau_b(ji,jj) + utau(ji,jj) ) & 225 & / ( e3u_n(ji,jj,1) * rau0 ) * umask(ji,jj,1) ) 228 226 #endif 229 227 END DO … … 322 320 & / ( ze3va * rau0 ) 323 321 #else 324 va(ji,jj,1) = vb(ji,jj,1) &325 & + p2dt *(va(ji,jj,1) +0.5_wp * ( vtau_b(ji,jj) + vtau(ji,jj) ) &326 & / ( e3v_n(ji,jj,1) * rau0 ))322 va(ji,jj,1) = vb(ji,jj,1) & 323 & + p2dt *( va(ji,jj,1) + 0.5_wp * ( vtau_b(ji,jj) + vtau(ji,jj) ) & 324 & / ( e3v_n(ji,jj,1) * rau0 ) ) 327 325 #endif 328 326 END DO -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90
r5845 r5866 259 259 ELSE !** Leap-Frog time-stepping: Asselin filter + swap 260 260 sshb(:,:) = sshn(:,:) + atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) ) ! before <-- now filtered 261 IF( lk_vvl )sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( emp_b(:,:) - emp(:,:) &261 IF( .NOT.ln_linssh ) sshb(:,:) = sshb(:,:) - atfp * rdt / rau0 * ( emp_b(:,:) - emp(:,:) & 262 262 & - rnf_b(:,:) + rnf(:,:) & 263 263 & + fwfisf_b(:,:) - fwfisf(:,:) ) * ssmask(:,:) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r5845 r5866 245 245 sshb (:,:) = sshn (:,:) 246 246 ! 247 IF( lk_vvl) THEN247 IF( .NOT.ln_linssh ) THEN 248 248 DO jk = 1, jpk 249 249 e3t_b(:,:,jk) = e3t_n(:,:,jk) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90
r5845 r5866 766 766 767 767 !!gm I no longer understand this..... 768 !!gm IF( (ln_traldf_hor .OR. ln_dynldf_hor) .AND. .NOT. ( lk_vvl.AND. ln_rstart) ) THEN768 !!gm IF( (ln_traldf_hor .OR. ln_dynldf_hor) .AND. .NOT. (.NOT.ln_linssh .AND. ln_rstart) ) THEN 769 769 ! IF(lwp) WRITE(numout,*) ' Horizontal mixing in s-coordinate: slope = slope of s-surfaces' 770 770 ! -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90
r5845 r5866 534 534 IF( .NOT. ln_cpl ) srcv(:)%nsgn = 1. ! force default definition in case of opa <-> sas coupling 535 535 srcv( (/jpr_toce, jpr_soce, jpr_ssh, jpr_fraqsr, jpr_ocx1, jpr_ocy1/) )%laction = .TRUE. 536 srcv( jpr_e3t1st )%laction = lk_vvl536 srcv( jpr_e3t1st )%laction = .NOT.ln_linssh 537 537 srcv(jpr_ocx1)%clgrid = 'U' ! oce components given at U-point 538 538 srcv(jpr_ocy1)%clgrid = 'V' ! and V-point … … 700 700 ssnd(:)%laction = .FALSE. ! force default definition in case of opa <-> sas coupling 701 701 ssnd( (/jps_toce, jps_soce, jps_ssh, jps_fraqsr, jps_ocx1, jps_ocy1/) )%laction = .TRUE. 702 ssnd( jps_e3t1st )%laction = lk_vvl702 ssnd( jps_e3t1st )%laction = .NOT.ln_linssh 703 703 ! vector definition: not used but cleaner... 704 704 ssnd(jps_ocx1)%clgrid = 'U' ! oce components given at U-point -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r5845 r5866 240 240 snwice_mass_b(:,:) = 0.0_wp ! no mass exchanges 241 241 ENDIF 242 IF( .NOT. 242 IF( .NOT.ln_rstart ) THEN 243 243 IF( nn_ice_embd == 2 ) THEN ! full embedment (case 2) deplete the initial ssh below sea-ice area 244 244 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0 245 245 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0 246 #if defined key_vvl 247 !!gm key_vvl necessary? clem: yes for compilation purpose 248 !!gm same remark as in limsbc 249 DO jk = 1,jpkm1 ! adjust initial vertical scale factors 250 e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 251 e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 252 ENDDO 253 e3t_a(:,:,:) = e3t_b(:,:,:) 254 ! Reconstruction of all vertical scale factors at now and before time 255 ! steps 256 ! ============================================================================= 257 ! Horizontal scale factor interpolations 258 ! -------------------------------------- 259 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 260 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 261 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 262 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 263 CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 264 ! Vertical scale factor interpolations 265 ! ------------------------------------ 266 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 267 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 268 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 269 CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 270 CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 271 ! t- and w- points depth 272 ! ---------------------- 273 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 274 gdepw_n(:,:,1) = 0.0_wp 275 gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 276 DO jk = 2, jpk 277 gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 278 gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 279 gde3w_n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:) 280 END DO 281 #endif 246 247 !!gm This should be put elsewhere.... (same remark for limsbc) 248 !!gm especially here it is assumed zstar coordinate, but it can be ztilde.... 249 IF( .NOT.ln_linssh ) THEN 250 ! 251 DO jk = 1,jpkm1 ! adjust initial vertical scale factors 252 e3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 253 e3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 254 ENDDO 255 e3t_a(:,:,:) = e3t_b(:,:,:) 256 ! Reconstruction of all vertical scale factors at now and before time-steps 257 ! ============================================================================= 258 ! Horizontal scale factor interpolations 259 ! -------------------------------------- 260 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 261 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 262 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 263 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 264 CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 265 ! Vertical scale factor interpolations 266 ! ------------------------------------ 267 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 268 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 269 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 270 CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 271 CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 272 ! t- and w- points depth 273 ! ---------------------- 274 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 275 gdepw_n(:,:,1) = 0.0_wp 276 gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 277 DO jk = 2, jpk 278 gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 279 gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 280 gde3w_n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:) 281 END DO 282 ENDIF 282 283 ENDIF 283 284 ENDIF 284 285 ! 285 286 CALL wrk_dealloc( jpi,jpj, ztmp1, ztmp2 ) 286 287 ! -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90
r5845 r5866 780 780 zfact = 0.5_wp 781 781 ! 782 IF (lk_vvl) THEN ! need to re compute level distribution of isf fresh water782 IF(.NOT.ln_linssh ) THEN ! need to re compute level distribution of isf fresh water 783 783 DO jj = 1,jpj 784 784 DO ji = 1,jpi -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r5845 r5866 209 209 ! 210 210 IF( ln_rnf_depth .OR. ln_rnf_depth_ini ) THEN !== runoff distributed over several levels ==! 211 IF( lk_vvl ) THEN! variable volume case211 IF( .NOT.ln_linssh ) THEN ! variable volume case 212 212 DO jj = 1, jpj ! update the depth over which runoffs are distributed 213 213 DO ji = 1, jpi … … 232 232 ENDIF 233 233 ELSE !== runoff put only at the surface ==! 234 IF( lk_vvl) THEN ! variable volume case234 IF( .NOT.ln_linssh ) THEN ! variable volume case 235 235 h_rnf(:,:) = e3t_n(:,:,1) ! recalculate h_rnf to be depth of top box 236 236 ENDIF -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r5845 r5866 78 78 ENDIF 79 79 ! 80 IF( lk_vvl) e3t_m(:,:) = e3t_n(:,:,1)80 IF( .NOT.ln_linssh ) e3t_m(:,:) = e3t_n(:,:,1) 81 81 ! 82 82 frq_m(:,:) = fraqsr_1lev(:,:) … … 100 100 ENDIF 101 101 ! 102 IF( lk_vvl) e3t_m(:,:) = zcoef * e3t_n(:,:,1)102 IF( .NOT.ln_linssh ) e3t_m(:,:) = zcoef * e3t_n(:,:,1) 103 103 ! 104 104 frq_m(:,:) = zcoef * fraqsr_1lev(:,:) … … 106 106 ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN ! Initialisation: New mean computation ! 107 107 ! ! ---------------------------------------- ! 108 ssu_m(:,:) = 0. e0! reset to zero ocean mean sbc fields109 ssv_m(:,:) = 0. e0110 sst_m(:,:) = 0. e0111 sss_m(:,:) = 0. e0112 ssh_m(:,:) = 0. e0113 IF( lk_vvl ) e3t_m(:,:) = 0.e0114 frq_m(:,:) = 0. e0108 ssu_m(:,:) = 0._wp ! reset to zero ocean mean sbc fields 109 ssv_m(:,:) = 0._wp 110 sst_m(:,:) = 0._wp 111 sss_m(:,:) = 0._wp 112 ssh_m(:,:) = 0._wp 113 IF( .NOT.ln_linssh ) e3t_m(:,:) = 0._wp 114 frq_m(:,:) = 0._wp 115 115 ENDIF 116 116 ! ! ---------------------------------------- ! … … 128 128 ENDIF 129 129 ! 130 IF( lk_vvl) e3t_m(:,:) = e3t_m(:,:) + e3t_n(:,:,1)130 IF( .NOT.ln_linssh ) e3t_m(:,:) = e3t_m(:,:) + e3t_n(:,:,1) 131 131 ! 132 132 frq_m(:,:) = frq_m(:,:) + fraqsr_1lev(:,:) … … 141 141 ssv_m(:,:) = ssv_m(:,:) * zcoef ! 142 142 ssh_m(:,:) = ssh_m(:,:) * zcoef ! mean SSH [m] 143 IF( lk_vvl) e3t_m(:,:) = e3t_m(:,:) * zcoef ! mean vertical scale factor [m]143 IF( .NOT.ln_linssh ) e3t_m(:,:) = e3t_m(:,:) * zcoef ! mean vertical scale factor [m] 144 144 frq_m(:,:) = frq_m(:,:) * zcoef ! mean fraction of solar net radiation absorbed in the 1st T level [-] 145 145 ! … … 159 159 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m ) 160 160 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m ) 161 IF( lk_vvl) CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m )161 IF( .NOT.ln_linssh ) CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m ) 162 162 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m ) 163 163 ! … … 172 172 CALL iom_put( 'sss_m', sss_m ) 173 173 CALL iom_put( 'ssh_m', ssh_m ) 174 IF( lk_vvl) CALL iom_put( 'e3t_m', e3t_m )174 IF( .NOT.ln_linssh ) CALL iom_put( 'e3t_m', e3t_m ) 175 175 CALL iom_put( 'frq_m', frq_m ) 176 176 ENDIF … … 209 209 CALL iom_get( numror, jpdom_autoglo, 'sss_m' , sss_m ) ! " " salinity (T-point) 210 210 CALL iom_get( numror, jpdom_autoglo, 'ssh_m' , ssh_m ) ! " " height (T-point) 211 IF( lk_vvl )CALL iom_get( numror, jpdom_autoglo, 'e3t_m', e3t_m )211 IF( .NOT.ln_linssh ) CALL iom_get( numror, jpdom_autoglo, 'e3t_m', e3t_m ) 212 212 ! fraction of solar net radiation absorbed in 1st T level 213 213 IF( iom_varid( numror, 'frq_m', ldstop = .FALSE. ) > 0 ) THEN … … 226 226 sss_m(:,:) = zcoef * sss_m(:,:) 227 227 ssh_m(:,:) = zcoef * ssh_m(:,:) 228 IF( lk_vvl) e3t_m(:,:) = zcoef * e3t_m(:,:)228 IF( .NOT.ln_linssh ) e3t_m(:,:) = zcoef * e3t_m(:,:) 229 229 frq_m(:,:) = zcoef * frq_m(:,:) 230 230 ELSE … … 244 244 sss_m(:,:) = tsn(:,:,1,jp_sal) 245 245 ssh_m(:,:) = sshn(:,:) 246 IF( lk_vvl) e3t_m(:,:) = e3t_n(:,:,1)246 IF( .NOT.ln_linssh ) e3t_m(:,:) = e3t_n(:,:,1) 247 247 frq_m(:,:) = 1._wp 248 248 ! -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r5845 r5866 228 228 CALL ctl_stop( 'tra_adv_init: force 2nd order FCT scheme, 4th order does not exist with sub-timestepping' ) 229 229 ENDIF 230 IF( lk_vvl) THEN230 IF( .NOT.ln_linssh ) THEN 231 231 CALL ctl_stop( 'tra_adv_init: vertical sub-timestepping not allow in non-linear free surface' ) 232 232 ENDIF -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen.F90
r5845 r5866 90 90 ! 91 91 ! ! surface & bottom values 92 IF( lk_vvl) zwz(:,:, 1 ) = 0._wp ! set to zero one for all93 zwz(:,:,jpk) = 0._wp ! except at the surface in linear free surface92 IF( .NOT.ln_linssh ) zwz(:,:, 1 ) = 0._wp ! set to zero one for all 93 zwz(:,:,jpk) = 0._wp ! except at the surface in linear free surface 94 94 ! 95 95 DO jn = 1, kjpt !== loop over the tracers ==! … … 164 164 END SELECT 165 165 ! 166 IF( .NOT.lk_vvl ) THEN!* top value (only in linear free surf. as zwz is multiplied by wmask)166 IF( ln_linssh ) THEN !* top value (only in linear free surf. as zwz is multiplied by wmask) 167 167 IF( ln_isfcav ) THEN ! ice-shelf cavities (top of the ocean) 168 168 DO jj = 1, jpj -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90
r5845 r5866 102 102 ! 103 103 ! ! surface & bottom value : flux set to zero one for all 104 IF( lk_vvl) zwz(:,:, 1 ) = 0._wp ! except at the surface in linear free surface case104 IF( .NOT.ln_linssh ) zwz(:,:, 1 ) = 0._wp ! except at the surface in linear free surface case 105 105 zwx(:,:,jpk) = 0._wp ; zwy(:,:,jpk) = 0._wp ; zwz(:,:,jpk) = 0._wp 106 106 ! … … 136 136 END DO 137 137 ! 138 IF( .NOT.lk_vvl ) THEN! top ocean value (only in linear free surface as zwz has been w-masked)138 IF( ln_linssh ) THEN ! top ocean value (only in linear free surface as zwz has been w-masked) 139 139 IF( ln_isfcav ) THEN ! top of the ice-shelf cavities and at the ocean surface 140 140 DO jj = 1, jpj … … 428 428 END DO 429 429 ! ! top value 430 IF( lk_vvl) THEN ! variable volume: only k=1 as zwz is multiplied by wmask430 IF( .NOT.ln_linssh ) THEN ! variable volume: only k=1 as zwz is multiplied by wmask 431 431 zwz(:,:, 1 ) = 0._wp 432 432 ELSE ! linear free surface … … 502 502 ztrs (:,:,:,1) = ptb(:,:,:,jn) 503 503 zwzts (:,:,:) = 0._wp 504 IF( lk_vvl) zwz(:,:, 1 ) = 0._wp ! surface value set to zero in vvl case504 IF( .NOT.ln_linssh ) zwz(:,:, 1 ) = 0._wp ! surface value set to zero in vvl case 505 505 ! 506 506 DO jl = 1, kn_fct_zts ! Start of sub timestepping loop … … 528 528 END DO 529 529 END DO 530 IF( .NOT.lk_vvl) THEN ! top value (only in linear free surface case)530 IF( ln_linssh ) THEN ! top value (only in linear free surface case) 531 531 IF( ln_isfcav ) THEN ! ice-shelf cavities 532 532 DO jj = 1, jpj -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mus.F90
r5845 r5866 250 250 END DO 251 251 ! ! top values (bottom already set to zero) 252 IF( lk_vvl ) THEN ! variable volume 253 zwx(:,:, 1 ) = 0._wp ! k=1 only as zwx has been multiplied by wmask 254 ELSE ! linear free surface 252 IF( ln_linssh ) THEN !* linear free surface 255 253 IF( ln_isfcav ) THEN ! ice-shelf cavities (top of the ocean) 256 254 DO jj = 1, jpj … … 262 260 zwx(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) 263 261 ENDIF 262 ELSE !* non-linear free surface 263 zwx(:,:, 1 ) = 0._wp ! k=1 only as zwx has been multiplied by wmask 264 264 ENDIF 265 265 ! -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90
r5845 r5866 382 382 ! 383 383 ! ! surface & bottom values 384 IF( lk_vvl) zwz(:,:, 1 ) = 0._wp ! set to zero one for all385 zwz(:,:,jpk) = 0._wp ! except at the surface in linear free surface384 IF( .NOT.ln_linssh ) zwz(:,:, 1 ) = 0._wp ! set to zero one for all 385 zwz(:,:,jpk) = 0._wp ! except at the surface in linear free surface 386 386 ! 387 387 ! ! =========== … … 396 396 END DO 397 397 END DO 398 IF( .NOT.lk_vvl ) THEN!* top value (only in linear free surf. as zwz is multiplied by wmask)398 IF( ln_linssh ) THEN !* top value (only in linear free surf. as zwz is multiplied by wmask) 399 399 IF( ln_isfcav ) THEN ! ice-shelf cavities (top of the ocean) 400 400 DO jj = 1, jpj … … 421 421 END DO 422 422 ! 423 CALL wrk_dealloc( jpi, jpj, jpk,zwz )423 CALL wrk_dealloc( jpi,jpj,jpk, zwz ) 424 424 ! 425 425 END SUBROUTINE tra_adv_cen2_k -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90
r5845 r5866 112 112 zltu(:,:,jpk) = 0._wp ; zltv(:,:,jpk) = 0._wp ! Bottom value : set to zero one for all 113 113 ztw (:,:,jpk) = 0._wp ; zti (:,:,jpk) = 0._wp 114 IF( lk_vvl) ztw(:,:, 1 ) = 0._wp ! surface value: set to zero only in vvl case114 IF( .NOT.ln_linssh ) ztw(:,:, 1 ) = 0._wp ! surface value: set to zero only in vvl case 115 115 ! 116 116 ! ! =========== … … 199 199 END DO 200 200 END DO 201 IF( .NOT.lk_vvl ) THEN! top ocean value (only in linear free surface as ztw has been w-masked)201 IF( ln_linssh ) THEN ! top ocean value (only in linear free surface as ztw has been w-masked) 202 202 IF( ln_isfcav ) THEN ! top of the ice-shelf cavities and at the ocean surface 203 203 DO jj = 1, jpj … … 233 233 END DO 234 234 ! ! top ocean value: high order == upstream ==>> zwz=0 235 IF( .NOT.lk_vvl ) ztw(:,:, 1 ) = 0._wp! only ocean surface as interior zwz values have been w-masked235 IF( ln_linssh ) ztw(:,:, 1 ) = 0._wp ! only ocean surface as interior zwz values have been w-masked 236 236 ! 237 237 CALL nonosc_z( ptb(:,:,:,jn), ztw, zti, p2dt ) ! monotonicity algorithm … … 246 246 END DO 247 247 END DO 248 IF( .NOT.lk_vvl) ztw(:,:, 1 ) = pwn(:,:,1) * ptn(:,:,1,jn) !!gm ISF & 4th COMPACT doesn't work248 IF( ln_linssh ) ztw(:,:, 1 ) = pwn(:,:,1) * ptn(:,:,1,jn) !!gm ISF & 4th COMPACT doesn't work 249 249 ! 250 250 END SELECT -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r5845 r5866 144 144 ELSE ! Leap-Frog + Asselin filter time stepping 145 145 ! 146 IF( l k_vvl ) THEN ; CALL tra_nxt_vvl( kt, nit000, rdttra, 'TRA', tsb, tsn, tsa, &147 & sbc_tsc, sbc_tsc_b, jpts ) ! variable volume level (vvl)148 ELSE ; CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts ) ! fixed volume level146 IF( ln_linssh ) THEN ; CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts ) ! linear free surface 147 ELSE ; CALL tra_nxt_vvl( kt, nit000, rdttra, 'TRA', tsb, tsn, tsa, & 148 & sbc_tsc, sbc_tsc_b, jpts ) ! non-linear free surface 149 149 ENDIF 150 150 ENDIF -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r5845 r5866 182 182 ! ! ------------------------- ! 183 183 ! Set chlorophyl concentration 184 IF( nn_chldta == 1 .OR. lk_vvl) THEN !* Variable Chlorophyll or ocean volume184 IF( nn_chldta == 1 .OR. .NOT.ln_linssh ) THEN !* Variable Chlorophyll or ocean volume 185 185 ! 186 186 IF( nn_chldta == 1 ) THEN !* Variable Chlorophyll … … 261 261 ! ! ------------------------- ! 262 262 ! 263 IF( lk_vvl) THEN !* variable volume263 IF( .NOT.ln_linssh ) THEN !* variable volume 264 264 zz0 = rn_abs * r1_rau0_rcp 265 265 zz1 = ( 1. - rn_abs ) * r1_rau0_rcp … … 376 376 IF( nn_timing == 1 ) CALL timing_start('tra_qsr_init') 377 377 ! 378 CALL wrk_alloc( jpi, jpj,zekb, zekg, zekr )379 CALL wrk_alloc( jpi, jpj, jpk,ze0, ze1, ze2, ze3, zea )378 CALL wrk_alloc( jpi,jpj, zekb, zekg, zekr ) 379 CALL wrk_alloc( jpi,jpj,jpk, ze0, ze1, ze2, ze3, zea ) 380 380 ! 381 381 … … 470 470 IF(lwp) WRITE(numout,*) 471 471 IF(lwp) WRITE(numout,*) ' Constant Chlorophyll concentration = 0.05' 472 IF( lk_vvl) THEN ! variable volume473 IF(lwp) WRITE(numout,*) ' key_vvl: light distribution will be computed at each time step'472 IF( .NOT.ln_linssh ) THEN ! variable volume 473 IF(lwp) WRITE(numout,*) ' non-linear free surface: light distribution will be computed at each time step' 474 474 ELSE ! constant volume: computes one for all 475 IF(lwp) WRITE(numout,*) ' fixed volume: light distribution computed one for all'475 IF(lwp) WRITE(numout,*) ' linear free surface: light distribution computed one for all' 476 476 ! 477 477 zchl = 0.05 ! constant chlorophyll … … 524 524 ENDIF 525 525 ! 526 IF( lk_vvl) THEN ! variable volume527 IF(lwp) WRITE(numout,*) ' key_vvl: light distribution will be computed at each time step'526 IF( .NOT.ln_linssh ) THEN ! variable volume 527 IF(lwp) WRITE(numout,*) ' non-linear free surface: light distribution will be computed at each time step' 528 528 ELSE ! constant volume: computes one for all 529 529 zz0 = rn_abs * r1_rau0_rcp … … 538 538 END DO 539 539 END DO 540 etot3(:,:,nksr+1:jpk) = 0. e0! below 400m set to zero540 etot3(:,:,nksr+1:jpk) = 0._wp ! below 400m set to zero 541 541 ! 542 542 ENDIF … … 559 559 ENDIF 560 560 ! 561 CALL wrk_dealloc( jpi, jpj,zekb, zekg, zekr )562 CALL wrk_dealloc( jpi, jpj, jpk,ze0, ze1, ze2, ze3, zea )561 CALL wrk_dealloc( jpi,jpj, zekb, zekg, zekr ) 562 CALL wrk_dealloc( jpi,jpj,jpk, ze0, ze1, ze2, ze3, zea ) 563 563 ! 564 564 IF( nn_timing == 1 ) CALL timing_stop('tra_qsr_init') -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90
r5845 r5866 74 74 !! The formulation for Fwb and Fwi vary according to the free 75 75 !! surface formulation (linear or variable volume). 76 !! * Linear free surface 76 !! * Linear free surface (ln_linssh=T) 77 77 !! The surface freshwater flux modifies the ocean volume 78 78 !! and thus the concentration of a tracer and the temperature. … … 100 100 !! forcing and must be taken into account in the global heat 101 101 !! balance). 102 !! * nonlinear free surface ( variable volume, lk_vvl)102 !! * nonlinear free surface (ln_linssh=F) 103 103 !! contrary to the linear free surface case, Fwi is properly 104 104 !! taken into account by using the true layer thicknesses to … … 145 145 ! EMP, SFX and QNS effects 146 146 !---------------------------------------- 147 ! Set before sbc tracer content fields148 ! ************************************147 ! !== Set before sbc tracer content fields ==! 148 ! 149 149 IF( kt == nit000 ) THEN ! Set the forcing field at nit000 - 1 150 ! ! -----------------------------------150 ! 151 151 IF( ln_rstart .AND. & ! Restart: read in restart file 152 152 & iom_varid( numror, 'sbc_hc_b', ldstop = .FALSE. ) > 0 ) THEN … … 160 160 ENDIF 161 161 ELSE ! Swap of forcing fields 162 ! ! ----------------------163 162 zfact = 0.5_wp 164 163 sbc_tsc_b(:,:,:) = sbc_tsc(:,:,:) … … 170 169 ! evaporation, precipitation and qns, but not river runoff 171 170 172 IF( lk_vvl ) THEN !Variable Volume case ==>> heat content of mass flux is in qns171 IF( .NOT.ln_linssh ) THEN !* Variable Volume case ==>> heat content of mass flux is in qns 173 172 DO jj = 1, jpj 174 173 DO ji = 1, jpi … … 177 176 END DO 178 177 END DO 179 ELSE ! Constant Volume case ==>> Concentration dilution effect178 ELSE !* Constant Volume case ==>> Concentration dilution effect 180 179 DO jj = 2, jpj 181 180 DO ji = fs_2, fs_jpim1 ! vector opt. … … 191 190 IF( iom_use('emp_x_sss') ) CALL iom_put( "emp_x_sss", emp (:,:) * tsn(:,:,1,jp_sal) ) ! c/d term on sss 192 191 ENDIF 193 ! Concentration dilution effect on (t,s) due to evapouration, precipitation and qns, but not river runoff192 ! 194 193 DO jn = 1, jpts 195 194 DO jj = 2, jpj … … 218 217 ! 219 218 IF( nn_isf > 0 ) THEN 220 zfact = 0.5 e0219 zfact = 0.5_wp 221 220 DO jj = 2, jpj 222 221 DO ji = fs_2, fs_jpim1 -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_exp.F90
r5845 r5866 66 66 !! (N.B. bottom condition is applied through the masked field avt). 67 67 !! - the after tracer fields due to the whole trend is 68 !! obtained in leap-frog environment by : 69 !! pta = zwx + p2dt pta 70 !! - in case of variable level thickness (lk_vvl=T) the 71 !! the leap-frog is applied on thickness weighted tracer. That is: 68 !! obtained in leap-frog environment applied on thickness weighted tracer by : 72 69 !! pta = [ ptb*e3tb + e3tn*( zwx - ptb + p2dt pta ) ] / e3tn 73 70 !! 74 71 !! ** Action : - after tracer fields pta 75 72 !!--------------------------------------------------------------------- 76 !77 73 INTEGER , INTENT(in ) :: kt ! ocean time-step index 78 74 INTEGER , INTENT(in ) :: kit000 ! first time step index … … 92 88 IF( nn_timing == 1 ) CALL timing_start('tra_zdf_exp') 93 89 ! 94 CALL wrk_alloc( jpi, jpj, jpk,zwx, zwy )90 CALL wrk_alloc( jpi,jpj,jpk, zwx, zwy ) 95 91 ! 96 92 … … 121 117 DO jj = 2, jpjm1 122 118 DO ji = fs_2, fs_jpim1 ! vector opt. 123 zave3r = 1.e0 / e3w_n(ji,jj,jk) 119 zave3r = 1.e0 / e3w_n(ji,jj,jk) !!gm here it should be e3w_b ???? 124 120 IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN ! temperature : use of avt 125 121 zwy(ji,jj,jk) = avt(ji,jj,jk) * ( zwx(ji,jj,jk-1) - zwx(ji,jj,jk) ) * zave3r … … 144 140 ! After tracer due to all trends 145 141 ! ------------------------------ 146 IF( lk_vvl ) THEN! variable level thickness : leap-frog on tracer*e3t142 IF( .NOT.ln_linssh ) THEN ! variable level thickness : leap-frog on tracer*e3t 147 143 DO jk = 1, jpkm1 148 144 DO jj = 2, jpjm1 … … 154 150 END DO 155 151 END DO 156 ELSE ! fixed level thickness : leap-frog on tracers152 ELSE ! fixed level thickness : leap-frog on tracers 157 153 DO jk = 1, jpkm1 158 154 DO jj = 2, jpjm1 … … 166 162 END DO 167 163 ! 168 CALL wrk_dealloc( jpi, jpj, jpk,zwx, zwy )164 CALL wrk_dealloc( jpi,jpj,jpk, zwx, zwy ) 169 165 ! 170 166 IF( nn_timing == 1 ) CALL timing_stop('tra_zdf_exp') -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90
r5845 r5866 42 42 PUBLIC tra_zdf_imp ! routine called by step.F90 43 43 44 REAL(wp) :: r_vvl ! variable volume indicator, =1 if l k_vvl=T, =0 otherwise44 REAL(wp) :: r_vvl ! variable volume indicator, =1 if ln_linssh=F, =0 otherwise 45 45 46 46 !! * Substitutions … … 95 95 IF(lwp)WRITE(numout,*) '~~~~~~~~~~~ ' 96 96 ! 97 IF( lk_vvl) THEN ; r_vvl = 1._wp ! Variable volume indicator98 ELSE ; r_vvl = 0._wp97 IF( .NOT.ln_linssh ) THEN ; r_vvl = 1._wp ! Variable volume indicator 98 ELSE ; r_vvl = 0._wp 99 99 ENDIF 100 100 ENDIF -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRD/trdglo.F90
r5845 r5866 102 102 END DO 103 103 ! ! linear free surface: diagnose advective flux trough the fixed k=1 w-surface 104 IF( .NOT.lk_vvl.AND. ktrd == jptra_zad ) THEN105 tmo(jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_tem) * e1e2t(:,:) )106 smo(jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_sal) * e1e2t(:,:) )107 t2 (jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_tem) * tsn(:,:,1,jp_tem) * e1e2t(:,:) )108 s2 (jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_sal) * tsn(:,:,1,jp_sal) * e1e2t(:,:) )104 IF( ln_linssh .AND. ktrd == jptra_zad ) THEN 105 tmo(jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_tem) * e1e2t(:,:) * tmask_i(:,:) ) 106 smo(jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_sal) * e1e2t(:,:) * tmask_i(:,:) ) 107 t2 (jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_tem) * tsn(:,:,1,jp_tem) * e1e2t(:,:) * tmask_i(:,:) ) 108 s2 (jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_sal) * tsn(:,:,1,jp_sal) * e1e2t(:,:) * tmask_i(:,:) ) 109 109 ENDIF 110 110 ! -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRD/trdini.F90
r5845 r5866 90 90 !!gm end 91 91 ! 92 IF( lk_vvl.AND. ( l_trdtra .OR. l_trddyn ) ) CALL ctl_stop( 'trend diagnostics with variable volume not validated' )92 IF( .NOT.ln_linssh .AND. ( l_trdtra .OR. l_trddyn ) ) CALL ctl_stop( 'trend diagnostics with variable volume not validated' ) 93 93 94 94 !!gm : Potential BUG : 3D output only for vector invariant form! add a ctl_stop or code the flux form case -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRD/trdken.F90
r5845 r5866 93 93 CALL lbc_lnk( putrd, 'U', -1. ) ; CALL lbc_lnk( pvtrd, 'V', -1. ) ! lateral boundary conditions 94 94 ! 95 IF ( lk_vvl.AND. kt /= nkstp ) THEN ! Variable volume: set box volume at the 1st call of kt time step95 IF( .NOT.ln_linssh .AND. kt /= nkstp ) THEN ! Variable volume: set box volume at the 1st call of kt time step 96 96 nkstp = kt 97 97 DO jk = 1, jpkm1 … … 268 268 !!gm & CALL ctl_stop('trd_ken_init : only full and partial cells are coded for conversion rate') 269 269 ! 270 IF( .NOT.lk_vvl) THEN ! constant volume: bu, bv, 1/bt computed one for all270 IF( ln_linssh ) THEN ! constant volume: bu, bv, 1/bt computed one for all 271 271 DO jk = 1, jpkm1 272 272 bu (:,:,jk) = e1e2u(:,:) * e3u_n(:,:,jk) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRD/trdpen.F90
r5845 r5866 96 96 CASE ( jptra_yad ) ; CALL iom_put( "petrd_yad", zpe ) ! merid. advection 97 97 CASE ( jptra_zad ) ; CALL iom_put( "petrd_zad", zpe ) ! vertical advection 98 IF( .NOT.lk_vvl) THEN ! cst volume : adv flux through z=0 surface98 IF( ln_linssh ) THEN ! cst volume : adv flux through z=0 surface 99 99 CALL wrk_alloc( jpi, jpj, z2d ) 100 100 z2d(:,:) = wn(:,:,1) * ( & … … 115 115 CASE ( jptra_bbc ) ; CALL iom_put( "petrd_bbc" , zpe ) ! bottom bound cond (geoth flux) 116 116 CASE ( jptra_atf ) ; CALL iom_put( "petrd_atf" , zpe ) ! asselin time filter (last trend) 117 !IF( .NOT.lk_vvl) THEN ! cst volume : ssh term (otherwise include in e3t variation)117 !IF( ln_linssh ) THEN ! cst volume : ssh term (otherwise include in e3t variation) 118 118 ! CALL wrk_alloc( jpi, jpj, z2d ) 119 119 ! z2d(:,:) = ( ssha(:,:) - sshb(:,:) ) & … … 150 150 rab_pe(:,:,:,:) = 0._wp 151 151 ! 152 IF ( lk_vvl) CALL ctl_stop('trd_pen_init : PE trends not coded for variable volume')152 IF( .NOT.ln_linssh ) CALL ctl_stop('trd_pen_init : PE trends not coded for variable volume') 153 153 ! 154 154 nkstp = nit000 - 1 -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90
r5845 r5866 305 305 CASE( jptra_zad ) ; CALL iom_put( "ttrd_zad" , ptrdx ) ! z- vertical advection 306 306 CALL iom_put( "strd_zad" , ptrdy ) 307 IF( .NOT. lk_vvl) THEN ! cst volume : adv flux through z=0 surface307 IF( ln_linssh ) THEN ! cst volume : adv flux through z=0 surface 308 308 CALL wrk_alloc( jpi, jpj, z2dx, z2dy ) 309 309 z2dx(:,:) = wn(:,:,1) * tsn(:,:,1,jp_tem) / e3t_n(:,:,1) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90
r5845 r5866 110 110 CALL wrk_alloc( jpi, jpj, zbfrt, ztfrt ) 111 111 112 IF ( ln_loglayer.AND. lk_vvl) THEN ! "log layer" bottom friction coefficient112 IF ( ln_loglayer.AND. .NOT.ln_linssh ) THEN ! "log layer" bottom friction coefficient 113 113 114 114 DO jj = 1, jpj … … 370 370 END IF 371 371 ! 372 IF ( ln_loglayer.AND.(.NOT.lk_vvl)) THEN ! set "log layer" bottom friction once for all372 IF( ln_loglayer.AND. ln_linssh ) THEN ! set "log layer" bottom friction once for all 373 373 DO jj = 1, jpj 374 374 DO ji = 1, jpi -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/step.F90
r5845 r5866 178 178 ! Ocean dynamics : hdiv, ssh, e3, wn 179 179 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 180 CALL ssh_nxt ( kstp ) ! after ssh (includes call to div_hor)181 IF( lk_vvl) CALL dom_vvl_sf_nxt( kstp ) ! after vertical scale factors182 CALL wzv ( kstp ) ! now cross-level velocity180 CALL ssh_nxt ( kstp ) ! after ssh (includes call to div_hor) 181 IF( .NOT.ln_linssh ) CALL dom_vvl_sf_nxt( kstp ) ! after vertical scale factors 182 CALL wzv ( kstp ) ! now cross-level velocity 183 183 184 184 IF( lk_dynspg_ts ) THEN … … 217 217 218 218 CALL div_hor( kstp ) ! Horizontal divergence (2nd call in time-split case) 219 IF( lk_vvl )CALL dom_vvl_sf_nxt( kstp, kcall=2 ) ! after vertical scale factors (update depth average component)219 IF( .NOT.ln_linssh ) CALL dom_vvl_sf_nxt( kstp, kcall=2 ) ! after vertical scale factors (update depth average component) 220 220 CALL wzv ( kstp ) ! now cross-level velocity 221 221 ENDIF … … 331 331 332 332 CALL ssh_swp( kstp ) ! swap of sea surface height 333 IF( lk_vvl )CALL dom_vvl_sf_swp( kstp ) ! swap of vertical scale factors333 IF( .NOT.ln_linssh ) CALL dom_vvl_sf_swp( kstp ) ! swap of vertical scale factors 334 334 ! 335 335 -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/SAS_SRC/sbcssm.F90
r5407 r5866 88 88 ssu_m(:,:) = sf_ssm_3d(jf_usp)%fnow(:,:,1) * umask(:,:,1) ! u-velocity 89 89 ssv_m(:,:) = sf_ssm_3d(jf_vsp)%fnow(:,:,1) * vmask(:,:,1) ! v-velocity 90 IF( lk_vvl) e3t_m(:,:) = sf_ssm_3d(jf_e3t)%fnow(:,:,1) * tmask(:,:,1) ! v-velocity90 IF( .NOT.ln_linssh ) e3t_m(:,:) = sf_ssm_3d(jf_e3t)%fnow(:,:,1) * tmask(:,:,1) ! v-velocity 91 91 ELSE 92 92 ssu_m(:,:) = sf_ssm_2d(jf_usp)%fnow(:,:,1) * umask(:,:,1) ! u-velocity 93 93 ssv_m(:,:) = sf_ssm_2d(jf_vsp)%fnow(:,:,1) * vmask(:,:,1) ! v-velocity 94 IF( lk_vvl) e3t_m(:,:) = sf_ssm_2d(jf_e3t)%fnow(:,:,1) * tmask(:,:,1) ! v-velocity94 IF( .NOT.ln_linssh ) e3t_m(:,:) = sf_ssm_2d(jf_e3t)%fnow(:,:,1) * tmask(:,:,1) ! v-velocity 95 95 ENDIF 96 96 ! … … 115 115 CALL prt_ctl(tab2d_1=ssv_m, clinfo1=' ssv_m - : ', mask1=vmask, ovlap=1 ) 116 116 CALL prt_ctl(tab2d_1=ssh_m, clinfo1=' ssh_m - : ', mask1=tmask, ovlap=1 ) 117 IF( lk_vvl) CALL prt_ctl(tab2d_1=ssh_m, clinfo1=' e3t_m - : ', mask1=tmask, ovlap=1 )118 IF( ln_read_frq ) CALL prt_ctl(tab2d_1=frq_m, clinfo1=' frq_m - : ', mask1=tmask, ovlap=1 )117 IF( .NOT.ln_linssh ) CALL prt_ctl(tab2d_1=ssh_m, clinfo1=' e3t_m - : ', mask1=tmask, ovlap=1 ) 118 IF( ln_read_frq ) CALL prt_ctl(tab2d_1=frq_m, clinfo1=' frq_m - : ', mask1=tmask, ovlap=1 ) 119 119 ENDIF 120 120 ! … … 125 125 CALL iom_put( 'sss_m', sss_m ) 126 126 CALL iom_put( 'ssh_m', ssh_m ) 127 IF( lk_vvl) CALL iom_put( 'e3t_m', e3t_m )128 IF( ln_read_frq ) CALL iom_put( 'frq_m', frq_m )127 IF( .NOT.ln_linssh ) CALL iom_put( 'e3t_m', e3t_m ) 128 IF( ln_read_frq ) CALL iom_put( 'frq_m', frq_m ) 129 129 ENDIF 130 130 ! … … 216 216 IF( ln_3d_uve ) THEN 217 217 jf_usp = 1 ; jf_vsp = 2 ; jf_e3t = 3 ! define 3D fields index 218 nfld_3d = 2 + COUNT( (/ lk_vvl/) ) ! number of 3D fields to read218 nfld_3d = 2 + COUNT( (/.NOT.ln_linssh/) ) ! number of 3D fields to read 219 219 nfld_2d = 3 + COUNT( (/ln_read_frq/) ) ! number of 2D fields to read 220 220 ELSE 221 jf_usp = 4 ; jf_vsp = 5 ; jf_e3t = 6 ; jf_frq = 6 + COUNT( (/ lk_vvl/) ) ! update 2D fields index221 jf_usp = 4 ; jf_vsp = 5 ; jf_e3t = 6 ; jf_frq = 6 + COUNT( (/.NOT.ln_linssh/) ) ! update 2D fields index 222 222 nfld_3d = 0 ! no 3D fields to read 223 nfld_2d = 5 + COUNT( (/ lk_vvl/) ) + COUNT( (/ln_read_frq/) ) ! number of 2D fields to read223 nfld_2d = 5 + COUNT( (/.NOT.ln_linssh/) ) + COUNT( (/ln_read_frq/) ) ! number of 2D fields to read 224 224 ENDIF 225 225 … … 231 231 slf_3d(jf_usp) = sn_usp 232 232 slf_3d(jf_vsp) = sn_vsp 233 IF( lk_vvl) slf_3d(jf_e3t) = sn_e3t233 IF( .NOT.ln_linssh ) slf_3d(jf_e3t) = sn_e3t 234 234 ENDIF 235 235 … … 243 243 IF( .NOT. ln_3d_uve ) THEN 244 244 slf_2d(jf_usp) = sn_usp ; slf_2d(jf_vsp) = sn_vsp 245 IF( lk_vvl) slf_2d(jf_e3t) = sn_e3t245 IF( .NOT.ln_linssh ) slf_2d(jf_e3t) = sn_e3t 246 246 ENDIF 247 247 ENDIF -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90
r5845 r5866 230 230 CALL ctl_stop( 'trc_adv_init: force 2nd order FCT scheme, 4th order does not exist with sub-timestepping' ) 231 231 ENDIF 232 IF( lk_vvl) THEN232 IF( .NOT.ln_linssh ) THEN 233 233 CALL ctl_stop( 'trc_adv_init: vertical sub-timestepping not allow in non-linear free surface' ) 234 234 ENDIF -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r5656 r5866 137 137 ELSE 138 138 ! Leap-Frog + Asselin filter time stepping 139 IF( l k_vvl ) THEN ; CALL tra_nxt_vvl( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra, &140 & sbc_trc, sbc_trc_b, jptra ) ! variable volume level (vvl)141 ELSE ; CALL tra_nxt_fix( kt, nittrc000, 'TRC', trb, trn, tra, jptra ) ! fixed volume level139 IF( ln_linssh ) THEN ; CALL tra_nxt_fix( kt, nittrc000, 'TRC', trb, trn, tra, jptra ) ! linear ssh 140 ELSE ; CALL tra_nxt_vvl( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra, & 141 & sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 142 142 ENDIF 143 143 ENDIF -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90
r5845 r5866 75 75 ! 76 76 ! Allocate temporary workspace 77 CALL wrk_alloc( jpi, jpj,zsfx )78 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk,ztrtrd )77 CALL wrk_alloc( jpi,jpj, zsfx ) 78 IF( l_trdtrc ) CALL wrk_alloc( jpi,jpj,jpk, ztrtrd ) 79 79 ! 80 80 zrtrn = 1.e-15_wp … … 128 128 ! Coupling offline : runoff are in emp which contains E-P-R 129 129 ! 130 IF( .NOT. lk_offline .AND. lk_vvl) THEN ! online coupling with vvl130 IF( .NOT. lk_offline .AND. .NOT.ln_linssh ) THEN ! online coupling with vvl 131 131 zsfx(:,:) = 0._wp 132 132 ELSE ! online coupling free surface or offline with free surface … … 137 137 DO jn = 1, jptra 138 138 ! 139 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends 140 ! ! add the trend to the general tracer trend 139 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends 141 140 142 141 IF ( nn_ice_tr == -1 ) THEN ! No tracers in sea ice (null concentration in sea ice) … … 202 201 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 203 202 ENDIF 204 CALL wrk_dealloc( jpi, jpj,zsfx )205 IF( l_trdtrc ) CALL wrk_dealloc( jpi, jpj, jpk,ztrtrd )203 CALL wrk_dealloc( jpi,jpj, zsfx ) 204 IF( l_trdtrc ) CALL wrk_dealloc( jpi,jpj,jpk, ztrtrd ) 206 205 ! 207 206 IF( nn_timing == 1 ) CALL timing_stop('trc_sbc') -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/TOP_SRC/trcdta.F90
r5845 r5866 235 235 sf_dta(1)%fnow(:,:,:) = sf_dta(1)%fnow(:,:,:) * zrf_trfac ! multiplicative factor 236 236 ! 237 IF( lwp .AND. kt == nit000 ) THEN238 clndta = TRIM( sf_dta(1)%clvar )239 WRITE(numout,*) ''//clndta//' data '240 WRITE(numout,*)241 WRITE(numout,*)' level = 1'242 CALL prihre( sf_dta(1)%fnow(:,:,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout )243 WRITE(numout,*)' level = ', jpk/2244 CALL prihre( sf_dta(1)%fnow(:,:,jpk/2), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout )245 WRITE(numout,*)' level = ', jpkm1246 CALL prihre( sf_dta(1)%fnow(:,:,jpkm1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout )247 WRITE(numout,*)248 ENDIF249 237 ENDIF 250 238 ! -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/TOP_SRC/trcstp.F90
r5845 r5866 64 64 IF( kt == nittrc000 .AND. lk_trdmxl_trc ) CALL trd_mxl_trc_init ! trends: Mixed-layer 65 65 ! 66 IF( lk_vvl ) THEN! update ocean volume due to ssh temporal evolution66 IF( .NOT.ln_linssh ) THEN ! update ocean volume due to ssh temporal evolution 67 67 DO jk = 1, jpk 68 68 cvol(:,:,jk) = e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/TOP_SRC/trcsub.F90
r5845 r5866 446 446 !! 447 447 !! ** Purpose : compute the after ssh (ssha), the now vertical velocity 448 !! and update the now vertical coordinate (l k_vvl=T).448 !! and update the now vertical coordinate (ln_linssh=F). 449 449 !! 450 450 !! ** Method : - Using the incompressibility hypothesis, the vertical … … 455 455 !! ** action : ssha : after sea surface height 456 456 !! wn : now vertical velocity 457 !! sshu_a, sshv_a, sshf_a : after sea surface height (l k_vvl=T)457 !! sshu_a, sshv_a, sshf_a : after sea surface height (ln_linssh=F) 458 458 !! 459 459 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. 460 460 !!---------------------------------------------------------------------- 461 !462 461 INTEGER, INTENT(in) :: kt ! time step 463 462 ! … … 470 469 ! 471 470 ! Allocate temporary workspace 472 CALL wrk_alloc( jpi, jpj,zhdiv )471 CALL wrk_alloc( jpi,jpj, zhdiv ) 473 472 474 473 IF( kt == nittrc000 ) THEN … … 482 481 ENDIF 483 482 ! 483 !!gm BUG here ! hdivn will include the runoff divergence at the wrong timestep !!!! 484 484 CALL div_hor( kt ) ! Horizontal divergence & Relative vorticity 485 485 ! … … 510 510 #endif 511 511 #endif 512 513 512 ! 514 513 ! !------------------------------! 515 514 ! ! Now Vertical Velocity ! … … 525 524 #endif 526 525 END DO 527 528 ! 529 CALL wrk_dealloc( jpi, jpj, zhdiv ) 526 ! 527 CALL wrk_dealloc( jpi,jpj, zhdiv ) 530 528 ! 531 529 IF( nn_timing == 1 ) CALL timing_stop('trc_sub_ssh') 532 530 ! 533 531 END SUBROUTINE trc_sub_ssh 532 534 533 535 534 INTEGER FUNCTION trc_sub_alloc()
Note: See TracChangeset
for help on using the changeset viewer.