- Timestamp:
- 2015-12-01T18:17:43+01:00 (8 years ago)
- Location:
- branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/divhor.F90
r5956 r5969 20 20 USE oce ! ocean dynamics and tracers 21 21 USE dom_oce ! ocean space and time domain 22 USE sbc_oce, ONLY : ln_rnf, nn_isf ! surface boundary condition: ocean22 USE sbc_oce, ONLY : ln_rnf, ln_isf ! surface boundary condition: ocean 23 23 USE sbcrnf ! river runoff 24 24 USE sbcisf ! ice shelf … … 89 89 END DO 90 90 ! 91 IF( ln_rnf 91 IF( ln_rnf ) CALL sbc_rnf_div( hdivn ) !== runoffs ==! (update hdivn field) 92 92 ! 93 IF( ln_ divisf .AND. nn_isf > 0) CALL sbc_isf_div( hdivn ) !== ice shelf ==! (update hdivn field)93 IF( ln_isf ) CALL sbc_isf_div( hdivn ) !== ice shelf ==! (update hdivn field) 94 94 ! 95 CALL lbc_lnk( hdivn, 'T', 1. ) 95 CALL lbc_lnk( hdivn, 'T', 1. ) !== lateral boundary cond. ==! (no sign change) 96 96 ! 97 97 IF( nn_timing == 1 ) CALL timing_stop('div_hor') -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r5956 r5969 231 231 IF( ioptio > 1 .OR. ( ioptio == 0 .AND. .NOT. lk_c1d ) ) & 232 232 & CALL ctl_stop( ' Choose only one surface pressure gradient scheme' ) 233 IF( l k_dynspg_exp .AND. ln_isfcav ) &233 IF( ln_dynspg_exp .AND. ln_isfcav ) & 234 234 & CALL ctl_stop( ' dynspg_exp not tested with ice shelf cavity ' ) 235 235 ! -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r5956 r5969 231 231 END DO 232 232 END DO 233 END DO234 233 CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) 235 234 DO jj = 1, jpjm1 … … 244 243 END SELECT 245 244 CALL lbc_lnk( zwz, 'F', 1._wp ) 246 zwz(:,:) = ff(:,:) * zwz(:,:) 247 245 ! 248 246 ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 249 247 DO jj = 2, jpj … … 572 570 DO jj = 2, jpjm1 ! Sea Surface Height at u- & v-points 573 571 DO ji = 2, fs_jpim1 ! Vector opt. 574 zwx(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e1 2u(ji,jj) &575 & * ( e1 2t(ji ,jj) * zsshp2_e(ji ,jj) &576 & + e1 2t(ji+1,jj) * zsshp2_e(ji+1,jj) )577 zwy(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e1 2v(ji,jj) &578 & * ( e1 2t(ji,jj ) * zsshp2_e(ji,jj ) &579 & + e1 2t(ji,jj+1) * zsshp2_e(ji,jj+1) )572 zwx(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj) & 573 & * ( e1e2t(ji ,jj) * zsshp2_e(ji ,jj) & 574 & + e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 575 zwy(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e1e2v(ji,jj) & 576 & * ( e1e2t(ji,jj ) * zsshp2_e(ji,jj ) & 577 & + e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 580 578 END DO 581 579 END DO … … 650 648 DO jj = 2, jpjm1 651 649 DO ji = 2, jpim1 ! NO Vector Opt. 652 zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e1 2u(ji,jj) &653 & * ( e1 2t(ji ,jj ) * ssha_e(ji ,jj ) &654 & + e1 2t(ji+1,jj ) * ssha_e(ji+1,jj ) )655 zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e1 2v(ji,jj) &656 & * ( e1 2t(ji ,jj ) * ssha_e(ji ,jj ) &657 & + e1 2t(ji ,jj+1) * ssha_e(ji ,jj+1) )650 zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj) & 651 & * ( e1e2t(ji ,jj ) * ssha_e(ji ,jj ) & 652 & + e1e2t(ji+1,jj ) * ssha_e(ji+1,jj ) ) 653 zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e1e2v(ji,jj) & 654 & * ( e1e2t(ji ,jj ) * ssha_e(ji ,jj ) & 655 & + e1e2t(ji ,jj+1) * ssha_e(ji ,jj+1) ) 658 656 END DO 659 657 END DO … … 689 687 DO jj = 2, jpjm1 690 688 DO ji = 2, jpim1 691 zx1 = z1_2 * ssumask(ji ,jj) * r1_e1 2u(ji ,jj) &689 zx1 = z1_2 * ssumask(ji ,jj) * r1_e1e2u(ji ,jj) & 692 690 & * ( e1e2t(ji ,jj ) * zsshp2_e(ji ,jj) & 693 691 & + e1e2t(ji+1,jj ) * zsshp2_e(ji+1,jj ) ) 694 zy1 = z1_2 * ssvmask(ji ,jj) * r1_e1 2v(ji ,jj ) &692 zy1 = z1_2 * ssvmask(ji ,jj) * r1_e1e2v(ji ,jj ) & 695 693 & * ( e1e2t(ji ,jj ) * zsshp2_e(ji ,jj ) & 696 694 & + e1e2t(ji ,jj+1) * zsshp2_e(ji ,jj+1) ) … … 765 763 ! 766 764 ! Add top stresses: 767 zu_trd(:,:) = zu_trd(:,:) + tfrua(:,:) * zun_e(:,:) * hur_e(:,:)768 zv_trd(:,:) = zv_trd(:,:) + tfrva(:,:) * zvn_e(:,:) * hvr_e(:,:)765 zu_trd(:,:) = zu_trd(:,:) + tfrua(:,:) * un_e(:,:) * hur_e(:,:) 766 zv_trd(:,:) = zv_trd(:,:) + tfrva(:,:) * vn_e(:,:) * hvr_e(:,:) 769 767 ! 770 768 ! Surface pressure trend: … … 780 778 ! 781 779 ! Set next velocities: 782 IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN ! Vector form780 IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN ! Vector form 783 781 DO jj = 2, jpjm1 784 782 DO ji = fs_2, fs_jpim1 ! vector opt. -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90
r5956 r5969 82 82 ENDIF 83 83 84 ! ! Vertical momentum advection at uw and vw-points 85 DO jk = 2, jpk 84 DO jk = 2, jpkm1 ! Vertical momentum advection at level w and u- and v- vertical 86 85 DO jj = 2, jpj ! vertical fluxes 87 86 DO ji = fs_2, jpi ! vector opt. … … 89 88 END DO 90 89 END DO 91 DO jj = 2, jpjm1 ! interiorvertical momentum advection at w-point92 DO ji = fs_2, fs_jpim1 90 DO jj = 2, jpjm1 ! vertical momentum advection at w-point 91 DO ji = fs_2, fs_jpim1 ! vector opt. 93 92 zwuw(ji,jj,jk) = ( zww(ji+1,jj ) + zww(ji,jj) ) * ( un(ji,jj,jk-1) - un(ji,jj,jk) ) 94 93 zwvw(ji,jj,jk) = ( zww(ji ,jj+1) + zww(ji,jj) ) * ( vn(ji,jj,jk-1) - vn(ji,jj,jk) ) … … 96 95 END DO 97 96 END DO 98 DO jj = 2, jpjm1 ! First/last level advective fluxes 99 DO ji = fs_2, fs_jpim1 ! w is zero at k=1 and k=jpk 100 zwuw(ji,jj, 1 ) = 0._wp 101 zwvw(ji,jj, 1 ) = 0._wp 102 zwuw(ji,jj,jpk) = 0._wp 103 zwvw(ji,jj,jpk) = 0._wp 104 END DO 105 END DO 97 ! 98 ! Surface and bottom advective fluxes set to zero 99 IF ( ln_isfcav ) THEN 100 DO jj = 2, jpjm1 101 DO ji = fs_2, fs_jpim1 ! vector opt. 102 zwuw(ji,jj, 1:miku(ji,jj) ) = 0._wp 103 zwvw(ji,jj, 1:mikv(ji,jj) ) = 0._wp 104 zwuw(ji,jj,jpk) = 0._wp 105 zwvw(ji,jj,jpk) = 0._wp 106 END DO 107 END DO 108 ELSE 109 DO jj = 2, jpjm1 110 DO ji = fs_2, fs_jpim1 ! vector opt. 111 zwuw(ji,jj, 1 ) = 0._wp 112 zwvw(ji,jj, 1 ) = 0._wp 113 zwuw(ji,jj,jpk) = 0._wp 114 zwvw(ji,jj,jpk) = 0._wp 115 END DO 116 END DO 117 END IF 106 118 107 119 DO jk = 1, jpkm1 ! Vertical momentum advection at u- and v-points … … 194 206 DO jj = 2, jpj 195 207 DO ji = fs_2, jpi ! vector opt. 196 <<<<<<< .working197 zww(ji,jj,jk) = 0.25_wp * e12t(ji,jj) * wn(ji,jj,jk)198 =======199 208 zww(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * wn(ji,jj,jk) 200 >>>>>>> .merge-right.r5936201 209 END DO 202 210 END DO -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90
r5956 r5969 118 118 REAL(wp) :: zcj, zfj, zav, zbv, zaj, zbj ! - - 119 119 REAL(wp) :: zck, zfk, zbw ! - - 120 REAL(wp) :: zdepu, zdepv ! - - 120 121 REAL(wp), POINTER, DIMENSION(:,: ) :: zslpml_hmlpu, zslpml_hmlpv 121 122 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwz, zww … … 177 178 CALL ldf_slp_mxl( prd, pn2, zgru, zgrv, zdzr ) ! output: uslpml, vslpml, wslpiml, wslpjml 178 179 180 179 181 ! I. slopes at u and v point | uslp = d/di( prd ) / d/dz( prd ) 180 182 ! =========================== | vslp = d/dj( prd ) / d/dz( prd ) … … 183 185 DO jj = 2, jpjm1 184 186 DO ji = fs_2, fs_jpim1 ! vector opt. 185 zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / ( MAX(hmlpt(ji,jj), hmlpt(ji+1,jj ), 5._wp) &186 & - 0.5 * ( risfdep(ji,jj) + risfdep(ji+1,jj) )187 zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / ( MAX(hmlpt(ji,jj), hmlpt(ji ,jj+1), 5._wp) &188 & - 0.5 * ( risfdep(ji,jj) + risfdep(ji ,jj+1) )187 zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / ( MAX(hmlpt(ji,jj), hmlpt(ji+1,jj ), 5._wp) & 188 & - 0.5_wp * ( risfdep(ji,jj) + risfdep(ji+1,jj ) ) ) 189 zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / ( MAX(hmlpt(ji,jj), hmlpt(ji ,jj+1), 5._wp) & 190 & - 0.5_wp * ( risfdep(ji,jj) + risfdep(ji ,jj+1) ) ) 189 191 END DO 190 192 END DO … … 193 195 DO ji = fs_2, fs_jpim1 ! vector opt. 194 196 zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji+1,jj ), 5._wp) 195 zslpml_hmlp u(ji,jj) = vslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji ,jj+1), 5._wp)197 zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji ,jj+1), 5._wp) 196 198 END DO 197 199 END DO -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90
r5956 r5969 91 91 IF( kn_fwb == 3 .AND. ln_isfcav ) CALL ctl_stop( 'sbc_fwb: nn_fwb = 3 with ln_isfcav = .TRUE. not working, we stop ' ) 92 92 ! 93 area = glob_sum( e1 2t(:,:) * tmask(:,:,1)) ! interior global domain surface93 area = glob_sum( e1e2t(:,:) * tmask(:,:,1)) ! interior global domain surface 94 94 ! isf cavities are excluded because it can feedback to the melting with generation of inhibition of plumes 95 95 ! and in case of no melt, it can generate HSSW. … … 133 133 a_fwb_b = a_fwb ! mean sea level taking into account the ice+snow 134 134 ! sum over the global domain 135 a_fwb = glob_sum( e1 2t(:,:) * ( sshn(:,:) + snwice_mass(:,:) * r1_rau0 ) )135 a_fwb = glob_sum( e1e2t(:,:) * ( sshn(:,:) + snwice_mass(:,:) * r1_rau0 ) ) 136 136 a_fwb = a_fwb * 1.e+3 / ( area * rday * 365. ) ! convert in Kg/m3/s = mm/s 137 137 !!gm ! !!bug 365d year … … 159 159 ztmsk_neg(:,:) = tmask_i(:,:) - ztmsk_pos(:,:) 160 160 ! 161 zsurf_neg = glob_sum( e1 2t(:,:)*ztmsk_neg(:,:) ) ! Area filled by <0 and >0 erp162 zsurf_pos = glob_sum( e1 2t(:,:)*ztmsk_pos(:,:) )161 zsurf_neg = glob_sum( e1e2t(:,:)*ztmsk_neg(:,:) ) ! Area filled by <0 and >0 erp 162 zsurf_pos = glob_sum( e1e2t(:,:)*ztmsk_pos(:,:) ) 163 163 ! ! fwf global mean (excluding ocean to ice/snow exchanges) 164 164 z_fwf = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) - snwice_fmass(:,:) ) ) / area … … 172 172 ENDIF 173 173 ! 174 zsum_fwf = glob_sum( e1 2t(:,:) * z_fwf ) ! fwf global mean over <0 or >0 erp area174 zsum_fwf = glob_sum( e1e2t(:,:) * z_fwf ) ! fwf global mean over <0 or >0 erp area 175 175 !!gm : zsum_fwf = z_fwf * area ??? it is right? I think so.... 176 176 z_fwf_nsrf = zsum_fwf / ( zsurf_tospread + rsmall ) 177 177 ! ! weight to respect erp field 2D structure 178 zsum_erp = glob_sum( ztmsk_tospread(:,:) * erp(:,:) * e1 2t(:,:) )178 zsum_erp = glob_sum( ztmsk_tospread(:,:) * erp(:,:) * e1e2t(:,:) ) 179 179 z_wgt(:,:) = ztmsk_tospread(:,:) * erp(:,:) / ( zsum_erp + rsmall ) 180 180 ! ! final correction term to apply … … 191 191 IF( z_fwf < 0._wp ) THEN 192 192 WRITE(numout,*)' z_fwf < 0' 193 WRITE(numout,*)' SUM(erp+) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1 2t(:,:) )*1.e-9,' Sv'193 WRITE(numout,*)' SUM(erp+) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2t(:,:) )*1.e-9,' Sv' 194 194 ELSE 195 195 WRITE(numout,*)' z_fwf >= 0' 196 WRITE(numout,*)' SUM(erp-) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1 2t(:,:) )*1.e-9,' Sv'196 WRITE(numout,*)' SUM(erp-) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2t(:,:) )*1.e-9,' Sv' 197 197 ENDIF 198 WRITE(numout,*)' SUM(empG) = ', SUM( z_fwf*e1 2t(:,:) )*1.e-9,' Sv'198 WRITE(numout,*)' SUM(empG) = ', SUM( z_fwf*e1e2t(:,:) )*1.e-9,' Sv' 199 199 WRITE(numout,*)' z_fwf = ', z_fwf ,' Kg/m2/s' 200 200 WRITE(numout,*)' z_fwf_nsrf = ', z_fwf_nsrf ,' Kg/m2/s' -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90
r5956 r5969 388 388 ! For those corresponding to zonal boundary 389 389 qisf(ji,jj) = - rau0 * rcp * rn_gammat0 * risfLeff(ji,jj) * e1t(ji,jj) * zt_ave & 390 & * r1_e1 2t(ji,jj) * tmask(ji,jj,jk)390 & * r1_e1e2t(ji,jj) * tmask(ji,jj,jk) 391 391 392 392 fwfisf(ji,jj) = qisf(ji,jj) / rlfusisf !fresh water flux kg/(m2s) -
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r5956 r5969 234 234 END DO 235 235 IF( ln_isfcav ) THEN ! first wet level beneath a cavity 236 ! PM: IF needed to avoid erasing surface value (jk=1)237 236 DO jj = 1, jpjm1 238 237 DO ji = 1, fs_jpim1 ! vector opt. … … 333 332 DO jj = 1, jpjm1 334 333 DO ji = fs_2, fs_jpim1 335 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk) &334 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * wmask(ji,jj,jk) & 336 335 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) & 337 336 & * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) … … 348 347 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) & 349 348 & + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj) & 350 & * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * tmask(ji,jj,jk) / fse3w(ji,jj,jk)349 & * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * wmask(ji,jj,jk) / fse3w(ji,jj,jk) 351 350 END DO 352 351 END DO … … 356 355 DO jj = 1, jpjm1 357 356 DO ji = fs_2, fs_jpim1 358 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk) &357 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * wmask(ji,jj,jk) & 359 358 & * ( ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) ) & 360 359 & + akz (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) ) )
Note: See TracChangeset
for help on using the changeset viewer.