Changeset 10009
- Timestamp:
- 2018-07-29T11:23:51+02:00 (6 years ago)
- Location:
- NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src
- Files:
-
- 51 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/ICE/iceistate.F90
r10001 r10009 415 415 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 416 416 ! 417 ssh n(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rho0418 ssh b(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rho0417 ssh(:,:,Nnn) = ssh(:,:,Nnn) - snwice_mass(:,:) * r1_rho0 418 ssh(:,:,Nbb) = ssh(:,:,Nbb) - snwice_mass(:,:) * r1_rho0 419 419 ! 420 420 IF( .NOT.ln_linssh ) THEN ! modified the now and before vertical mesh and scale factors -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/ICE/iceupdate.F90
r9939 r10009 15 15 !! ice_update_tau : update i- and j-stresses, and its modulus at the ocean surface 16 16 !!---------------------------------------------------------------------- 17 USE oce , ONLY : sshn, sshb18 17 USE phycst ! physical constants 19 18 USE dom_oce ! ocean domain -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/NST/agrif_oce_interp.F90
r9806 r10009 520 520 DO jj = 1, jpj 521 521 DO ji = 2, indx 522 ssh a(ji,jj) = hbdy_w(ji-1,jj)523 END DO524 END DO522 ssh(ji,jj,Naa) = hbdy_w(ji-1,jj) 523 END DO 524 END DO 525 525 ENDIF 526 526 ! … … 530 530 DO jj = 1, jpj 531 531 DO ji = indx, nlci-1 532 ssh a(ji,jj) = hbdy_e(ji-indx+1,jj)533 END DO534 END DO532 ssh(ji,jj,Naa) = hbdy_e(ji-indx+1,jj) 533 END DO 534 END DO 535 535 ENDIF 536 536 ! … … 540 540 DO jj = 2, indy 541 541 DO ji = 1, jpi 542 ssh a(ji,jj) = hbdy_s(ji,jj-1)543 END DO544 END DO542 ssh(ji,jj,Naa) = hbdy_s(ji,jj-1) 543 END DO 544 END DO 545 545 ENDIF 546 546 ! … … 550 550 DO jj = indy, nlcj-1 551 551 DO ji = 1, jpi 552 ssh a(ji,jj) = hbdy_n(ji,jj-indy+1)553 END DO554 END DO552 ssh(ji,jj,Naa) = hbdy_n(ji,jj-indy+1) 553 END DO 554 END DO 555 555 ENDIF 556 556 ! … … 576 576 DO ji = 2, indx 577 577 ssha_e(ji,jj) = hbdy_w(ji-1,jj) 578 END DO579 END DO578 END DO 579 END DO 580 580 ENDIF 581 581 ! … … 586 586 DO ji = indx, nlci-1 587 587 ssha_e(ji,jj) = hbdy_e(ji-indx+1,jj) 588 END DO589 END DO588 END DO 589 END DO 590 590 ENDIF 591 591 ! … … 596 596 DO ji = 1, jpi 597 597 ssha_e(ji,jj) = hbdy_s(ji,jj-1) 598 END DO599 END DO598 END DO 599 END DO 600 600 ENDIF 601 601 ! … … 606 606 DO ji = 1, jpi 607 607 ssha_e(ji,jj) = hbdy_n(ji,jj-indy+1) 608 END DO609 END DO608 END DO 609 END DO 610 610 ENDIF 611 611 ! … … 700 700 N_out = N_out + 1 701 701 h_out(jk) = e3t_n(iref,jref,jk) 702 END DO702 END DO 703 703 IF (N_in > 0) THEN 704 704 DO jn=1,jpts 705 705 call reconstructandremap(tabin(1:N_in,jn),h_in,ptab_child(ji,jj,1:N_out,jn),h_out,N_in,N_out) 706 END DO706 END DO 707 707 ENDIF 708 END DO709 END DO708 END DO 709 END DO 710 710 # else 711 711 ptab_child(i1:i2,j1:j2,1:jpk,1:jpts) = ptab(i1:i2,j1:j2,1:jpk,1:jpts) … … 848 848 END SUBROUTINE interptsn 849 849 850 850 851 SUBROUTINE interpsshn( ptab, i1, i2, j1, j2, before, nb, ndir ) 851 852 !!---------------------------------------------------------------------- … … 861 862 ! 862 863 IF( before) THEN 863 ptab(i1:i2,j1:j2) = ssh n(i1:i2,j1:j2)864 ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Nnn) 864 865 ELSE 865 866 western_side = (nb == 1).AND.(ndir == 1) … … 868 869 northern_side = (nb == 2).AND.(ndir == 2) 869 870 !! clem ghost 870 IF(western_side )hbdy_w(1:nbghostcells,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1)871 IF(eastern_side )hbdy_e(1:nbghostcells,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1)872 IF(southern_side) hbdy_s(i1:i2,1:nbghostcells) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1)873 IF(northern_side) hbdy_n(i1:i2,1:nbghostcells) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1)871 IF(western_side ) hbdy_w(1:nbghostcells,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 872 IF(eastern_side ) hbdy_e(1:nbghostcells,j1:j2) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 873 IF(southern_side) hbdy_s(i1:i2,1:nbghostcells) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 874 IF(northern_side) hbdy_n(i1:i2,1:nbghostcells) = ptab(i1:i2,j1:j2) * tmask(i1:i2,j1:j2,1) 874 875 ENDIF 875 876 ! 876 877 END SUBROUTINE interpsshn 878 877 879 878 880 SUBROUTINE interpun( ptab, i1, i2, j1, j2, k1, k2, m1, m2, before, nb, ndir ) … … 925 927 tabin(jk) = ptab(ji,jj,jk,1)/ptab(ji,jj,jk,2) 926 928 h_in(N_in) = ptab(ji,jj,jk,2)/(e2u(ji,jj)*zrhoy) 927 END DO929 END DO 928 930 929 931 IF (N_in == 0) THEN … … 937 939 N_out = N_out + 1 938 940 h_out(N_out) = e3u_a(iref,jj,jk) 939 END DO941 END DO 940 942 941 943 IF (N_out == 0) THEN … … 953 955 ENDIF 954 956 call reconstructandremap(tabin(1:N_in),h_in(1:N_in),ua(ji,jj,1:N_out),h_out(1:N_out),N_in,N_out) 955 END DO956 END DO957 END DO 958 END DO 957 959 958 960 # else … … 1416 1418 N_out = N_out + 1 1417 1419 h_out(jk) = e3t_n(ji,jj,jk) 1418 END DO1420 END DO 1419 1421 IF (N_in > 0) THEN 1420 1422 CALL reconstructandremap(tabin(1:N_in),h_in,avm_k(ji,jj,1:N_out),h_out,N_in,N_out) 1421 1423 ENDIF 1422 END DO1423 END DO1424 END DO 1425 END DO 1424 1426 #else 1425 1427 avm_k(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2,1) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/NST/agrif_oce_update.F90
r9939 r10009 1015 1015 ! 1016 1016 IF( before ) THEN 1017 DO jj =j1,j21018 DO ji =i1,i21019 tabres(ji,jj) = ssh n(ji,jj)1017 DO jj = j1, j2 1018 DO ji = i1, i2 1019 tabres(ji,jj) = ssh(ji,jj,Nnn) 1020 1020 END DO 1021 1021 END DO … … 1023 1023 IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) THEN 1024 1024 !!gm IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 1025 DO jj =j1,j21026 DO ji =i1,i21027 ssh b(ji,jj) = sshb(ji,jj) + rn_atfp * ( tabres(ji,jj) - sshn(ji,jj) ) * tmask(ji,jj,1)1028 END DO 1029 END DO 1030 ENDIF 1031 ! 1032 DO jj =j1,j21033 DO ji =i1,i21034 ssh n(ji,jj) = tabres(ji,jj) * tmask(ji,jj,1)1025 DO jj = j1, j2 1026 DO ji = i1, i2 1027 ssh(ji,jj,Nbb) = ssh(ji,jj,Nbb) + rn_atfp * ( tabres(ji,jj) - ssh(ji,jj,Nnn) ) * tmask(ji,jj,1) 1028 END DO 1029 END DO 1030 ENDIF 1031 ! 1032 DO jj = j1, j2 1033 DO ji = i1, i2 1034 ssh(ji,jj,Nnn) = tabres(ji,jj) * tmask(ji,jj,1) 1035 1035 END DO 1036 1036 END DO … … 1038 1038 IF ( l_1st_euler .AND. Agrif_Nb_Step() == 0 ) THEN 1039 1039 !!gm IF ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 1040 ssh b(i1:i2,j1:j2) = sshn(i1:i2,j1:j2)1040 ssh(i1:i2,j1:j2,Nbb) = ssh(i1:i2,j1:j2,Nnn) 1041 1041 ENDIF 1042 1042 ! … … 1119 1119 DO jj=j1,j2 1120 1120 zcor = rn_Dt * r1_e1e2t(i1 ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj)) 1121 ssh n(i1 ,jj) = sshn(i1 ,jj) + zcor1122 IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) ssh b(i1 ,jj) = sshb(i1 ,jj) + rn_atfp * zcor1121 ssh(i1 ,jj,Nnn) = ssh(i1 ,jj,Nnn) + zcor 1122 IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) ssh(i1 ,jj,Nbb) = ssh(i1 ,jj,Nbb) + rn_atfp * zcor 1123 1123 !!gm IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i1 ,jj) = sshb(i1 ,jj) + rn_atfp * zcor 1124 1124 END DO … … 1127 1127 DO jj=j1,j2 1128 1128 zcor = - rn_Dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 1129 ssh n(i2+1,jj) = sshn(i2+1,jj) + zcor1130 IF (.NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) ssh b(i2+1,jj) = sshb(i2+1,jj) + rn_atfp * zcor1129 ssh(i2+1,jj,Nnn) = ssh(i2+1,jj,Nnn) + zcor 1130 IF (.NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) ssh(i2+1,jj,Nbb) = ssh(i2+1,jj,Nbb) + rn_atfp * zcor 1131 1131 !!gm IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(i2+1,jj) = sshb(i2+1,jj) + rn_atfp * zcor 1132 1132 END DO … … 1210 1210 IF (southern_side) THEN 1211 1211 DO ji=i1,i2 1212 zcor = rn_Dt * r1_e1e2t(ji,j1 ) * e1v(ji,j1 ) * ( vb2_b(ji,j1)-tabres(ji,j1))1213 ssh n(ji,j1 ) = sshn(ji,j1) + zcor1214 IF ( .NOT.( lk_agrif_fstep .AND. l_euler ) ) ssh b(ji,j1 ) = sshb(ji,j1) + rn_atfp * zcor1212 zcor = rn_Dt * r1_e1e2t(ji,j1 ) * e1v(ji,j1 ) * ( vb2_b(ji,j1)-tabres(ji,j1) ) 1213 ssh(ji,j1 ,Nnn) = ssh(ji,j1 ,Nnn) + zcor 1214 IF ( .NOT.( lk_agrif_fstep .AND. l_euler ) ) ssh(ji,j1 ,Nbb) = ssh(ji,j1,Nbb) + rn_atfp * zcor 1215 1215 !!gm IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j1 ) = sshb(ji,j1) + rn_atfp * zcor 1216 1216 END DO … … 1218 1218 IF (northern_side) THEN 1219 1219 DO ji=i1,i2 1220 zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2 ) * ( vb2_b(ji,j2)-tabres(ji,j2))1221 ssh n(ji,j2+1) = sshn(ji,j2+1) + zcor1222 IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) ssh b(ji,j2+1) = sshb(ji,j2+1) + rn_atfp * zcor1220 zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2 ) * ( vb2_b(ji,j2)-tabres(ji,j2) ) 1221 ssh(ji,j2+1,Nnn) = ssh(ji,j2+1,Nnn) + zcor 1222 IF ( .NOT.( lk_agrif_fstep .AND. l_1st_euler ) ) ssh(ji,j2+1,Nbb) = ssh(ji,j2+1,Nbb) + rn_atfp * zcor 1223 1223 !!gm IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) sshb(ji,j2+1) = sshb(ji,j2+1) + rn_atfp * zcor 1224 1224 END DO … … 1350 1350 ! Update e3t from ssh (z* case only) 1351 1351 DO jk = 1, jpkm1 1352 DO jj=j1,j2 1353 DO ji=i1,i2 1354 ptab(ji,jj,jk) = e3t_0(ji,jj,jk) * (1._wp + sshn(ji,jj) & 1355 & *ssmask(ji,jj)/(ht_0(ji,jj)-1._wp + ssmask(ji,jj))) 1352 DO jj = j1, j2 1353 DO ji = i1, i2 1354 ptab(ji,jj,jk) = e3t_0(ji,jj,jk) * (1._wp + ssh(ji,jj,Nnn) * r1_ht_0(ji,jj) *tmask(ji,jj,jk) ) 1356 1355 END DO 1357 1356 END DO -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/NST/agrif_user.F90
r9939 r10009 190 190 Agrif_UseSpecialValue = .TRUE. 191 191 CALL Agrif_Bc_variable(sshn_id,calledweight=1., procname=interpsshn ) 192 hbdy_w(:,:) = 0.e0 ; hbdy_e(:,:) = 0.e0 ; hbdy_n(:,:) = 0.e0 ; hbdy_s(:,:) = 0.e0 193 ssha(:,:) = 0.e0 192 hbdy_w(:,:) = 0._wp ; hbdy_e(:,:) = 0._wp 193 hbdy_n(:,:) = 0._wp ; hbdy_s(:,:) = 0._wp 194 ! 195 ssh (:,:,Naa) = 0._wp 194 196 195 197 IF ( ln_dynspg_ts ) THEN … … 199 201 CALL Agrif_Bc_variable(ub2b_interp_id,calledweight=1.,procname=interpub2b) 200 202 CALL Agrif_Bc_variable(vb2b_interp_id,calledweight=1.,procname=interpvb2b) 201 ubdy_w(:,:) = 0. e0 ; vbdy_w(:,:) = 0.e0202 ubdy_e(:,:) = 0. e0 ; vbdy_e(:,:) = 0.e0203 ubdy_n(:,:) = 0. e0 ; vbdy_n(:,:) = 0.e0204 ubdy_s(:,:) = 0. e0 ; vbdy_s(:,:) = 0.e0203 ubdy_w(:,:) = 0._wp ; vbdy_w(:,:) = 0._wp 204 ubdy_e(:,:) = 0._wp ; vbdy_e(:,:) = 0._wp 205 ubdy_n(:,:) = 0._wp ; vbdy_n(:,:) = 0._wp 206 ubdy_s(:,:) = 0._wp ; vbdy_s(:,:) = 0._wp 205 207 ENDIF 206 208 207 209 Agrif_UseSpecialValue = .FALSE. 208 ! reset velocities to zero209 ua(:,:,:) = 0. 210 va(:,:,:) = 0. 210 211 ua(:,:,:) = 0._wp ! reset velocities to zero 212 va(:,:,:) = 0._wp 211 213 212 214 ! 3. Some controls … … 214 216 check_namelist = .TRUE. 215 217 216 IF( check_namelist ) THEN 217 218 ! Check time steps 218 IF( check_namelist ) THEN 219 ! Check time steps 219 220 IF( NINT(Agrif_Rhot()) * NINT(rn_Dt) /= Agrif_Parent(rn_Dt) ) THEN 220 221 WRITE(cl_check1,*) NINT(Agrif_Parent(rn_Dt)) … … 222 223 WRITE(cl_check3,*) NINT(Agrif_Parent(rn_Dt)/Agrif_Rhot()) 223 224 CALL ctl_stop( 'Incompatible time step between ocean grids', & 224 &'parent grid value : '//cl_check1 , &225 &'child grid value : '//cl_check2 , &226 &'value on child grid should be changed to : '//cl_check3 )225 & 'parent grid value : '//cl_check1 , & 226 & 'child grid value : '//cl_check2 , & 227 & 'value on child grid should be changed to : '//cl_check3 ) 227 228 ENDIF 228 229 … … 292 293 END SUBROUTINE Agrif_InitValues_cont 293 294 295 294 296 SUBROUTINE agrif_declare_var 295 297 !!---------------------------------------------------------------------- … … 450 452 451 453 #if defined key_si3 454 452 455 SUBROUTINE Agrif_InitValues_cont_ice 453 456 !!---------------------------------------------------------------------- … … 493 496 ! 494 497 END SUBROUTINE Agrif_InitValues_cont_ice 498 495 499 496 500 SUBROUTINE agrif_declare_var_ice … … 548 552 549 553 END SUBROUTINE agrif_declare_var_ice 554 550 555 #endif 551 556 552 557 553 558 # if defined key_top 559 554 560 SUBROUTINE Agrif_InitValues_cont_top 555 561 !!---------------------------------------------------------------------- … … 808 814 809 815 #else 816 810 817 SUBROUTINE Subcalledbyagrif 811 818 !!---------------------------------------------------------------------- … … 814 821 WRITE(*,*) 'Impossible to be here' 815 822 END SUBROUTINE Subcalledbyagrif 823 816 824 #endif -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ASM/asmbkg.F90
r9598 r10009 103 103 CALL iom_rstput( kt, nitbkg_r, inum, 'tn' , tsn(:,:,:,jp_tem) ) 104 104 CALL iom_rstput( kt, nitbkg_r, inum, 'sn' , tsn(:,:,:,jp_sal) ) 105 CALL iom_rstput( kt, nitbkg_r, inum, 'sshn' , ssh n)105 CALL iom_rstput( kt, nitbkg_r, inum, 'sshn' , ssh(:,:,Nnn) ) 106 106 IF( ln_zdftke ) CALL iom_rstput( kt, nitbkg_r, inum, 'en' , en ) 107 107 ! … … 138 138 CALL iom_rstput( kt, nitdin_r, inum, 'tn' , tsn(:,:,:,jp_tem) ) 139 139 CALL iom_rstput( kt, nitdin_r, inum, 'sn' , tsn(:,:,:,jp_sal) ) 140 CALL iom_rstput( kt, nitdin_r, inum, 'sshn' , ssh n)140 CALL iom_rstput( kt, nitdin_r, inum, 'sshn' , ssh(:,:,Nnn) ) 141 141 #if defined key_si3 142 142 IF( nn_ice == 2 ) THEN -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ASM/asminc.F90
r10001 r10009 728 728 IF(lwp) THEN 729 729 WRITE(numout,*) 730 WRITE(numout,*) 'ssh_asm_inc : SSH IAU at time step = ', & 731 & kt,' with IAU weight = ', wgtiau(it) 730 WRITE(numout,*) 'ssh_asm_inc : SSH IAU at time step = ', kt,' with IAU weight = ', wgtiau(it) 732 731 WRITE(numout,*) '~~~~~~~~~~~~' 733 732 ENDIF … … 755 754 IF ( kt == nitdin_r ) THEN 756 755 ! 757 l_1st_euler = .TRUE. ! Force Euler forward step758 ! 759 ssh n(:,:) = ssh_bkg(:,:) + ssh_bkginc(:,:) ! Initialize the now fields the background + increment760 ! 761 ssh b(:,:) = sshn(:,:)! Update before fields762 e3t_b(:,:,:) = e3t_n(:,:,:)756 l_1st_euler = .TRUE. ! Force Euler forward step 757 ! 758 ssh(:,:,Nnn) = ssh_bkg(:,:) + ssh_bkginc(:,:) ! Initialize the now fields the background + increment 759 ! 760 ssh (:,:,Nbb) = ssh (:,:,Nnn) ! Update before fields 761 e3t_b(:,:,:) = e3t_n(:,:,:) 763 762 764 763 !!gm BUG : missing the update of all other scale factors (e3u e3v e3w etc... _n and _b) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY/bdydta.F90
r9810 r10009 111 111 ii = idx_bdy(jbdy)%nbi(ib,igrd) 112 112 ij = idx_bdy(jbdy)%nbj(ib,igrd) 113 dta_bdy(jbdy)%ssh(ib) = ssh n(ii,ij) * tmask(ii,ij,1)113 dta_bdy(jbdy)%ssh(ib) = ssh(ii,ij,Nnn) * tmask(ii,ij,1) 114 114 END DO 115 115 ENDIF -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/BDY/bdydyn.F90
r9598 r10009 97 97 !------------------------------------------------------- 98 98 99 IF( ll_dyn2d ) CALL bdy_dyn2d( kt, pua2d, pva2d, ub_b, vb_b, r1_hu_a(:,:), r1_hv_a(:,:), ssh a)99 IF( ll_dyn2d ) CALL bdy_dyn2d( kt, pua2d, pva2d, ub_b, vb_b, r1_hu_a(:,:), r1_hv_a(:,:), ssh(:,:,Naa) ) 100 100 101 101 IF( ll_dyn3d ) CALL bdy_dyn3d( kt ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/CRS/crsfld.F90
r9598 r10009 219 219 220 220 ! sbc fields 221 CALL crs_dom_ope( ssh n , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=ze3t , psgn=1.0 )222 CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u , p_surf_crs=e2u_crs , psgn=1.0 )223 CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v , p_surf_crs=e1v_crs , psgn=1.0 )224 CALL crs_dom_ope( wndm , 'SUM', 'T', tmask, wndm_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )225 CALL crs_dom_ope( rnf , 'MAX', 'T', tmask, rnf_crs , psgn=1.0 )226 CALL crs_dom_ope( qsr , 'SUM', 'T', tmask, qsr_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )227 CALL crs_dom_ope( emp_b , 'SUM', 'T', tmask, emp_b_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )228 CALL crs_dom_ope( emp , 'SUM', 'T', tmask, emp_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )229 CALL crs_dom_ope( sfx , 'SUM', 'T', tmask, sfx_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )230 CALL crs_dom_ope( fr_i , 'SUM', 'T', tmask, fr_i_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 )221 CALL crs_dom_ope( ssh(:,:,Nnn) , 'VOL', 'T', tmask, sshn_crs , p_e12=e1e2t, p_e3=ze3t , psgn=1.0 ) 222 CALL crs_dom_ope( utau , 'SUM', 'U', umask, utau_crs , p_e12=e2u , p_surf_crs=e2u_crs , psgn=1.0 ) 223 CALL crs_dom_ope( vtau , 'SUM', 'V', vmask, vtau_crs , p_e12=e1v , p_surf_crs=e1v_crs , psgn=1.0 ) 224 CALL crs_dom_ope( wndm , 'SUM', 'T', tmask, wndm_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 225 CALL crs_dom_ope( rnf , 'MAX', 'T', tmask, rnf_crs , psgn=1.0 ) 226 CALL crs_dom_ope( qsr , 'SUM', 'T', tmask, qsr_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 227 CALL crs_dom_ope( emp_b , 'SUM', 'T', tmask, emp_b_crs, p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 228 CALL crs_dom_ope( emp , 'SUM', 'T', tmask, emp_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 229 CALL crs_dom_ope( sfx , 'SUM', 'T', tmask, sfx_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 230 CALL crs_dom_ope( fr_i , 'SUM', 'T', tmask, fr_i_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 231 231 232 232 CALL iom_put( "ssh" , sshn_crs ) ! ssh output -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/dia25h.F90
r9939 r10009 94 94 ! ------------------------- ! 95 95 cnt_25h = 1 ! sets the first value of sum at timestep 1 (note - should strictly be at timestep zero so before values used where possible) 96 tn_25h (:,:,:) = tsb 97 sn_25h (:,:,:) = tsb 98 sshn_25h(:,:) = ssh b(:,:)99 un_25h (:,:,:) = ub 100 vn_25h (:,:,:) = vb 101 wn_25h (:,:,:) = wn 102 avt_25h (:,:,:) = avt 103 avm_25h (:,:,:) = avm 96 tn_25h (:,:,:) = tsb(:,:,:,jp_tem) 97 sn_25h (:,:,:) = tsb(:,:,:,jp_sal) 98 sshn_25h(:,:) = ssh(:,:,Nbb) 99 un_25h (:,:,:) = ub (:,:,:) 100 vn_25h (:,:,:) = vb (:,:,:) 101 wn_25h (:,:,:) = wn (:,:,:) 102 avt_25h (:,:,:) = avt(:,:,:) 103 avm_25h (:,:,:) = avm(:,:,:) 104 104 IF( ln_zdftke ) THEN 105 105 en_25h(:,:,:) = en(:,:,:) … … 156 156 ENDIF 157 157 158 tn_25h (:,:,:) = tn_25h (:,:,:) + tsn 159 sn_25h (:,:,:) = sn_25h (:,:,:) + tsn 160 sshn_25h(:,:) = sshn_25h(:,:) + ssh n(:,:)161 un_25h (:,:,:) = un_25h (:,:,:) + un 162 vn_25h (:,:,:) = vn_25h (:,:,:) + vn 163 wn_25h (:,:,:) = wn_25h (:,:,:) + wn 164 avt_25h (:,:,:) = avt_25h (:,:,:) + avt 165 avm_25h (:,:,:) = avm_25h (:,:,:) + avm 158 tn_25h (:,:,:) = tn_25h (:,:,:) + tsn(:,:,:,jp_tem) 159 sn_25h (:,:,:) = sn_25h (:,:,:) + tsn(:,:,:,jp_sal) 160 sshn_25h(:,:) = sshn_25h(:,:) + ssh(:,:,Nnn) 161 un_25h (:,:,:) = un_25h (:,:,:) + un (:,:,:) 162 vn_25h (:,:,:) = vn_25h (:,:,:) + vn (:,:,:) 163 wn_25h (:,:,:) = wn_25h (:,:,:) + wn (:,:,:) 164 avt_25h (:,:,:) = avt_25h (:,:,:) + avt(:,:,:) 165 avm_25h (:,:,:) = avm_25h (:,:,:) + avm(:,:,:) 166 166 IF( ln_zdftke ) THEN 167 167 en_25h(:,:,:) = en_25h (:,:,:) + en(:,:,:) … … 206 206 zmdi=1.e+20 !missing data indicator for masking 207 207 ! write tracers (instantaneous) 208 zw3d(:,:,:) = tn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 209 CALL iom_put("temper25h", zw3d) ! potential temperature 210 zw3d(:,:,:) = sn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 211 CALL iom_put( "salin25h", zw3d ) ! salinity 212 zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1)) 213 CALL iom_put( "ssh25h", zw2d ) ! sea surface 208 zw3d(:,:,:) = tn_25h (:,:,:)* tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) ; CALL iom_put("temper25h" , zw3d ) ! potential temperature 209 zw3d(:,:,:) = sn_25h (:,:,:)* tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) ; CALL iom_put( "salin25h" , zw3d ) ! salinity 210 zw2d(:,:) = sshn_25h(:,:) *ssmask(:,:) + zmdi*(1.0-tmask(:,:,1)) ; CALL iom_put( "ssh25h" , zw2d ) ! sea surface 214 211 ! Write velocities (instantaneous) 215 zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) 216 CALL iom_put("vozocrtx25h", zw3d) ! i-current 217 zw3d(:,:,:) = vn_25h(:,:,:)*vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:)) 218 CALL iom_put("vomecrty25h", zw3d ) ! j-current 219 zw3d(:,:,:) = wn_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 220 CALL iom_put("vomecrtz25h", zw3d ) ! k-current 212 zw3d(:,:,:) = un_25h (:,:,:)* umask(:,:,:) + zmdi*(1.0-umask(:,:,:)) ; CALL iom_put("vozocrtx25h", zw3d ) ! i-current 213 zw3d(:,:,:) = vn_25h (:,:,:)* vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:)) ; CALL iom_put("vomecrty25h", zw3d ) ! j-current 214 zw3d(:,:,:) = wn_25h (:,:,:)* wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) ; CALL iom_put("vomecrtz25h", zw3d ) ! k-current 221 215 ! Write vertical physics 222 zw3d(:,:,:) = avt_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 223 CALL iom_put("avt25h", zw3d ) ! diffusivity 224 zw3d(:,:,:) = avm_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 225 CALL iom_put("avm25h", zw3d) ! viscosity 226 IF( ln_zdftke ) THEN 227 zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 228 CALL iom_put("tke25h", zw3d) ! tke 229 ENDIF 230 IF( ln_zdfgls ) THEN 231 zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 232 CALL iom_put("tke25h", zw3d) ! tke 233 zw3d(:,:,:) = rmxln_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) 234 CALL iom_put( "mxln25h",zw3d) 216 zw3d(:,:,:) = avt_25h (:,:,:)* wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) ; CALL iom_put("avt25h" , zw3d ) ! diffusivity 217 zw3d(:,:,:) = avm_25h (:,:,:)* wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) ; CALL iom_put("avm25h" , zw3d ) ! viscosity 218 IF( ln_zdftke ) THEN 219 zw3d(:,:,:) = en_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) ; CALL iom_put("tke25h" , zw3d ) ! tke 220 ENDIF 221 IF( ln_zdfgls ) THEN 222 zw3d(:,:,:) = en_25h (:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) ; CALL iom_put("tke25h" , zw3d ) ! tke 223 zw3d(:,:,:) = rmxln_25h(:,:,:)*wmask(:,:,:) + zmdi*(1.0-tmask(:,:,:)) ; CALL iom_put( "mxln25h", zw3d ) 235 224 ENDIF 236 225 ! 237 226 ! After the write reset the values to cnt=1 and sum values equal current value 238 tn_25h (:,:,:) = tsn 239 sn_25h (:,:,:) = tsn 240 sshn_25h(:,:) = ssh n(:,:)241 un_25h (:,:,:) = un 242 vn_25h (:,:,:) = vn 243 wn_25h (:,:,:) = wn 244 avt_25h (:,:,:) = avt 245 avm_25h (:,:,:) = avm 227 tn_25h (:,:,:) = tsn(:,:,:,jp_tem) 228 sn_25h (:,:,:) = tsn(:,:,:,jp_sal) 229 sshn_25h(:,:) = ssh(:,:,Nnn) 230 un_25h (:,:,:) = un (:,:,:) 231 vn_25h (:,:,:) = vn (:,:,:) 232 wn_25h (:,:,:) = wn (:,:,:) 233 avt_25h (:,:,:) = avt(:,:,:) 234 avm_25h (:,:,:) = avm(:,:,:) 246 235 IF( ln_zdftke ) THEN 247 236 en_25h(:,:,:) = en(:,:,:) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diaar5.F90
r9939 r10009 89 89 ALLOCATE( zrhd(jpi,jpj,jpk) , zrhop(jpi,jpj,jpk) ) 90 90 ALLOCATE( ztsn(jpi,jpj,jpk,jpts) ) 91 zarea_ssh(:,:) = area(:,:) * ssh n(:,:)91 zarea_ssh(:,:) = area(:,:) * ssh(:,:,Nnn) 92 92 ENDIF 93 93 ! … … 100 100 CALL iom_put( 'voltot', zvol ) 101 101 CALL iom_put( 'sshtot', zvolssh / area_tot ) 102 CALL iom_put( 'sshdyn', ssh n(:,:) - (zvolssh / area_tot) )102 CALL iom_put( 'sshdyn', ssh(:,:,Nnn) - (zvolssh / area_tot) ) 103 103 ! 104 104 ENDIF … … 118 118 DO ji = 1, jpi 119 119 DO jj = 1, jpj 120 zbotpres(ji,jj) = zbotpres(ji,jj) + ssh n(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj)120 zbotpres(ji,jj) = zbotpres(ji,jj) + ssh(ji,jj,Nnn) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 121 121 END DO 122 122 END DO 123 123 ELSE 124 zbotpres(:,:) = zbotpres(:,:) + ssh n(:,:) * zrhd(:,:,1)124 zbotpres(:,:) = zbotpres(:,:) + ssh(:,:,Nnn) * zrhd(:,:,1) 125 125 END IF 126 126 !!gm … … 147 147 DO ji = 1,jpi 148 148 DO jj = 1,jpj 149 zbotpres(ji,jj) = zbotpres(ji,jj) + ssh n(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj)149 zbotpres(ji,jj) = zbotpres(ji,jj) + ssh(ji,jj,Nnn) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 150 150 END DO 151 151 END DO 152 152 ELSE 153 zbotpres(:,:) = zbotpres(:,:) + ssh n(:,:) * zrhd(:,:,1)153 zbotpres(:,:) = zbotpres(:,:) + ssh(:,:,Nnn) * zrhd(:,:,1) 154 154 END IF 155 155 END IF … … 162 162 ! ! ocean bottom pressure 163 163 zztmp = rho0 * grav * 1.e-4_wp ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 164 zbotpres(:,:) = zztmp * ( zbotpres(:,:) + ssh n(:,:) + thick0(:,:) )164 zbotpres(:,:) = zztmp * ( zbotpres(:,:) + ssh(:,:,Nnn) + thick0(:,:) ) 165 165 CALL iom_put( 'botpres', zbotpres ) 166 166 ! -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diadct.F90
r9939 r10009 491 491 !! 492 492 !---------------------------------------------------------------------------- 493 !! * arguments494 493 TYPE(SECTION),INTENT(INOUT) :: sec 495 494 CHARACTER(len=1),INTENT(IN) :: cdind ! = 'I'/'J' 496 495 CHARACTER(len=8),INTENT(IN) :: cdextr ! = 'top_list'/'bot_list' 497 496 LOGICAL,INTENT(IN) :: ld_debug 498 499 !! * Local variables 497 ! 500 498 INTEGER :: iextr ,& !extremity of listpoint that we verify 501 499 iind ,& !coord of listpoint that we verify … … 588 586 REAL(wp):: zumid, zvmid, zumid_ice, zvmid_ice ! U/V ocean & ice velocity on a cell segment 589 587 REAL(wp):: zTnorm ! transport of velocity through one cell's sides 590 REAL(wp):: ztn, zsn, zrhoi, zrhop, zssh n, zdep! temperature/salinity/potential density/ssh/depth at u/v point588 REAL(wp):: ztn, zsn, zrhoi, zrhop, zssh, zdep ! temperature/salinity/potential density/ssh/depth at u/v point 591 589 TYPE(POINT_SECTION) :: k 592 590 !!-------------------------------------------------------- … … 680 678 zrhop = interp(k%I,k%J,jk,'V',rhop) 681 679 zrhoi = interp(k%I,k%J,jk,'V',rhd*rho0+rho0) 682 zssh n = 0.5*( sshn(k%I,k%J) + sshn(k%I,k%J+1) ) * vmask(k%I,k%J,1)680 zssh = 0.5*( ssh(k%I,k%J,Nnn) + ssh(k%I,k%J+1,Nnn) ) * vmask(k%I,k%J,1) 683 681 CASE(2,3) 684 682 ztn = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_tem) ) … … 686 684 zrhop = interp(k%I,k%J,jk,'U',rhop) 687 685 zrhoi = interp(k%I,k%J,jk,'U',rhd*rho0+rho0) 688 zssh n = 0.5*( sshn(k%I,k%J) + sshn(k%I+1,k%J) ) * umask(k%I,k%J,1)686 zssh = 0.5*( ssh(k%I,k%J,Nnn) + ssh(k%I+1,k%J,Nnn) ) * umask(k%I,k%J,1) 689 687 END SELECT 690 688 ! … … 706 704 707 705 !!gm THIS is WRONG no transport due to ssh in linear free surface case !!!!! 708 IF( ln_linssh ) THEN !add transport due to free surface709 IF( jk==1 ) THEN710 zTnorm = zTnorm + zumid* e2u(k%I,k%J) * zsshn* umask(k%I,k%J,jk) &711 & + zvmid* e1v(k%I,k%J) * zsshn* vmask(k%I,k%J,jk)712 ENDIF713 ENDIF706 ! IF( ln_linssh ) THEN !add transport due to free surface 707 ! IF( jk==1 ) THEN 708 ! zTnorm = zTnorm + zumid* e2u(k%I,k%J) * zssh * umask(k%I,k%J,jk) & 709 ! & + zvmid* e1v(k%I,k%J) * zssh * vmask(k%I,k%J,jk) 710 ! ENDIF 711 ! ENDIF 714 712 !!gm end 715 713 !COMPUTE TRANSPORT … … 792 790 TYPE(POINT_SECTION) :: k 793 791 INTEGER :: jk,jseg,jclass ! dummy variables for looping on level/segment/classes 794 REAL(wp) :: ztn, zsn, zrhoi, zrhop, zssh n, zdep ! temperature/salinity/ssh/potential density /depth at u/v point792 REAL(wp) :: ztn, zsn, zrhoi, zrhop, zssh, zdep ! temperature/salinity/ssh/potential density /depth at u/v point 795 793 !!------------------------------------------------------------- 796 794 … … 858 856 zrhop = interp(k%I,k%J,jk,'U',rhop) 859 857 zrhoi = interp(k%I,k%J,jk,'U',rhd*rho0+rho0) 860 zssh n = 0.5*( sshn(k%I,k%J) + sshn(k%I+1,k%J)) * umask(k%I,k%J,1)858 zssh = 0.5*( ssh(k%I,k%J,Nnn) + ssh(k%I+1,k%J,Nnn) ) * umask(k%I,k%J,1) 861 859 END SELECT 862 860 -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diaharm.F90
r9939 r10009 193 193 DO ji = 1,jpi 194 194 ! Elevation 195 ana_temp(ji,jj,nhc,1) = ana_temp(ji,jj,nhc,1) + ztemp*ssh n(ji,jj)*ssmask (ji,jj)196 ana_temp(ji,jj,nhc,2) = ana_temp(ji,jj,nhc,2) + ztemp*un_b(ji,jj) *ssumask(ji,jj)197 ana_temp(ji,jj,nhc,3) = ana_temp(ji,jj,nhc,3) + ztemp*vn_b(ji,jj) *ssvmask(ji,jj)195 ana_temp(ji,jj,nhc,1) = ana_temp(ji,jj,nhc,1) + ztemp*ssh (ji,jj,Nnn)*ssmask (ji,jj) 196 ana_temp(ji,jj,nhc,2) = ana_temp(ji,jj,nhc,2) + ztemp*un_b(ji,jj) *ssumask(ji,jj) 197 ana_temp(ji,jj,nhc,3) = ana_temp(ji,jj,nhc,3) + ztemp*vn_b(ji,jj) *ssvmask(ji,jj) 198 198 END DO 199 199 END DO -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diahsb.F90
r9939 r10009 135 135 136 136 ! ! volume variation (calculated with ssh) 137 zdiff_v1 = glob_sum_full( surf(:,:)*ssh n(:,:) - surf_ini(:,:)*ssh_ini(:,:) )137 zdiff_v1 = glob_sum_full( surf(:,:)*ssh(:,:,Nnn) - surf_ini(:,:)*ssh_ini(:,:) ) 138 138 139 139 ! ! heat & salt content variation (associated with ssh) … … 142 142 DO ji = 1, jpi 143 143 DO jj = 1, jpj 144 z2d0(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_tem) * ssh n(ji,jj) - ssh_hc_loc_ini(ji,jj) )145 z2d1(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_sal) * ssh n(ji,jj) - ssh_sc_loc_ini(ji,jj) )144 z2d0(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_tem) * ssh(ji,jj,Nnn) - ssh_hc_loc_ini(ji,jj) ) 145 z2d1(ji,jj) = surf(ji,jj) * ( tsn(ji,jj,mikt(ji,jj),jp_sal) * ssh(ji,jj,Nnn) - ssh_sc_loc_ini(ji,jj) ) 146 146 END DO 147 147 END DO 148 148 ELSE ! no under ice-shelf seas 149 z2d0(:,:) = surf(:,:) * ( tsn(:,:,1,jp_tem) * ssh n(:,:) - ssh_hc_loc_ini(:,:) )150 z2d1(:,:) = surf(:,:) * ( tsn(:,:,1,jp_sal) * ssh n(:,:) - ssh_sc_loc_ini(:,:) )149 z2d0(:,:) = surf(:,:) * ( tsn(:,:,1,jp_tem) * ssh(:,:,Nnn) - ssh_hc_loc_ini(:,:) ) 150 z2d1(:,:) = surf(:,:) * ( tsn(:,:,1,jp_sal) * ssh(:,:,Nnn) - ssh_sc_loc_ini(:,:) ) 151 151 END IF 152 152 z_ssh_hc = glob_sum_full( z2d0 ) … … 191 191 !!gm to be added ? 192 192 ! IF( ln_linssh ) THEN ! fixed volume, add the ssh contribution 193 ! zvol_tot = zvol_tot + glob_sum( surf(:,:) * ssh n(:,:) )193 ! zvol_tot = zvol_tot + glob_sum( surf(:,:) * ssh(:,:,Nnn) ) 194 194 ! ENDIF 195 195 !!gm end … … 281 281 IF(lwp) WRITE(numout,*) 282 282 surf_ini(:,:) = e1e2t(:,:) * tmask_i(:,:) ! initial ocean surface 283 ssh_ini (:,:) = sshn(:,:)! initial ssh283 ssh_ini (:,:) = ssh(:,:,Nnn) ! initial ssh 284 284 DO jk = 1, jpk 285 285 ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance). … … 295 295 DO ji = 1, jpi 296 296 DO jj = 1, jpj 297 ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * ssh n(ji,jj) ! initial heat content in ssh298 ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * ssh n(ji,jj) ! initial salt content in ssh297 ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * ssh(ji,jj,Nnn) ! initial heat content in ssh 298 ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * ssh(ji,jj,Nnn) ! initial salt content in ssh 299 299 END DO 300 300 END DO 301 301 ELSE 302 ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * ssh n(:,:) ! initial heat content in ssh303 ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * ssh n(:,:) ! initial salt content in ssh302 ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * ssh(:,:,Nnn) ! initial heat content in ssh 303 ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * ssh(:,:,Nnn) ! initial salt content in ssh 304 304 END IF 305 305 frc_wn_t = 0._wp ! initial heat content misfit due to free surface -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diahth.F90
r9939 r10009 311 311 END DO 312 312 ! surface boundary condition 313 IF( ln_linssh ) THEN ; zthick(:,:) = ssh n(:,:) ; htc3(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) * tmask(:,:,1)314 ELSE ; zthick(:,:) = 0._wp ; htc3(:,:) = 0._wp313 IF( ln_linssh ) THEN ; zthick(:,:) = ssh(:,:,Nnn) ; htc3(:,:) = tsn(:,:,1,jp_tem) * ssh(:,:,Nnn) * tmask(:,:,1) 314 ELSE ; zthick(:,:) = 0._wp ; htc3(:,:) = 0._wp 315 315 ENDIF 316 316 ! integration down to ilevel -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diatmb.F90
r9598 r10009 108 108 CALL dia_calctmb( tsn(:,:,:,jp_tem), zwtmb ) 109 109 !ssh already output but here we output it masked 110 CALL iom_put( "sshnmasked", ssh n(:,:)*tmask(:,:,1) + zmdi*(1.0 - tmask(:,:,1)) )110 CALL iom_put( "sshnmasked", ssh(:,:,Nnn)*ssmask(:,:) + zmdi*(1._wp - ssmask(:,:)) ) 111 111 CALL iom_put( "top_temp" , zwtmb(:,:,1) ) ! tmb Temperature 112 112 CALL iom_put( "mid_temp" , zwtmb(:,:,2) ) ! tmb Temperature -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DIA/diawri.F90
r10001 r10009 136 136 137 137 IF( ll_wd ) THEN 138 CALL iom_put( "ssh" , ( sshn+ssh_ref)*tmask(:,:,1) ) ! sea surface height (brought back to the reference used for wetting and drying)138 CALL iom_put( "ssh" , ( ssh(:,:,Nnn)+ssh_ref)*ssmask(:,:) ) ! sea surface height (brought back to the reference used for wetting and drying) 139 139 ELSE 140 CALL iom_put( "ssh" , sshn) ! sea surface height140 CALL iom_put( "ssh" , ssh(:,:,Nnn) ) ! sea surface height 141 141 ENDIF 142 142 143 143 IF( iom_use("wetdep") ) & ! wet depth 144 CALL iom_put( "wetdep" , ht_0(:,:) + ssh n(:,:) )144 CALL iom_put( "wetdep" , ht_0(:,:) + ssh(:,:,Nnn) ) 145 145 146 146 CALL iom_put( "toce", tsn(:,:,:,jp_tem) ) ! 3D temperature … … 771 771 CALL histwrite( nid_T, "vovvldef", it, zw3d , ndim_T , ndex_T ) ! level thickness deformation 772 772 ENDIF 773 CALL histwrite( nid_T, "sossheig", it, ssh n, ndim_hT, ndex_hT ) ! sea surface height773 CALL histwrite( nid_T, "sossheig", it, ssh(:,:,Nnn) , ndim_hT, ndex_hT ) ! sea surface height 774 774 CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf ) , ndim_hT, ndex_hT ) ! upward water flux 775 775 CALL histwrite( nid_T, "sorunoff", it, rnf , ndim_hT, ndex_hT ) ! river runoffs … … 993 993 CALL histwrite( id_i, "votemper", kt, tsn(:,:,:,jp_tem), jpi*jpj*jpk, idex ) ! now temperature 994 994 CALL histwrite( id_i, "vosaline", kt, tsn(:,:,:,jp_sal), jpi*jpj*jpk, idex ) ! now salinity 995 CALL histwrite( id_i, "sossheig", kt, ssh n, jpi*jpj , idex ) ! sea surface height995 CALL histwrite( id_i, "sossheig", kt, ssh(:,:,Nnn) , jpi*jpj , idex ) ! sea surface height 996 996 CALL histwrite( id_i, "vozocrtx", kt, un , jpi*jpj*jpk, idex ) ! now i-velocity 997 997 CALL histwrite( id_i, "vomecrty", kt, vn , jpi*jpj*jpk, idex ) ! now j-velocity -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/domain.F90
r10001 r10009 15 15 !! 3.7 ! 2015-11 (G. Madec, A. Coward) time varying zgr by default 16 16 !! 4.0 ! 2016-10 (G. Madec, S. Flavoni) domain configuration / user defined interface 17 !! 5.0 ! 2018-07 (G. Madec) RK3: add a time-level dimension to time-varying variables 17 18 !!---------------------------------------------------------------------- 18 19 … … 48 49 PRIVATE 49 50 51 PUBLIC dom_nam ! called by nemogcm.F90 50 52 PUBLIC dom_init ! called by nemogcm.F90 51 53 PUBLIC domain_cfg ! called by nemogcm.F90 … … 118 120 ! 119 121 CALL dom_glo ! global domain versus local domain 120 CALL dom_nam ! read namelist ( namrun, namdom ) 121 ! 122 IF( lwxios ) THEN 123 !define names for restart write and set core output (restart.F90) 122 ! 123 IF( lwxios ) THEN ! define names for restart write and set core output (restart.F90) 124 124 CALL iom_set_rst_vars(rst_wfields) 125 125 CALL iom_set_rstw_core(cdstr) 126 126 ENDIF 127 !reset namelist for SAS 128 IF(cdstr == 'SAS') THEN 127 IF( cdstr == 'SAS' ) THEN ! reset namelist for SAS 129 128 IF(lrxios) THEN 130 129 IF(lwp) write(numout,*) 'Disable reading restart file using XIOS for SAS' … … 184 183 r1_hu_b = r1_hu_0 ; r1_hu_n = r1_hu_0 ; r1_hu_a = r1_hu_0 ! 1 / water column 185 184 r1_hv_b = r1_hv_0 ; r1_hv_n = r1_hv_0 ; r1_hv_a = r1_hv_0 ! thickness 186 !187 185 ! 188 186 ELSE != time varying : initialize before/now/after variables … … 307 305 ENDIF 308 306 ! 309 REWIND( numnam_ref ) ! Namelist namdom in reference namelist : space & time domain (bathymetry, mesh, timestep)307 REWIND( numnam_ref ) ! Namelist namdom in reference namelist : space & time domain (bathymetry, mesh, timestep) 310 308 READ ( numnam_ref, namdom, IOSTAT = ios, ERR = 903) 311 309 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namdom in reference namelist', lwp ) 312 REWIND( numnam_cfg ) ! Namelist namdom in configuration namelist : space & time domain (bathymetry, mesh, timestep)310 REWIND( numnam_cfg ) ! Namelist namdom in configuration namelist : space & time domain (bathymetry, mesh, timestep) 313 311 READ ( numnam_cfg, namdom, IOSTAT = ios, ERR = 904 ) 314 312 904 IF( ios > 0 ) CALL ctl_nam ( ios , 'namdom in configuration namelist', lwp ) … … 316 314 ! 317 315 IF(lwp) THEN 318 WRITE(numout,*)319 316 WRITE(numout,*) ' Namelist : namdom --- space & time domain' 320 317 WRITE(numout,*) ' 3rd order Runge-Kutta scheme ln_RK3 = ', ln_RK3 … … 337 334 ENDIF 338 335 ! 339 REWIND( numnam_ref ) ! Namelist namrun in reference namelist : Parameters of the run 336 ! ! Set the number of time-level 337 ! 338 IF ( ln_RK3 ) THEN ! two-level time-stepping scheme 339 Nt = 2 ! number of time-level 340 Nbb = 1 ! before=now ! time indexes 341 Nnn = 1 ! now (n ) 342 Naa = 2 ! after (n+1) 343 ! 344 ELSEIF( ln_MLF ) THEN ! three-level time-stepping scheme 345 Nt = 3 ! number of time-level 346 Nbb = 1 ! before (n-1) 347 Nnn = 2 ! now (n ) 348 Naa = 3 ! after (n+1) 349 ENDIF 350 ! 351 REWIND( numnam_ref ) ! Namelist namrun in reference namelist : Parameters of the run 340 352 READ ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 341 353 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namrun in reference namelist', lwp ) 342 REWIND( numnam_cfg ) ! Namelist namrun in configuration namelist : Parameters of the run354 REWIND( numnam_cfg ) ! Namelist namrun in configuration namelist : Parameters of the run 343 355 READ ( numnam_cfg, namrun, IOSTAT = ios, ERR = 902 ) 344 356 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namrun in configuration namelist', lwp ) 345 357 IF(lwm) WRITE ( numond, namrun ) 346 358 ! 347 IF(lwp) THEN ! control print359 IF(lwp) THEN ! control print 348 360 WRITE(numout,*) 349 361 WRITE(numout,*) ' Namelist : namrun --- run parameters' … … 383 395 ENDIF 384 396 385 cexper = cn_exp ! conversion DOCTOR names into model names (this should disappear soon)397 cexper = cn_exp ! conversion from namelist names to model names (this should disappear) 386 398 nrstdt = nn_rstctl 387 399 nit000 = nn_it000 -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/domvvl.F90
r10001 r10009 135 135 IF( dom_vvl_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'dom_vvl_init : unable to allocate arrays' ) 136 136 ! 137 ! ! Read or initialize e3t_(b/n), ssh(b/n)137 ! ! Read or initialize ssh(Nbb) & ssh(Nnn) 138 138 CALL dom_vvl_rst( nit000, 'READ' ) 139 139 ! … … 142 142 ! !* BEFORE fields : 143 143 CALL ssh2e3_before ! set: hu , hv , r1_hu, r1_hv 144 ! ! e3t, e3w, e3u, e3uw, e3v, e3vw145 ! 146 ! ! set one for all last level to the e3._0 value144 ! ! e3t, e3w, e3u, e3uw, e3v, e3vw (from 1 to jpkm1) 145 ! 146 ! ! set jpk level one to the e3._0 values 147 147 e3t_b(:,:,jpk) = e3t_0(:,:,jpk) ; e3u_b(:,:,jpk) = e3w_0(:,:,jpk) ; e3v_b(:,:,jpk) = e3v_0(:,:,jpk) 148 148 e3w_b(:,:,jpk) = e3w_0(:,:,jpk) ; e3uw_b(:,:,jpk) = e3uw_0(:,:,jpk) ; e3vw_b(:,:,jpk) = e3vw_0(:,:,jpk) … … 150 150 ! !* NOW fields : 151 151 CALL ssh2e3_now ! set: ht , hu , hv , r1_hu, r1_hv 152 ! ! e3t, e3w, e3u, e3uw, e3v, e3vw, e3f 152 ! ! e3t, e3w, e3u, e3uw, e3v, e3vw, e3f (from 1 to jpkm1) 153 153 ! ! gdept_n, gdepw_n, gde3w_n 154 !!gm issue? gdept_n, gdepw_n, gde3w_n never defined at jpk 154 155 ! 155 156 ! ! set one for all last level to the e3._0 value … … 230 231 ! !== after ssh ==! (u- and v-points) 231 232 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 232 zsshu_h(ji,jj) = 0.5_wp * ( ssh a(ji,jj) + ssha(ji+1,jj) ) * ssumask(ji,jj)233 zsshv_h(ji,jj) = 0.5_wp * ( ssh a(ji,jj) + ssha(ji,jj+1) ) * ssvmask(ji,jj)233 zsshu_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Naa) + ssh(ji+1,jj,Naa) ) * ssumask(ji,jj) 234 zsshv_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Naa) + ssh(ji,jj+1,Naa) ) * ssvmask(ji,jj) 234 235 END DO ; END DO 235 236 CALL lbc_lnk_multi( zsshu_h(:,:), 'U', 1._wp , zsshv_h(:,:), 'V', 1._wp ) … … 242 243 ! 243 244 ! !== after scale factors ==! (e3t , e3u , e3v) 244 zssht_h(:,:) = ssh a (:,:) * r1_ht_0(:,:)! t-point245 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:)! u-point246 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:)! v-point245 zssht_h(:,:) = ssh (:,:,Naa) * r1_ht_0(:,:) ! t-point 246 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:) ! u-point 247 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:) ! v-point 247 248 DO jk = 1, jpkm1 248 249 e3t_a(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) … … 318 319 e3v_n (:,:,jk) = e3v_a (:,:,jk) 319 320 END DO 320 ht_n(:,:) = ht_0(:,:) + ssh n(:,:) ! ocean thickness321 ht_n(:,:) = ht_0(:,:) + ssh(:,:,Nnn) ! ocean thickness 321 322 ! 322 323 hu_n(:,:) = hu_a(:,:) ; r1_hu_n(:,:) = r1_hu_a(:,:) … … 326 327 ! !* ssh at u- and v-points) 327 328 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 328 zsshu_h(ji,jj) = 0.5_wp * ( ssh b(ji ,jj) + sshb(ji+1,jj) ) * ssumask(ji,jj)329 zsshv_h(ji,jj) = 0.5_wp * ( ssh b(ji ,jj) + sshb(ji ,jj+1) ) * ssvmask(ji,jj)329 zsshu_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj ,Nbb) ) * ssumask(ji,jj) 330 zsshv_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji ,jj+1,Nbb) ) * ssvmask(ji,jj) 330 331 END DO ; END DO 331 332 CALL lbc_lnk_multi( zsshu_h(:,:),'U', 1._wp , zsshv_h(:,:),'V', 1._wp ) 332 333 ! 333 334 ! !* e3w_b , e3uw_b , e3vw_b 334 zssht_h(:,:) = ssh b (:,:) * r1_ht_0(:,:)! w-point335 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:)! uw-point336 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:)! vw-point335 zssht_h(:,:) = ssh (:,:,Nbb) * r1_ht_0(:,:) ! w-point 336 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:) ! uw-point 337 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:) ! vw-point 337 338 DO jk = 1, jpkm1 338 e3w_b(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) )339 e3w_b(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) ) 339 340 e3uw_b(:,:,jk) = e3uw_0(:,:,jk) * ( 1._wp + zsshu_h(:,:) * umask(:,:,jk) ) 340 341 e3vw_b(:,:,jk) = e3vw_0(:,:,jk) * ( 1._wp + zsshv_h(:,:) * vmask(:,:,jk) ) … … 344 345 ! !* ssh at u- and v-points) 345 346 DO jj = 1, jpjm1 ; DO ji = 1, jpim1 ! start from 1 for f-point 346 zsshu_h(ji,jj) = 0.50_wp * ( ssh n(ji ,jj) + sshn(ji+1,jj) ) * ssumask(ji,jj)347 zsshv_h(ji,jj) = 0.50_wp * ( ssh n(ji ,jj) + sshn(ji ,jj+1) ) * ssvmask(ji,jj)348 zsshf_h(ji,jj) = 0.25_wp * ( ssh n(ji ,jj) + sshn(ji ,jj+1) &349 & + ssh n(ji+1,jj) + sshn(ji+1,jj+1) ) * ssfmask(ji,jj)347 zsshu_h(ji,jj) = 0.50_wp * ( ssh(ji ,jj,Nnn) + ssh(ji+1,jj ,Nnn) ) * ssumask(ji,jj) 348 zsshv_h(ji,jj) = 0.50_wp * ( ssh(ji ,jj,Nnn) + ssh(ji ,jj+1,Nnn) ) * ssvmask(ji,jj) 349 zsshf_h(ji,jj) = 0.25_wp * ( ssh(ji ,jj,Nnn) + ssh(ji ,jj+1,Nnn) & 350 & + ssh(ji+1,jj,Nnn) + ssh(ji+1,jj+1,Nnn) ) * ssfmask(ji,jj) 350 351 END DO ; END DO 351 352 CALL lbc_lnk_multi( zsshu_h(:,:),'U', 1._wp , zsshv_h(:,:),'V', 1._wp , zsshf_h(:,:),'F', 1._wp ) 352 353 ! 353 354 ! !* e3w_n , e3uw_n , e3vw_n, e3f_n 354 zssht_h(:,:) = ssh n (:,:) * r1_ht_0(:,:)! t- & w-point355 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:)! uw-point356 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:)! vw-point357 zsshf_h(:,:) = zsshf_h(:,:) * r1_hf_0(:,:)! f-point355 zssht_h(:,:) = ssh (:,:,Nnn) * r1_ht_0(:,:) ! t- & w-point 356 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:) ! uw-point 357 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:) ! vw-point 358 zsshf_h(:,:) = zsshf_h(:,:) * r1_hf_0(:,:) ! f-point 358 359 DO jk = 1, jpkm1 359 e3w_n(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) )360 e3w_n(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) ) 360 361 e3uw_n(:,:,jk) = e3uw_0(:,:,jk) * ( 1._wp + zsshu_h(:,:) * wumask(:,:,jk) ) 361 362 e3vw_n(:,:,jk) = e3vw_0(:,:,jk) * ( 1._wp + zsshv_h(:,:) * wvmask(:,:,jk) ) … … 363 364 END DO 364 365 ! 365 zssht_h(:,:) = 1._wp + sshn (:,:) * r1_ht_0(:,:)! t-point366 zssht_h(:,:) = 1._wp + zssht_h(:,:) ! t-point 366 367 ! 367 368 IF( ln_isfcav ) THEN ! ISF cavities : ssh scaling not applied over the iceshelf thickness … … 369 370 gdept_n(:,:,jk) = ( gdept_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 370 371 gdepw_n(:,:,jk) = ( gdepw_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 371 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh n (:,:)372 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh (:,:,Nnn) 372 373 END DO 373 374 ELSE ! no ISF cavities … … 375 376 gdept_n(:,:,jk) = gdept_0(:,:,jk) * zssht_h(:,:) 376 377 gdepw_n(:,:,jk) = gdepw_0(:,:,jk) * zssht_h(:,:) 377 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh n(:,:)378 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh (:,:,Nnn) 378 379 END DO 379 380 ENDIF … … 420 421 !!gm Question: use jpdom_data above to read data over jpi x jpj (like is dom_hgr_read and dom_zgr_read) 421 422 !! so that it will work with land processor suppression 422 ! CALL iom_get( numror, jpdom_autoglo, 'sshn' , ssh n, ldxios = lrxios )423 ! CALL iom_get( numror, jpdom_autoglo, 'sshb' , ssh b, ldxios = lrxios )423 ! CALL iom_get( numror, jpdom_autoglo, 'sshn' , ssh(:,:,Nnn), ldxios = lrxios ) 424 ! CALL iom_get( numror, jpdom_autoglo, 'sshb' , ssh(:,:,Nbb), ldxios = lrxios ) 424 425 !!gm 425 CALL iom_get( numror, jpdom_data, 'sshn' , ssh n, ldxios = lrxios )426 CALL iom_get( numror, jpdom_data, 'sshb' , ssh b, ldxios = lrxios )426 CALL iom_get( numror, jpdom_data, 'sshn' , ssh(:,:,Nnn), ldxios = lrxios ) 427 CALL iom_get( numror, jpdom_data, 'sshb' , ssh(:,:,Nbb), ldxios = lrxios ) 427 428 !!gm end 428 IF( l_1st_euler ) THEN 429 sshb(:,:) = sshn(:,:) 430 ENDIF 429 IF( l_1st_euler ) ssh(:,:,Nbb) = ssh(:,:,Nnn) 431 430 ELSE IF( id1 > 0 ) THEN 432 431 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : sshn not found in restart files' 433 IF(lwp) write(numout,*) ' set ssh n = sshband force l_1st_euler = true'432 IF(lwp) write(numout,*) ' set ssh(Nnn) = ssh(Nbb) and force l_1st_euler = true' 434 433 !!gm CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:), ldxios = lrxios ) 435 CALL iom_get( numror, jpdom_data, 'sshb', ssh b, ldxios = lrxios )436 ssh n(:,:) = sshb(:,:)434 CALL iom_get( numror, jpdom_data, 'sshb', ssh(:,:,Nbb), ldxios = lrxios ) 435 ssh(:,:,Nnn) = ssh(:,:,Nbb) 437 436 l_1st_euler = .TRUE. 438 437 ELSE IF( id2 > 0 ) THEN 439 438 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : sshb not found in restart files' 440 IF(lwp) write(numout,*) 'set ssh b = sshnand force l_1st_euler = true'441 CALL iom_get( numror, jpdom_data, 'sshn', ssh b, ldxios = lrxios )442 ssh b(:,:) = sshn(:,:)439 IF(lwp) write(numout,*) 'set ssh(Nbb) = ssh(Nnn) and force l_1st_euler = true' 440 CALL iom_get( numror, jpdom_data, 'sshn', ssh(:,:,Nnn), ldxios = lrxios ) 441 ssh(:,:,Nbb) = ssh(:,:,Nnn) 443 442 l_1st_euler = .TRUE. 444 443 ELSE 445 444 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : sshb and sshn not found in restart file' 446 IF(lwp) write(numout,*) 'set ssh b = sshn= 0 and force l_1st_euler = true'447 ssh b(:,:) = 0._wp448 ssh n(:,:) = 0._wp445 IF(lwp) write(numout,*) 'set ssh(Nbb) = ssh(Nnn) = 0 and force l_1st_euler = true' 446 ssh(:,:,Nbb) = 0._wp 447 ssh(:,:,Nnn) = 0._wp 449 448 l_1st_euler = .TRUE. 450 449 ENDIF … … 454 453 ! 455 454 IF( cn_cfg == 'wad' ) THEN ! Wetting and drying test case 456 CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, ssh b)457 tsn (:,:,:,:) = tsb(:,:,:,:) ! set now values from to before ones458 ssh n (:,:) = sshb(:,:)459 un (:,:,:) = ub(:,:,:)460 vn (:,:,:) = vb(:,:,:)455 CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, ssh(:,:,Nbb) ) 456 tsn(:,:,:,:) = tsb(:,:,:,:) ! set now values from to before ones 457 ssh(:,:,Nnn) = ssh(:,:,Nbb) 458 un (:,:,:) = ub (:,:,:) 459 vn (:,:,:) = vb (:,:,:) 461 460 ELSE ! Not the test case 462 ssh n(:,:) = -ssh_ref463 ssh b(:,:) = -ssh_ref461 ssh(:,:,Nnn) = -ssh_ref 462 ssh(:,:,Nbb) = -ssh_ref 464 463 ! 465 464 DO jj = 1, jpj 466 465 DO ji = 1, jpi 467 466 IF( ht_0(ji,jj)-ssh_ref < rn_wdmin1 ) THEN ! if total depth is less than min depth 468 ssh b(ji,jj) = rn_wdmin1 - (ht_0(ji,jj) )469 ssh n(ji,jj) = rn_wdmin1 - (ht_0(ji,jj) )470 ssh a(ji,jj) = rn_wdmin1 - (ht_0(ji,jj) )467 ssh(ji,jj,Nbb) = rn_wdmin1 - (ht_0(ji,jj) ) 468 ssh(ji,jj,Nnn) = rn_wdmin1 - (ht_0(ji,jj) ) 469 ssh(ji,jj,Naa) = rn_wdmin1 - (ht_0(ji,jj) ) 471 470 ENDIF 472 471 END DO … … 485 484 ! 486 485 ! Just to read set ssh in fact, called latter once vertical grid is set up: 487 ! CALL usr_def_istate( gdept_0, tmask, tsb, ub, vb, ssh b)488 ssh n(:,:) = 0._wp489 ssh b(:,:) = 0._wp486 ! CALL usr_def_istate( gdept_0, tmask, tsb, ub, vb, ssh(:,:,Nbb) ) 487 ssh(:,:,Nnn) = 0._wp 488 ssh(:,:,Nbb) = 0._wp 490 489 ! 491 490 END IF … … 496 495 ! ! =================== 497 496 498 !!gm DO NOTHING, ssh b and sshnare written in restart.F90497 !!gm DO NOTHING, ssh(Nbb) and ssh(Nnn) are written in restart.F90 499 498 500 499 ENDIF … … 594 593 DO jj = 1, jpjm1 ! start from 1 due to f-point 595 594 DO ji = 1, jpim1 596 zsshu_h(ji,jj) = 0.50_wp * ( ssh n(ji ,jj) + sshn(ji+1,jj) ) * ssumask(ji,jj)597 zsshv_h(ji,jj) = 0.50_wp * ( ssh n(ji ,jj) + sshn(ji ,jj+1) ) * ssvmask(ji,jj)598 zsshf_h(ji,jj) = 0.25_wp * ( ssh n(ji ,jj) + sshn(ji ,jj+1) &599 & + ssh n(ji+1,jj) + sshn(ji+1,jj+1) ) * ssfmask(ji,jj)595 zsshu_h(ji,jj) = 0.50_wp * ( ssh(ji ,jj,Nnn) + ssh(ji+1,jj ,Nnn) ) * ssumask(ji,jj) 596 zsshv_h(ji,jj) = 0.50_wp * ( ssh(ji ,jj,Nnn) + ssh(ji ,jj+1,Nnn) ) * ssvmask(ji,jj) 597 zsshf_h(ji,jj) = 0.25_wp * ( ssh(ji ,jj,Nnn) + ssh(ji ,jj+1,Nnn) & 598 & + ssh(ji+1,jj,Nnn) + ssh(ji+1,jj+1,Nnn) ) * ssfmask(ji,jj) 600 599 END DO 601 600 END DO … … 604 603 ! !== ht, hu and hv == ! (and their inverse) 605 604 ! 606 ht_n (:,:) = ht_0(:,:) + ssh n (:,:)605 ht_n (:,:) = ht_0(:,:) + ssh (:,:,Nnn) 607 606 hu_n (:,:) = hu_0(:,:) + zsshu_h(:,:) 608 607 hv_n (:,:) = hv_0(:,:) + zsshv_h(:,:) … … 612 611 ! !== ssh / h factor at t-, u- ,v- & f-points ==! 613 612 ! 614 zssht_h(:,:) = ssh n (:,:) * r1_ht_0(:,:)615 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:)616 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:)617 zsshf_h(:,:) = zsshf_h(:,:) * r1_hf_0(:,:)613 zssht_h(:,:) = ssh (:,:,Nnn) * r1_ht_0(:,:) 614 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:) 615 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:) 616 zsshf_h(:,:) = zsshf_h(:,:) * r1_hf_0(:,:) 618 617 ! 619 618 ! !== e3t, e3w , e3u, e3uw , e3v, e3vw , and e3f ==! 620 619 ! 621 620 DO jk = 1, jpkm1 622 e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk))623 e3w_n(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) )621 e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 622 e3w_n(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) ) 624 623 ! 625 624 e3u_n(:,:,jk) = e3u_0(:,:,jk) * ( 1._wp + zsshu_h(:,:) * umask(:,:,jk) ) … … 634 633 ! !== depth of t- and w-points ==! 635 634 ! 636 zssht_h(:,:) = 1._wp + zssht_h(:,:) ! = 1 + ssh n/ ht_0635 zssht_h(:,:) = 1._wp + zssht_h(:,:) ! = 1 + ssh(Nnn) / ht_0 637 636 ! 638 637 IF( ln_isfcav ) THEN ! ISF cavities : ssh scaling not applied over the iceshelf thickness … … 640 639 gdept_n(:,:,jk) = ( gdept_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 641 640 gdepw_n(:,:,jk) = ( gdepw_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 642 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh n(:,:)641 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh(:,:,Nnn) 643 642 END DO 644 643 ELSE ! no ISF cavities 644 !!gm BUG ??? gdept should be updated down to the ocean floor ! ===>> jpk NOT jpkm1 !!! 645 645 DO jk = 1, jpkm1 646 646 gdept_n(:,:,jk) = gdept_0(:,:,jk) * zssht_h(:,:) 647 647 gdepw_n(:,:,jk) = gdepw_0(:,:,jk) * zssht_h(:,:) 648 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh n(:,:)648 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh(:,:,Nnn) 649 649 END DO 650 650 ENDIF … … 664 664 DO jj = 2, jpjm1 665 665 DO ji = 2, jpim1 666 zsshu_h(ji,jj) = 0.5_wp * ( ssh b(ji ,jj) + sshb(ji+1,jj) ) * ssumask(ji,jj)667 zsshv_h(ji,jj) = 0.5_wp * ( ssh b(ji ,jj) + sshb(ji ,jj+1) ) * ssvmask(ji,jj)666 zsshu_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj ,Nbb) ) * ssumask(ji,jj) 667 zsshv_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji ,jj+1,Nbb) ) * ssvmask(ji,jj) 668 668 END DO 669 669 END DO … … 678 678 ! 679 679 ! !== ssh / h factor at t-, u- ,v- & f-points ==! 680 zssht_h(:,:) = ssh b (:,:) * r1_ht_0(:,:)681 zsshu_h (:,:) = zsshu_h(:,:)* r1_hu_0(:,:)682 zsshv_h (:,:) = zsshv_h(:,:)* r1_hv_0(:,:)680 zssht_h(:,:) = ssh (:,:,Nbb) * r1_ht_0(:,:) 681 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:) 682 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:) 683 683 ! 684 684 ! !== e3t, e3w , e3u, e3uw , and e3v, e3vw ==! 685 685 DO jk = 1, jpkm1 686 e3t_b(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk))687 e3w_b(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) )686 e3t_b(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 687 e3w_b(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) ) 688 688 ! 689 689 e3u_b(:,:,jk) = e3u_0(:,:,jk) * ( 1._wp + zsshu_h (:,:) * umask(:,:,jk) ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/iscplhsb.F90
r9598 r10009 87 87 ! diagnose the heat, salt and volume input and compute the correction variable 88 88 !============================================================================== 89 90 89 ! 91 zdssh(:,:) = ssh n(:,:) * ssmask(:,:) - sshb(:,:) * psmask_b(:,:)92 IF (.NOT. ln_linssh ) zdssh = 0.0_wp! already included in the levels by definition93 90 zdssh(:,:) = ssh(:,:,Nnn) * ssmask(:,:) - ssh(:,:,Nbb) * psmask_b(:,:) 91 IF (.NOT. ln_linssh ) zdssh = 0._wp ! already included in the levels by definition 92 ! 94 93 DO jk = 1,jpk-1 95 94 DO jj = 2,jpj-1 96 95 DO ji = fs_2,fs_jpim1 97 IF ( tmask_h(ji,jj) == 1._wp) THEN98 99 ! volume differences96 IF ( tmask_h(ji,jj) == 1._wp ) THEN 97 ! 98 ! ! volume differences 100 99 zde3t = e3t_n(ji,jj,jk) * tmask(ji,jj,jk) - pe3t_b(ji,jj,jk) * ptmask_b(ji,jj,jk) 101 100 102 ! heat diff 103 zdtem = tsn(ji,jj,jk,jp_tem) * e3t_n(ji,jj,jk) * tmask (ji,jj,jk) & 104 - tsb(ji,jj,jk,jp_tem) * pe3t_b (ji,jj,jk) * ptmask_b(ji,jj,jk) 105 ! salt diff 106 zdsal = tsn(ji,jj,jk,jp_sal) * e3t_n(ji,jj,jk) * tmask (ji,jj,jk) & 107 - tsb(ji,jj,jk,jp_sal) * pe3t_b (ji,jj,jk) * ptmask_b(ji,jj,jk) 108 109 ! shh changes 101 ! ! heat diff 102 zdtem = tsn(ji,jj,jk,jp_tem) * e3t_n(ji,jj,jk) * tmask (ji,jj,jk) & 103 - tsb(ji,jj,jk,jp_tem) * pe3t_b(ji,jj,jk) * ptmask_b(ji,jj,jk) 104 ! ! salt diff 105 zdsal = tsn(ji,jj,jk,jp_sal) * e3t_n(ji,jj,jk) * tmask (ji,jj,jk) & 106 - tsb(ji,jj,jk,jp_sal) * pe3t_b(ji,jj,jk) * ptmask_b(ji,jj,jk) 107 ! ! shh changes 110 108 IF ( ptmask_b(ji,jj,jk) == 1._wp .OR. tmask(ji,jj,jk) == 1._wp ) THEN 111 zde3t = zde3t + zdssh(ji,jj) ! zdssh = 0 if vvl109 zde3t = zde3t + zdssh(ji,jj) ! zdssh = 0 if vvl 112 110 zdssh(ji,jj) = 0._wp 113 111 END IF -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/iscplrst.F90
r10001 r10009 44 44 !! 45 45 !! ** Purpose : compute initialisation 46 !! compute extrapolation of restart variable un, vn, tsn, ssh n(wetting/drying)46 !! compute extrapolation of restart variable un, vn, tsn, ssh(Nnn) (wetting/drying) 47 47 !! compute correction term if needed 48 48 !! … … 91 91 ! 92 92 ! ! set _b and _n variables equal 93 tsb (:,:,:,:) = tsn(:,:,:,:)94 ub (:,:,:) = un(:,:,:)95 vb (:,:,:) = vn(:,:,:)96 ssh b(:,:) = sshn(:,:)93 tsb(:,:,:,:) = tsn(:,:,:,:) 94 ub (:,:,:) = un (:,:,:) 95 vb (:,:,:) = vn (:,:,:) 96 ssh(:,:,Nbb) = ssh(:,:,Nnn) 97 97 ! 98 98 ! ! set _b and _n vertical scale factor equal … … 117 117 !! *** ROUTINE iscpl_rst_interpol *** 118 118 !! 119 !! ** Purpose : compute new tn, sn, un, vn and ssh nin case of evolving geometry of ice shelves119 !! ** Purpose : compute new tn, sn, un, vn and ssh(Nnn) in case of evolving geometry of ice shelves 120 120 !! compute 2d fields of heat, salt and volume correction 121 121 !! … … 155 155 ! 156 156 ! ! compute new ssh if we open a full water column (average of the closest neigbourgs) 157 ssh b (:,:)=sshn(:,:)158 zssh0(:,:) =sshn(:,:)159 zsmask0(:,:) = psmask_b(:,:)160 zsmask1(:,:) = psmask_b(:,:)157 ssh (:,:,Nbb) = ssh(:,:,Nnn) 158 zssh0(:,:) = ssh(:,:,Nnn) 159 zsmask0(:,:) = psmask_b(:,:) 160 zsmask1(:,:) = psmask_b(:,:) 161 161 DO iz = 1, 10 ! need to be tuned (configuration dependent) (OK for ISOMIP+) 162 162 zdsmask(:,:) = ssmask(:,:)-zsmask0(:,:) … … 165 165 summsk = zsmask0(ji+1,jj)+zsmask0(ji-1,jj)+zsmask0(ji,jj+1)+zsmask0(ji,jj-1) 166 166 IF (zdsmask(ji,jj) == 1._wp .AND. summsk /= 0._wp) THEN 167 ssh n(ji,jj)=( zssh0(ji+1,jj)*zsmask0(ji+1,jj) &168 & + zssh0(ji-1,jj)*zsmask0(ji-1,jj) &169 & + zssh0(ji,jj+1)*zsmask0(ji,jj+1) &170 & + zssh0(ji,jj-1)*zsmask0(ji,jj+1)) / summsk167 ssh(ji,jj,Nnn)=( zssh0(ji+1,jj)*zsmask0(ji+1,jj) & 168 & + zssh0(ji-1,jj)*zsmask0(ji-1,jj) & 169 & + zssh0(ji,jj+1)*zsmask0(ji,jj+1) & 170 & + zssh0(ji,jj-1)*zsmask0(ji,jj+1)) / summsk 171 171 zsmask1(ji,jj) = 1._wp 172 172 ENDIF 173 173 END DO 174 174 END DO 175 CALL lbc_lnk_multi( ssh n, 'T', 1., zsmask1, 'T', 1. )176 zssh0 = sshn175 CALL lbc_lnk_multi( ssh(:,:,Nnn), 'T', 1., zsmask1, 'T', 1. ) 176 zssh0(:,:) = ssh(:,:,Nnn) 177 177 zsmask0 = zsmask1 178 178 END DO 179 ssh n(:,:) = sshn(:,:) * ssmask(:,:)179 ssh(:,:,Nnn) = ssh(:,:,Nnn) * ssmask(:,:) 180 180 181 181 !============================================================================= … … 201 201 IF ( tmask(ji,jj,1) == 0._wp .OR. ptmask_b(ji,jj,1) == 0._wp ) THEN 202 202 DO jk = 1, jpk 203 e3t_n(ji,jj,jk) = e3t_0(ji,jj,jk) * ( 1._wp + ssh n(ji,jj) * r1_ht_0(ji,jj) * tmask(ji,jj,jk) )203 e3t_n(ji,jj,jk) = e3t_0(ji,jj,jk) * ( 1._wp + ssh(ji,jj,Nnn) * r1_ht_0(ji,jj) * tmask(ji,jj,jk) ) 204 204 END DO 205 205 ENDIF … … 214 214 ! !* ssh at u- and v-points) 215 215 DO jj = 1, jpjm1 ; DO ji = 1, jpim1 ! start from 1 due to f-point 216 zsshu(ji,jj) = 0.5_wp * ( ssh n(ji ,jj) + sshn(ji+1,jj) ) * ssumask(ji,jj)217 zsshv(ji,jj) = 0.5_wp * ( ssh n(ji ,jj) + sshn(ji ,jj+1) ) * ssvmask(ji,jj)218 zsshf(ji,jj) = 0.25_wp * ( ssh n(ji ,jj) + sshn(ji ,jj+1) &219 & + ssh n(ji+1,jj) + sshn(ji+1,jj+1) ) * ssfmask(ji,jj)216 zsshu(ji,jj) = 0.5_wp * ( ssh(ji ,jj,Nnn) + ssh(ji+1,jj ,Nnn) ) * ssumask(ji,jj) 217 zsshv(ji,jj) = 0.5_wp * ( ssh(ji ,jj,Nnn) + ssh(ji ,jj+1,Nnn) ) * ssvmask(ji,jj) 218 zsshf(ji,jj) = 0.25_wp * ( ssh(ji ,jj,Nnn) + ssh(ji ,jj+1,Nnn) & 219 & + ssh(ji+1,jj,Nnn) + ssh(ji+1,jj+1,Nnn) ) * ssfmask(ji,jj) 220 220 END DO ; END DO 221 221 CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp , zsshf(:,:),'F', 1._wp ) 222 222 ! 223 223 ! !* hu and hv (and their inverse) 224 ht_n (:,:) = ht_0(:,:) + ssh n(:,:)224 ht_n (:,:) = ht_0(:,:) + ssh (:,:,Nnn) 225 225 hu_n (:,:) = hu_0(:,:) + zsshu(:,:) 226 226 hv_n (:,:) = hv_0(:,:) + zsshv(:,:) … … 229 229 ! 230 230 ! !* e3u, e3uw and e3v, e3vw 231 z_ssh_h0(:,:) = ssh n (:,:) * r1_ht_0(:,:)! t-point231 z_ssh_h0(:,:) = ssh(:,:,Nnn) * r1_ht_0(:,:) ! t-point 232 232 DO jk = 1, jpkm1 233 233 e3w_n(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + z_ssh_h0(:,:) * tmask(:,:,jk) ) … … 248 248 END DO 249 249 250 z_ssh_h0(:,:) = 1._wp + ssh n(:,:) * r1_ht_0(:,:) ! t-point250 z_ssh_h0(:,:) = 1._wp + ssh(:,:,Nnn) * r1_ht_0(:,:) ! t-point 251 251 ! 252 252 IF( ln_isfcav ) THEN ! iceshelf cavities : ssh scaling not applied over the iceshelf thickness … … 254 254 gdept_n(:,:,jk) = ( gdept_0(:,:,jk) - risfdep(:,:) ) * z_ssh_h0(:,:) + risfdep(:,:) 255 255 gdepw_n(:,:,jk) = ( gdepw_0(:,:,jk) - risfdep(:,:) ) * z_ssh_h0(:,:) + risfdep(:,:) 256 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh n(:,:)256 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh(:,:,Nnn) 257 257 END DO 258 258 ELSE … … 260 260 gdept_n(:,:,jk) = gdept_0(:,:,jk) * z_ssh_h0(:,:) 261 261 gdepw_n(:,:,jk) = gdepw_0(:,:,jk) * z_ssh_h0(:,:) 262 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh n(:,:)262 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh(:,:,Nnn) 263 263 END DO 264 264 ENDIF -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/istate.F90
r9939 r10009 99 99 CALL dta_tsd( nit000, tsb ) ! read 3D T and S data at nit000 100 100 ! 101 ssh b(:,:) = 0._wp! set the ocean at rest102 ub (:,:,:)= 0._wp103 vb (:,:,:)= 0._wp101 ssh(:,:,Nbb) = 0._wp ! set the ocean at rest 102 ub (:,:,:) = 0._wp 103 vb (:,:,:) = 0._wp 104 104 ! 105 105 ELSE ! user defined initial T and S 106 CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, ssh b)106 CALL usr_def_istate( gdept_b, tmask, tsb, ub, vb, ssh(:,:,Nbb) ) 107 107 ENDIF 108 tsn (:,:,:,:) = tsb 109 ssh n (:,:) = sshb(:,:)110 un (:,:,:) = ub 111 vn (:,:,:) = vb 108 tsn (:,:,:,:) = tsb(:,:,:,:) ! set now values from to before ones 109 ssh (:,:,Nnn) = ssh(:,:,Nbb) 110 un (:,:,:) = ub (:,:,:) 111 vn (:,:,:) = vb (:,:,:) 112 112 hdivn(:,:,jpk) = 0._wp ! bottom divergence set one for 0 to zero at jpk level 113 113 CALL div_hor( 0 ) ! compute interior hdivn value … … 115 115 116 116 !!gm POTENTIAL BUG : 117 !!gm ISSUE : if ssh b/= 0 then, in non linear free surface, the e3._n, e3._b should be recomputed117 !!gm ISSUE : if ssh(Nbb) /= 0 then, in non linear free surface, the e3._n, e3._b should be recomputed 118 118 !! as well as gdept and gdepw.... !!!!! 119 119 !! ===>>>> probably a call to domvvl initialisation here.... … … 131 131 ! 132 132 !!gm This is to be changed !!!! 133 ! ! - ML - ssh ncould be modified by istate_eel, so that initialization of e3t_b is done here133 ! ! - ML - ssh(Nnn) could be modified by istate_eel, so that initialization of e3t_b is done here 134 134 ! IF( .NOT.ln_linssh ) THEN 135 135 ! DO jk = 1, jpk -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DOM/restart.F90
r9939 r10009 155 155 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem), ldxios = lwxios ) 156 156 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal), ldxios = lwxios ) 157 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , ssh b, ldxios = lwxios )157 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , ssh(:,:,Nbb) , ldxios = lwxios ) 158 158 ! 159 159 CALL iom_rstput( kt, nitrst, numrow, 'un' , un , ldxios = lwxios ) ! now fields … … 161 161 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem), ldxios = lwxios ) 162 162 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal), ldxios = lwxios ) 163 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , ssh n, ldxios = lwxios )163 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , ssh(:,:,Nnn) , ldxios = lwxios ) 164 164 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop , ldxios = lwxios ) 165 165 ! … … 281 281 282 282 IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0 .AND. .NOT.l_1st_euler ) THEN 283 CALL iom_get( numror, jpdom_autoglo, 'ub' , ub, ldxios = lrxios) ! before fields284 CALL iom_get( numror, jpdom_autoglo, 'vb' , vb, ldxios = lrxios)285 CALL iom_get( numror, jpdom_autoglo, 'tb' 286 CALL iom_get( numror, jpdom_autoglo, 'sb' 287 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb, ldxios = lrxios)283 CALL iom_get( numror, jpdom_autoglo, 'ub' , ub , ldxios = lrxios ) ! before fields 284 CALL iom_get( numror, jpdom_autoglo, 'vb' , vb , ldxios = lrxios ) 285 CALL iom_get( numror, jpdom_autoglo, 'tb' , tsb(:,:,:,jp_tem), ldxios = lrxios ) 286 CALL iom_get( numror, jpdom_autoglo, 'sb' , tsb(:,:,:,jp_sal), ldxios = lrxios ) 287 CALL iom_get( numror, jpdom_autoglo, 'sshb', ssh(:,:,Nbb) , ldxios = lrxios ) 288 288 ELSE 289 289 l_1st_euler = .TRUE. ! before field not found, forced euler 1st time-step 290 290 ENDIF 291 291 ! 292 CALL iom_get( numror, jpdom_autoglo, 'un' , un , ldxios = lrxios ) ! now fields293 CALL iom_get( numror, jpdom_autoglo, 'vn' , vn , ldxios = lrxios )292 CALL iom_get( numror, jpdom_autoglo, 'un' , un , ldxios = lrxios ) ! now fields 293 CALL iom_get( numror, jpdom_autoglo, 'vn' , vn , ldxios = lrxios ) 294 294 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,:,jp_tem), ldxios = lrxios ) 295 295 CALL iom_get( numror, jpdom_autoglo, 'sn' , tsn(:,:,:,jp_sal), ldxios = lrxios ) 296 CALL iom_get( numror, jpdom_autoglo, 'sshn' , ssh n, ldxios = lrxios )296 CALL iom_get( numror, jpdom_autoglo, 'sshn' , ssh(:,:,Nnn) , ldxios = lrxios ) 297 297 IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 298 CALL iom_get( numror, jpdom_autoglo, 'rhop' , rhop, ldxios = lrxios ) ! now potential density298 CALL iom_get( numror, jpdom_autoglo, 'rhop', rhop , ldxios = lrxios ) ! now potential density 299 299 ELSE 300 300 CALL eos( tsn, rhd, rhop, gdept_n(:,:,:) ) … … 302 302 ! 303 303 IF( l_1st_euler ) THEN ! Euler restart 304 tsb (:,:,:,:) = tsn(:,:,:,:) ! all before fields set to now values305 ub (:,:,:) = un(:,:,:)306 vb (:,:,:) = vn(:,:,:)307 ssh b(:,:) = sshn(:,:)304 tsb(:,:,:,:) = tsn(:,:,:,:) ! all before fields set to now values 305 ub (:,:,:) = un (:,:,:) 306 vb (:,:,:) = vn (:,:,:) 307 ssh(:,:,Nbb) = ssh(:,:,Nnn) 308 308 IF( .NOT.ln_linssh ) e3t_b(:,:,:) = e3t_n(:,:,:) 309 309 ENDIF -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dyncor.F90
r9939 r10009 1 MODULE dyn vor1 MODULE dyncor 2 2 !!====================================================================== 3 !! *** MODULE dynvor *** 4 !! Ocean dynamics: Update the momentum trend with the relative and 5 !! planetary vorticity trends 3 !! *** MODULE dyncor *** 4 !! Ocean dynamics: Update the momentum trend with the planetary vorticity trends 6 5 !!====================================================================== 7 !! History : OPA ! 1989-12 (P. Andrich) vor_ens: Original code 8 !! 5.0 ! 1991-11 (G. Madec) vor_ene, vor_mix: Original code 9 !! 6.0 ! 1996-01 (G. Madec) s-coord, suppress work arrays 10 !! NEMO 0.5 ! 2002-08 (G. Madec) F90: Free form and module 11 !! 1.0 ! 2004-02 (G. Madec) vor_een: Original code 12 !! - ! 2003-08 (G. Madec) add vor_ctl 13 !! - ! 2005-11 (G. Madec) add dyn_vor (new step architecture) 14 !! 2.0 ! 2006-11 (G. Madec) flux form advection: add metric term 15 !! 3.2 ! 2009-04 (R. Benshila) vvl: correction of een scheme 16 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 17 !! 3.7 ! 2014-04 (G. Madec) trend simplification: suppress jpdyn_trd_dat vorticity 18 !! - ! 2014-06 (G. Madec) suppression of velocity curl from in-core memory 19 !! - ! 2016-12 (G. Madec, E. Clementi) add Stokes-Coriolis trends (ln_stcor=T) 20 !! 4.0 ! 2017-07 (G. Madec) linear dynamics + trends diag. with Stokes-Coriolis 21 !! - ! 2018-03 (G. Madec) add two new schemes (ln_dynvor_enT and ln_dynvor_eet) 22 !! - ! 2018-04 (G. Madec) add pre-computed gradient for metric term calculation 23 !!---------------------------------------------------------------------- 24 25 !!---------------------------------------------------------------------- 26 !! dyn_vor : Update the momentum trend with the vorticity trend 6 !! History : 5.0 ! 2018-07 (G. Madec) Coriolis trend for Flux Form 7 !!---------------------------------------------------------------------- 8 9 !!---------------------------------------------------------------------- 10 !! dyn_cor : Update the momentum trend with the vorticity trend 27 11 !! vor_ens : enstrophy conserving scheme (ln_dynvor_ens=T) 28 12 !! vor_ene : energy conserving scheme (ln_dynvor_ene=T) 29 13 !! vor_een : energy and enstrophy conserving (ln_dynvor_een=T) 30 !! dyn_ vor_init : set and control of the different vorticity option14 !! dyn_cor_init : set and control of the different vorticity option 31 15 !!---------------------------------------------------------------------- 32 16 USE oce ! ocean dynamics and tracers … … 48 32 PRIVATE 49 33 50 PUBLIC dyn_ vor ! routine called by step.F9051 PUBLIC dyn_ vor_init ! routine called by nemogcm.F9034 PUBLIC dyn_cor ! routine called by step.F90 35 PUBLIC dyn_cor_init ! routine called by nemogcm.F90 52 36 53 37 ! !!* Namelist namdyn_vor: vorticity term … … 96 80 CONTAINS 97 81 98 SUBROUTINE dyn_ vor( kt )82 SUBROUTINE dyn_cor( kt ) 99 83 !!---------------------------------------------------------------------- 100 84 !! … … 111 95 !!---------------------------------------------------------------------- 112 96 ! 113 IF( ln_timing ) CALL timing_start('dyn_ vor')97 IF( ln_timing ) CALL timing_start('dyn_cor') 114 98 ! 115 99 IF( l_trddyn ) THEN !== trend diagnostics case : split the added trend in two parts ==! … … 119 103 ztrdu(:,:,:) = ua(:,:,:) !* planetary vorticity trend (including Stokes-Coriolis force) 120 104 ztrdv(:,:,:) = va(:,:,:) 121 SELECT CASE( nvor_scheme ) 122 CASE( np_ENS ) ; CALL vor_ens( kt, ncor, un , vn , ua, va ) ! enstrophy conserving scheme 123 IF( ln_stcor ) CALL vor_ens( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 124 CASE( np_ENE, np_MIX ) ; CALL vor_ene( kt, ncor, un , vn , ua, va ) ! energy conserving scheme 125 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 126 CASE( np_ENT ) ; CALL vor_enT( kt, ncor, un , vn , ua, va ) ! energy conserving scheme (T-pts) 127 IF( ln_stcor ) CALL vor_enT( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 128 CASE( np_EET ) ; CALL vor_eeT( kt, ncor, un , vn , ua, va ) ! energy conserving scheme (een with e3t) 129 IF( ln_stcor ) CALL vor_eeT( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 130 CASE( np_EEN ) ; CALL vor_een( kt, ncor, un , vn , ua, va ) ! energy & enstrophy scheme 131 IF( ln_stcor ) CALL vor_een( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 132 END SELECT 105 106 CALL cor_ene( kt, ncor, un , vn , ua, va ) ! energy conserving scheme (T-pts) 107 133 108 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 134 109 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 138 113 ztrdu(:,:,:) = ua(:,:,:) 139 114 ztrdv(:,:,:) = va(:,:,:) 140 SELECT CASE( nvor_scheme ) 141 CASE( np_ENT ) ; CALL vor_enT( kt, nrvm, un , vn , ua, va ) ! energy conserving scheme (T-pts) 142 CASE( np_EET ) ; CALL vor_eeT( kt, nrvm, un , vn , ua, va ) ! energy conserving scheme (een with e3t) 143 CASE( np_ENE ) ; CALL vor_ene( kt, nrvm, un , vn , ua, va ) ! energy conserving scheme 144 CASE( np_ENS, np_MIX ) ; CALL vor_ens( kt, nrvm, un , vn , ua, va ) ! enstrophy conserving scheme 145 CASE( np_EEN ) ; CALL vor_een( kt, nrvm, un , vn , ua, va ) ! energy & enstrophy scheme 146 END SELECT 115 CALL cor_ene( kt, nrvm, un , vn , ua, va ) ! energy conserving scheme (T-pts) 147 116 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 148 117 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) … … 152 121 DEALLOCATE( ztrdu, ztrdv ) 153 122 ! 154 ELSE !== total vorticity trend added to the general trend ==! 155 ! 156 SELECT CASE ( nvor_scheme ) !== vorticity trend added to the general trend ==! 157 CASE( np_ENT ) !* energy conserving scheme (T-pts) 158 CALL vor_enT( kt, ntot, un , vn , ua, va ) ! total vorticity trend 159 IF( ln_stcor ) CALL vor_enT( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 160 CASE( np_EET ) !* energy conserving scheme (een scheme using e3t) 161 CALL vor_eeT( kt, ntot, un , vn , ua, va ) ! total vorticity trend 162 IF( ln_stcor ) CALL vor_eeT( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 163 CASE( np_ENE ) !* energy conserving scheme 164 CALL vor_ene( kt, ntot, un , vn , ua, va ) ! total vorticity trend 165 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 166 CASE( np_ENS ) !* enstrophy conserving scheme 167 CALL vor_ens( kt, ntot, un , vn , ua, va ) ! total vorticity trend 168 IF( ln_stcor ) CALL vor_ens( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 169 CASE( np_MIX ) !* mixed ene-ens scheme 170 CALL vor_ens( kt, nrvm, un , vn , ua, va ) ! relative vorticity or metric trend (ens) 171 CALL vor_ene( kt, ncor, un , vn , ua, va ) ! planetary vorticity trend (ene) 172 IF( ln_stcor ) CALL vor_ene( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 173 CASE( np_EEN ) !* energy and enstrophy conserving scheme 174 CALL vor_een( kt, ntot, un , vn , ua, va ) ! total vorticity trend 175 IF( ln_stcor ) CALL vor_een( kt, ncor, usd, vsd, ua, va ) ! add the Stokes-Coriolis trend 176 END SELECT 123 ELSE !== Coriolis (+metric) trend added to the general trend ==! 124 ! 125 ! !* energy conserving scheme (T-pts) 126 IF( ln_stcor ) CALL cor_ene( kt, ntot, usd, vsd , ua, va ) ! Stokes drift 127 CALL cor_ene( kt, ncor, un , vn , ua, va ) ! 177 128 ! 178 129 ENDIF … … 182 133 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 183 134 ! 184 IF( ln_timing ) CALL timing_stop('dyn_ vor')185 ! 186 END SUBROUTINE dyn_ vor187 188 189 SUBROUTINE vor_enT( kt, kvor, pu, pv, pu_rhs, pv_rhs )135 IF( ln_timing ) CALL timing_stop('dyn_cor') 136 ! 137 END SUBROUTINE dyn_cor 138 139 140 SUBROUTINE cor_ene( kt, kvor, pu, pv, pu_rhs, pv_rhs ) 190 141 !!---------------------------------------------------------------------- 191 142 !! *** ROUTINE vor_enT *** 192 143 !! 193 !! ** Purpose : Compute the now total vorticity trend and add it to194 !! the general trend of the momentum equation.144 !! ** Purpose : Compute the now Coriolis (+ metric term) trend and 145 !! add it to the general trend of the momentum equation. 195 146 !! 196 147 !! ** Method : Trend evaluated using now fields (centered in time) … … 228 179 CASE ( np_COR ) !* Coriolis (planetary vorticity) 229 180 zwt(:,:) = ff_t(:,:) * e1e2t(:,:)*e3t_n(:,:,jk) 230 CASE ( np_RVO ) !* relative vorticity231 DO jj = 1, jpjm1232 DO ji = 1, jpim1233 zwz(ji,jj) = ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) &234 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj)235 END DO236 END DO237 IF( ln_dynvor_msk ) THEN ! mask/unmask relative vorticity238 DO jj = 1, jpjm1239 DO ji = 1, jpim1240 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk)241 END DO242 END DO243 ENDIF244 CALL lbc_lnk( zwz, 'F', 1. )245 DO jj = 2, jpj246 DO ji = 2, jpi ! vector opt.247 zwt(ji,jj) = r1_4 * ( zwz(ji-1,jj ) + zwz(ji,jj ) &248 & + zwz(ji-1,jj-1) + zwz(ji,jj-1) ) * e1e2t(ji,jj)*e3t_n(ji,jj,jk)249 END DO250 END DO251 181 CASE ( np_MET ) !* metric term 252 182 DO jj = 2, jpj … … 254 184 zwt(ji,jj) = ( ( pv(ji,jj,jk) + pv(ji,jj-1,jk) ) * di_e2u_2(ji,jj) & 255 185 & - ( pu(ji,jj,jk) + pu(ji-1,jj,jk) ) * dj_e1v_2(ji,jj) ) * e3t_n(ji,jj,jk) 256 END DO257 END DO258 CASE ( np_CRV ) !* Coriolis + relative vorticity259 DO jj = 1, jpjm1260 DO ji = 1, jpim1 ! relative vorticity261 zwz(ji,jj) = ( e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk) &262 & - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk) ) * r1_e1e2f(ji,jj)263 END DO264 END DO265 IF( ln_dynvor_msk ) THEN ! mask/unmask relative vorticity266 DO jj = 1, jpjm1267 DO ji = 1, jpim1268 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk)269 END DO270 END DO271 ENDIF272 CALL lbc_lnk( zwz, 'F', 1. )273 DO jj = 2, jpj274 DO ji = 2, jpi ! vector opt.275 zwt(ji,jj) = ( ff_t(ji,jj) + r1_4 * ( zwz(ji-1,jj ) + zwz(ji,jj ) &276 & + zwz(ji-1,jj-1) + zwz(ji,jj-1) ) ) * e1e2t(ji,jj)*e3t_n(ji,jj,jk)277 186 END DO 278 187 END DO … … 304 213 END DO ! End of slab 305 214 ! ! =============== 306 END SUBROUTINE vor_enT 307 308 309 SUBROUTINE vor_ene( kt, kvor, pun, pvn, pua, pva ) 310 !!---------------------------------------------------------------------- 311 !! *** ROUTINE vor_ene *** 312 !! 313 !! ** Purpose : Compute the now total vorticity trend and add it to 314 !! the general trend of the momentum equation. 315 !! 316 !! ** Method : Trend evaluated using now fields (centered in time) 317 !! and the Sadourny (1975) flux form formulation : conserves the 318 !! horizontal kinetic energy. 319 !! The general trend of momentum is increased due to the vorticity 320 !! term which is given by: 321 !! voru = 1/e1u mj-1[ (rvor+f)/e3f mi(e1v*e3v vn) ] 322 !! vorv = 1/e2v mi-1[ (rvor+f)/e3f mj(e2u*e3u un) ] 323 !! where rvor is the relative vorticity 324 !! 325 !! ** Action : - Update (ua,va) with the now vorticity term trend 326 !! 327 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 328 !!---------------------------------------------------------------------- 329 INTEGER , INTENT(in ) :: kt ! ocean time-step index 330 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 331 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pun, pvn ! now velocities 332 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pua, pva ! total v-trend 333 ! 334 INTEGER :: ji, jj, jk ! dummy loop indices 335 REAL(wp) :: zx1, zy1, zx2, zy2 ! local scalars 336 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz ! 2D workspace 337 !!---------------------------------------------------------------------- 338 ! 339 IF( kt == nit000 ) THEN 340 IF(lwp) WRITE(numout,*) 341 IF(lwp) WRITE(numout,*) 'dyn:vor_ene : vorticity term: energy conserving scheme' 342 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 343 ENDIF 344 ! 345 ! ! =============== 346 DO jk = 1, jpkm1 ! Horizontal slab 347 ! ! =============== 348 ! 349 SELECT CASE( kvor ) !== vorticity considered ==! 350 CASE ( np_COR ) !* Coriolis (planetary vorticity) 351 zwz(:,:) = ff_f(:,:) 352 CASE ( np_RVO ) !* relative vorticity 353 DO jj = 1, jpjm1 354 DO ji = 1, fs_jpim1 ! vector opt. 355 zwz(ji,jj) = ( e2v(ji+1,jj ) * pvn(ji+1,jj ,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 356 & - e1u(ji ,jj+1) * pun(ji ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) * r1_e1e2f(ji,jj) 357 END DO 358 END DO 359 CASE ( np_MET ) !* metric term 360 DO jj = 1, jpjm1 361 DO ji = 1, fs_jpim1 ! vector opt. 362 zwz(ji,jj) = ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 363 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 364 END DO 365 END DO 366 CASE ( np_CRV ) !* Coriolis + relative vorticity 367 DO jj = 1, jpjm1 368 DO ji = 1, fs_jpim1 ! vector opt. 369 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 370 & - e1u(ji,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) * r1_e1e2f(ji,jj) 371 END DO 372 END DO 373 CASE ( np_CME ) !* Coriolis + metric 374 DO jj = 1, jpjm1 375 DO ji = 1, fs_jpim1 ! vector opt. 376 zwz(ji,jj) = ff_f(ji,jj) + ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 377 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 378 END DO 379 END DO 380 CASE DEFAULT ! error 381 CALL ctl_stop('STOP','dyn_vor: wrong value for kvor' ) 382 END SELECT 383 ! 384 IF( ln_dynvor_msk ) THEN !== mask/unmask vorticity ==! 385 DO jj = 1, jpjm1 386 DO ji = 1, fs_jpim1 ! vector opt. 387 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 388 END DO 389 END DO 390 ENDIF 391 392 IF( ln_sco ) THEN 393 zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 394 zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 395 zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 396 ELSE 397 zwx(:,:) = e2u(:,:) * pun(:,:,jk) 398 zwy(:,:) = e1v(:,:) * pvn(:,:,jk) 399 ENDIF 400 ! !== compute and add the vorticity term trend =! 401 DO jj = 2, jpjm1 402 DO ji = fs_2, fs_jpim1 ! vector opt. 403 zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 404 zy2 = zwy(ji,jj ) + zwy(ji+1,jj ) 405 zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1) 406 zx2 = zwx(ji ,jj) + zwx(ji ,jj+1) 407 pua(ji,jj,jk) = pua(ji,jj,jk) + r1_4 * r1_e1u(ji,jj) * ( zwz(ji ,jj-1) * zy1 + zwz(ji,jj) * zy2 ) 408 pva(ji,jj,jk) = pva(ji,jj,jk) - r1_4 * r1_e2v(ji,jj) * ( zwz(ji-1,jj ) * zx1 + zwz(ji,jj) * zx2 ) 409 END DO 410 END DO 411 ! ! =============== 412 END DO ! End of slab 413 ! ! =============== 414 END SUBROUTINE vor_ene 415 416 417 SUBROUTINE vor_ens( kt, kvor, pun, pvn, pua, pva ) 418 !!---------------------------------------------------------------------- 419 !! *** ROUTINE vor_ens *** 420 !! 421 !! ** Purpose : Compute the now total vorticity trend and add it to 422 !! the general trend of the momentum equation. 423 !! 424 !! ** Method : Trend evaluated using now fields (centered in time) 425 !! and the Sadourny (1975) flux FORM formulation : conserves the 426 !! potential enstrophy of a horizontally non-divergent flow. the 427 !! trend of the vorticity term is given by: 428 !! voru = 1/e1u mj-1[ (rvor+f)/e3f ] mj-1[ mi(e1v*e3v vn) ] 429 !! vorv = 1/e2v mi-1[ (rvor+f)/e3f ] mi-1[ mj(e2u*e3u un) ] 430 !! Add this trend to the general momentum trend (ua,va): 431 !! (ua,va) = (ua,va) + ( voru , vorv ) 432 !! 433 !! ** Action : - Update (ua,va) arrays with the now vorticity term trend 434 !! 435 !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 436 !!---------------------------------------------------------------------- 437 INTEGER , INTENT(in ) :: kt ! ocean time-step index 438 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 439 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pun, pvn ! now velocities 440 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pua, pva ! total v-trend 441 ! 442 INTEGER :: ji, jj, jk ! dummy loop indices 443 REAL(wp) :: zuav, zvau ! local scalars 444 REAL(wp), DIMENSION(jpi,jpj) :: zwx, zwy, zwz, zww ! 2D workspace 445 !!---------------------------------------------------------------------- 446 ! 447 IF( kt == nit000 ) THEN 448 IF(lwp) WRITE(numout,*) 449 IF(lwp) WRITE(numout,*) 'dyn:vor_ens : vorticity term: enstrophy conserving scheme' 450 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 451 ENDIF 452 ! ! =============== 453 DO jk = 1, jpkm1 ! Horizontal slab 454 ! ! =============== 455 ! 456 SELECT CASE( kvor ) !== vorticity considered ==! 457 CASE ( np_COR ) !* Coriolis (planetary vorticity) 458 zwz(:,:) = ff_f(:,:) 459 CASE ( np_RVO ) !* relative vorticity 460 DO jj = 1, jpjm1 461 DO ji = 1, fs_jpim1 ! vector opt. 462 zwz(ji,jj) = ( e2v(ji+1,jj ) * pvn(ji+1,jj ,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 463 & - e1u(ji ,jj+1) * pun(ji ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) * r1_e1e2f(ji,jj) 464 END DO 465 END DO 466 CASE ( np_MET ) !* metric term 467 DO jj = 1, jpjm1 468 DO ji = 1, fs_jpim1 ! vector opt. 469 zwz(ji,jj) = ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 470 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 471 END DO 472 END DO 473 CASE ( np_CRV ) !* Coriolis + relative vorticity 474 DO jj = 1, jpjm1 475 DO ji = 1, fs_jpim1 ! vector opt. 476 zwz(ji,jj) = ff_f(ji,jj) + ( e2v(ji+1,jj ) * pvn(ji+1,jj ,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 477 & - e1u(ji ,jj+1) * pun(ji ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) * r1_e1e2f(ji,jj) 478 END DO 479 END DO 480 CASE ( np_CME ) !* Coriolis + metric 481 DO jj = 1, jpjm1 482 DO ji = 1, fs_jpim1 ! vector opt. 483 zwz(ji,jj) = ff_f(ji,jj) + ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 484 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 485 END DO 486 END DO 487 CASE DEFAULT ! error 488 CALL ctl_stop('STOP','dyn_vor: wrong value for kvor' ) 489 END SELECT 490 ! 491 IF( ln_dynvor_msk ) THEN !== mask/unmask vorticity ==! 492 DO jj = 1, jpjm1 493 DO ji = 1, fs_jpim1 ! vector opt. 494 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 495 END DO 496 END DO 497 ENDIF 498 ! 499 IF( ln_sco ) THEN !== horizontal fluxes ==! 500 zwz(:,:) = zwz(:,:) / e3f_n(:,:,jk) 501 zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 502 zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 503 ELSE 504 zwx(:,:) = e2u(:,:) * pun(:,:,jk) 505 zwy(:,:) = e1v(:,:) * pvn(:,:,jk) 506 ENDIF 507 ! !== compute and add the vorticity term trend =! 508 DO jj = 2, jpjm1 509 DO ji = fs_2, fs_jpim1 ! vector opt. 510 zuav = r1_8 * r1_e1u(ji,jj) * ( zwy(ji ,jj-1) + zwy(ji+1,jj-1) & 511 & + zwy(ji ,jj ) + zwy(ji+1,jj ) ) 512 zvau =-r1_8 * r1_e2v(ji,jj) * ( zwx(ji-1,jj ) + zwx(ji-1,jj+1) & 513 & + zwx(ji ,jj ) + zwx(ji ,jj+1) ) 514 pua(ji,jj,jk) = pua(ji,jj,jk) + zuav * ( zwz(ji ,jj-1) + zwz(ji,jj) ) 515 pva(ji,jj,jk) = pva(ji,jj,jk) + zvau * ( zwz(ji-1,jj ) + zwz(ji,jj) ) 516 END DO 517 END DO 518 ! ! =============== 519 END DO ! End of slab 520 ! ! =============== 521 END SUBROUTINE vor_ens 522 523 524 SUBROUTINE vor_een( kt, kvor, pun, pvn, pua, pva ) 525 !!---------------------------------------------------------------------- 526 !! *** ROUTINE vor_een *** 527 !! 528 !! ** Purpose : Compute the now total vorticity trend and add it to 529 !! the general trend of the momentum equation. 530 !! 531 !! ** Method : Trend evaluated using now fields (centered in time) 532 !! and the Arakawa and Lamb (1980) flux form formulation : conserves 533 !! both the horizontal kinetic energy and the potential enstrophy 534 !! when horizontal divergence is zero (see the NEMO documentation) 535 !! Add this trend to the general momentum trend (ua,va). 536 !! 537 !! ** Action : - Update (ua,va) with the now vorticity term trend 538 !! 539 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 540 !!---------------------------------------------------------------------- 541 INTEGER , INTENT(in ) :: kt ! ocean time-step index 542 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 543 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pun, pvn ! now velocities 544 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pua, pva ! total v-trend 545 ! 546 INTEGER :: ji, jj, jk ! dummy loop indices 547 INTEGER :: ierr ! local integer 548 REAL(wp) :: zua, zva ! local scalars 549 REAL(wp) :: zmsk, ze3f ! local scalars 550 REAL(wp), DIMENSION(jpi,jpj) :: zwx , zwy , zwz , z1_e3f 551 REAL(wp), DIMENSION(jpi,jpj) :: ztnw, ztne, ztsw, ztse 552 !!---------------------------------------------------------------------- 553 ! 554 IF( kt == nit000 ) THEN 555 IF(lwp) WRITE(numout,*) 556 IF(lwp) WRITE(numout,*) 'dyn:vor_een : vorticity term: energy and enstrophy conserving scheme' 557 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 558 ENDIF 559 ! 560 ! ! =============== 561 DO jk = 1, jpkm1 ! Horizontal slab 562 ! ! =============== 563 ! 564 SELECT CASE( nn_een_e3f ) ! == reciprocal of e3 at F-point 565 CASE ( 0 ) ! original formulation (masked averaging of e3t divided by 4) 566 DO jj = 1, jpjm1 567 DO ji = 1, fs_jpim1 ! vector opt. 568 ze3f = ( e3t_n(ji,jj+1,jk)*tmask(ji,jj+1,jk) + e3t_n(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 569 & + e3t_n(ji,jj ,jk)*tmask(ji,jj ,jk) + e3t_n(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) 570 IF( ze3f /= 0._wp ) THEN ; z1_e3f(ji,jj) = 4._wp / ze3f 571 ELSE ; z1_e3f(ji,jj) = 0._wp 572 ENDIF 573 END DO 574 END DO 575 CASE ( 1 ) ! new formulation (masked averaging of e3t divided by the sum of mask) 576 DO jj = 1, jpjm1 577 DO ji = 1, fs_jpim1 ! vector opt. 578 ze3f = ( e3t_n(ji,jj+1,jk)*tmask(ji,jj+1,jk) + e3t_n(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk) & 579 & + e3t_n(ji,jj ,jk)*tmask(ji,jj ,jk) + e3t_n(ji+1,jj ,jk)*tmask(ji+1,jj ,jk) ) 580 zmsk = ( tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) & 581 & + tmask(ji,jj ,jk) + tmask(ji+1,jj ,jk) ) 582 IF( ze3f /= 0._wp ) THEN ; z1_e3f(ji,jj) = zmsk / ze3f 583 ELSE ; z1_e3f(ji,jj) = 0._wp 584 ENDIF 585 END DO 586 END DO 587 END SELECT 588 ! 589 SELECT CASE( kvor ) !== vorticity considered ==! 590 CASE ( np_COR ) !* Coriolis (planetary vorticity) 591 DO jj = 1, jpjm1 592 DO ji = 1, fs_jpim1 ! vector opt. 593 zwz(ji,jj) = ff_f(ji,jj) * z1_e3f(ji,jj) 594 END DO 595 END DO 596 CASE ( np_RVO ) !* relative vorticity 597 DO jj = 1, jpjm1 598 DO ji = 1, fs_jpim1 ! vector opt. 599 zwz(ji,jj) = ( e2v(ji+1,jj ) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 600 & - e1u(ji ,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) 601 END DO 602 END DO 603 CASE ( np_MET ) !* metric term 604 DO jj = 1, jpjm1 605 DO ji = 1, fs_jpim1 ! vector opt. 606 zwz(ji,jj) = ( ( pvn(ji+1,jj,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 607 & - ( pun(ji,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) ) * z1_e3f(ji,jj) 608 END DO 609 END DO 610 CASE ( np_CRV ) !* Coriolis + relative vorticity 611 DO jj = 1, jpjm1 612 DO ji = 1, fs_jpim1 ! vector opt. 613 zwz(ji,jj) = ( ff_f(ji,jj) + ( e2v(ji+1,jj ) * pvn(ji+1,jj,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 614 & - e1u(ji ,jj+1) * pun(ji,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) & 615 & * r1_e1e2f(ji,jj) ) * z1_e3f(ji,jj) 616 END DO 617 END DO 618 CASE ( np_CME ) !* Coriolis + metric 619 DO jj = 1, jpjm1 620 DO ji = 1, fs_jpim1 ! vector opt. 621 zwz(ji,jj) = ( ff_f(ji,jj) + ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 622 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) ) * z1_e3f(ji,jj) 623 END DO 624 END DO 625 CASE DEFAULT ! error 626 CALL ctl_stop('STOP','dyn_vor: wrong value for kvor' ) 627 END SELECT 628 ! 629 IF( ln_dynvor_msk ) THEN !== mask/unmask vorticity ==! 630 DO jj = 1, jpjm1 631 DO ji = 1, fs_jpim1 ! vector opt. 632 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 633 END DO 634 END DO 635 ENDIF 636 ! 637 CALL lbc_lnk( zwz, 'F', 1. ) 638 ! 639 ! !== horizontal fluxes ==! 640 zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 641 zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 642 643 ! !== compute and add the vorticity term trend =! 644 jj = 2 645 ztne(1,:) = 0 ; ztnw(1,:) = 0 ; ztse(1,:) = 0 ; ztsw(1,:) = 0 646 DO ji = 2, jpi ! split in 2 parts due to vector opt. 647 ztne(ji,jj) = zwz(ji-1,jj ) + zwz(ji ,jj ) + zwz(ji ,jj-1) 648 ztnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj ) + zwz(ji ,jj ) 649 ztse(ji,jj) = zwz(ji ,jj ) + zwz(ji ,jj-1) + zwz(ji-1,jj-1) 650 ztsw(ji,jj) = zwz(ji ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj ) 651 END DO 652 DO jj = 3, jpj 653 DO ji = fs_2, jpi ! vector opt. ok because we start at jj = 3 654 ztne(ji,jj) = zwz(ji-1,jj ) + zwz(ji ,jj ) + zwz(ji ,jj-1) 655 ztnw(ji,jj) = zwz(ji-1,jj-1) + zwz(ji-1,jj ) + zwz(ji ,jj ) 656 ztse(ji,jj) = zwz(ji ,jj ) + zwz(ji ,jj-1) + zwz(ji-1,jj-1) 657 ztsw(ji,jj) = zwz(ji ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj ) 658 END DO 659 END DO 660 DO jj = 2, jpjm1 661 DO ji = fs_2, fs_jpim1 ! vector opt. 662 zua = + r1_12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & 663 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 664 zva = - r1_12 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & 665 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) 666 pua(ji,jj,jk) = pua(ji,jj,jk) + zua 667 pva(ji,jj,jk) = pva(ji,jj,jk) + zva 668 END DO 669 END DO 670 ! ! =============== 671 END DO ! End of slab 672 ! ! =============== 673 END SUBROUTINE vor_een 674 675 676 677 SUBROUTINE vor_eeT( kt, kvor, pun, pvn, pua, pva ) 678 !!---------------------------------------------------------------------- 679 !! *** ROUTINE vor_eeT *** 680 !! 681 !! ** Purpose : Compute the now total vorticity trend and add it to 682 !! the general trend of the momentum equation. 683 !! 684 !! ** Method : Trend evaluated using now fields (centered in time) 685 !! and the Arakawa and Lamb (1980) vector form formulation using 686 !! a modified version of Arakawa and Lamb (1980) scheme (see vor_een). 687 !! The change consists in 688 !! Add this trend to the general momentum trend (ua,va). 689 !! 690 !! ** Action : - Update (ua,va) with the now vorticity term trend 691 !! 692 !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 693 !!---------------------------------------------------------------------- 694 INTEGER , INTENT(in ) :: kt ! ocean time-step index 695 INTEGER , INTENT(in ) :: kvor ! total, planetary, relative, or metric 696 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pun, pvn ! now velocities 697 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pua, pva ! total v-trend 698 ! 699 INTEGER :: ji, jj, jk ! dummy loop indices 700 INTEGER :: ierr ! local integer 701 REAL(wp) :: zua, zva ! local scalars 702 REAL(wp) :: zmsk, z1_e3t ! local scalars 703 REAL(wp), DIMENSION(jpi,jpj) :: zwx , zwy , zwz 704 REAL(wp), DIMENSION(jpi,jpj) :: ztnw, ztne, ztsw, ztse 705 !!---------------------------------------------------------------------- 706 ! 707 IF( kt == nit000 ) THEN 708 IF(lwp) WRITE(numout,*) 709 IF(lwp) WRITE(numout,*) 'dyn:vor_een : vorticity term: energy and enstrophy conserving scheme' 710 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 711 ENDIF 712 ! 713 ! ! =============== 714 DO jk = 1, jpkm1 ! Horizontal slab 715 ! ! =============== 716 ! 717 ! 718 SELECT CASE( kvor ) !== vorticity considered ==! 719 CASE ( np_COR ) !* Coriolis (planetary vorticity) 720 DO jj = 1, jpjm1 721 DO ji = 1, fs_jpim1 ! vector opt. 722 zwz(ji,jj) = ff_f(ji,jj) 723 END DO 724 END DO 725 CASE ( np_RVO ) !* relative vorticity 726 DO jj = 1, jpjm1 727 DO ji = 1, fs_jpim1 ! vector opt. 728 zwz(ji,jj) = ( e2v(ji+1,jj ) * pvn(ji+1,jj ,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 729 & - e1u(ji ,jj+1) * pun(ji ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) & 730 & * r1_e1e2f(ji,jj) 731 END DO 732 END DO 733 CASE ( np_MET ) !* metric term 734 DO jj = 1, jpjm1 735 DO ji = 1, fs_jpim1 ! vector opt. 736 zwz(ji,jj) = ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 737 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 738 END DO 739 END DO 740 CASE ( np_CRV ) !* Coriolis + relative vorticity 741 DO jj = 1, jpjm1 742 DO ji = 1, fs_jpim1 ! vector opt. 743 zwz(ji,jj) = ( ff_f(ji,jj) + ( e2v(ji+1,jj ) * pvn(ji+1,jj ,jk) - e2v(ji,jj) * pvn(ji,jj,jk) & 744 & - e1u(ji ,jj+1) * pun(ji ,jj+1,jk) + e1u(ji,jj) * pun(ji,jj,jk) ) & 745 & * r1_e1e2f(ji,jj) ) 746 END DO 747 END DO 748 CASE ( np_CME ) !* Coriolis + metric 749 DO jj = 1, jpjm1 750 DO ji = 1, fs_jpim1 ! vector opt. 751 zwz(ji,jj) = ff_f(ji,jj) + ( pvn(ji+1,jj ,jk) + pvn(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj) & 752 & - ( pun(ji ,jj+1,jk) + pun(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 753 END DO 754 END DO 755 CASE DEFAULT ! error 756 CALL ctl_stop('STOP','dyn_vor: wrong value for kvor' ) 757 END SELECT 758 ! 759 IF( ln_dynvor_msk ) THEN !== mask/unmask vorticity ==! 760 DO jj = 1, jpjm1 761 DO ji = 1, fs_jpim1 ! vector opt. 762 zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 763 END DO 764 END DO 765 ENDIF 766 ! 767 CALL lbc_lnk( zwz, 'F', 1. ) 768 ! 769 ! !== horizontal fluxes ==! 770 zwx(:,:) = e2u(:,:) * e3u_n(:,:,jk) * pun(:,:,jk) 771 zwy(:,:) = e1v(:,:) * e3v_n(:,:,jk) * pvn(:,:,jk) 772 773 ! !== compute and add the vorticity term trend =! 774 jj = 2 775 ztne(1,:) = 0 ; ztnw(1,:) = 0 ; ztse(1,:) = 0 ; ztsw(1,:) = 0 776 DO ji = 2, jpi ! split in 2 parts due to vector opt. 777 z1_e3t = 1._wp / e3t_n(ji,jj,jk) 778 ztne(ji,jj) = ( zwz(ji-1,jj ) + zwz(ji ,jj ) + zwz(ji ,jj-1) ) * z1_e3t 779 ztnw(ji,jj) = ( zwz(ji-1,jj-1) + zwz(ji-1,jj ) + zwz(ji ,jj ) ) * z1_e3t 780 ztse(ji,jj) = ( zwz(ji ,jj ) + zwz(ji ,jj-1) + zwz(ji-1,jj-1) ) * z1_e3t 781 ztsw(ji,jj) = ( zwz(ji ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj ) ) * z1_e3t 782 END DO 783 DO jj = 3, jpj 784 DO ji = fs_2, jpi ! vector opt. ok because we start at jj = 3 785 z1_e3t = 1._wp / e3t_n(ji,jj,jk) 786 ztne(ji,jj) = ( zwz(ji-1,jj ) + zwz(ji ,jj ) + zwz(ji ,jj-1) ) * z1_e3t 787 ztnw(ji,jj) = ( zwz(ji-1,jj-1) + zwz(ji-1,jj ) + zwz(ji ,jj ) ) * z1_e3t 788 ztse(ji,jj) = ( zwz(ji ,jj ) + zwz(ji ,jj-1) + zwz(ji-1,jj-1) ) * z1_e3t 789 ztsw(ji,jj) = ( zwz(ji ,jj-1) + zwz(ji-1,jj-1) + zwz(ji-1,jj ) ) * z1_e3t 790 END DO 791 END DO 792 DO jj = 2, jpjm1 793 DO ji = fs_2, fs_jpim1 ! vector opt. 794 zua = + r1_12 * r1_e1u(ji,jj) * ( ztne(ji,jj ) * zwy(ji ,jj ) + ztnw(ji+1,jj) * zwy(ji+1,jj ) & 795 & + ztse(ji,jj ) * zwy(ji ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 796 zva = - r1_12 * r1_e2v(ji,jj) * ( ztsw(ji,jj+1) * zwx(ji-1,jj+1) + ztse(ji,jj+1) * zwx(ji ,jj+1) & 797 & + ztnw(ji,jj ) * zwx(ji-1,jj ) + ztne(ji,jj ) * zwx(ji ,jj ) ) 798 pua(ji,jj,jk) = pua(ji,jj,jk) + zua 799 pva(ji,jj,jk) = pva(ji,jj,jk) + zva 800 END DO 801 END DO 802 ! ! =============== 803 END DO ! End of slab 804 ! ! =============== 805 END SUBROUTINE vor_eeT 806 807 808 SUBROUTINE dyn_vor_init 215 END SUBROUTINE cor_ene 216 217 218 SUBROUTINE dyn_cor_init 809 219 !!--------------------------------------------------------------------- 810 !! *** ROUTINE dyn_ vor_init ***220 !! *** ROUTINE dyn_cor_init *** 811 221 !! 812 222 !! ** Purpose : Control the consistency between cpp options for … … 882 292 SELECT CASE( n_dynadv ) 883 293 CASE( np_LIN_dyn ) 884 IF(lwp) WRITE(numout,*) ' ==>>> linear dynamics : total vorticity = Coriolis'294 IF(lwp) WRITE(numout,*) ' ==>>> linear dynamics : only Coriolis, no metric term' 885 295 nrvm = np_COR ! planetary vorticity 886 296 ntot = np_COR ! - - 887 297 CASE( np_VEC_c2 ) 888 IF(lwp) WRITE(numout,*) ' ==>>> vector form dynamics : total vorticity = Coriolis + relative vorticity' 889 nrvm = np_RVO ! relative vorticity 890 ntot = np_CRV ! relative + planetary vorticity 298 CALL ctl_stop( 'dyncor_init : cor_ene requires FLUX form dynamics, not VECTOR form' ) 891 299 CASE( np_FLX_c2 , np_FLX_ubs ) 892 300 IF(lwp) WRITE(numout,*) ' ==>>> flux form dynamics : total vorticity = Coriolis + metric term' … … 894 302 ntot = np_CME ! Coriolis + metric term 895 303 ! 896 SELECT CASE( nvor_scheme )! pre-computed gradients for the metric term:897 CASE( np_ENT )!* T-point metric term : pre-compute di(e2u)/2 and dj(e1v)/2304 ! ! pre-computed gradients for the metric term: 305 ! !* T-point metric term : pre-compute di(e2u)/2 and dj(e1v)/2 898 306 ALLOCATE( di_e2u_2(jpi,jpj), dj_e1v_2(jpi,jpj) ) 899 307 DO jj = 2, jpjm1 … … 905 313 CALL lbc_lnk_multi( di_e2u_2, 'T', -1. , dj_e1v_2, 'T', -1. ) ! Lateral boundary conditions 906 314 ! 907 CASE DEFAULT !* F-point metric term : pre-compute di(e2u)/(2*e1e2f) and dj(e1v)/(2*e1e2f)908 ALLOCATE( di_e2v_2e1e2f(jpi,jpj), dj_e1u_2e1e2f(jpi,jpj) )909 DO jj = 1, jpjm1910 DO ji = 1, jpim1911 di_e2v_2e1e2f(ji,jj) = ( e2v(ji+1,jj ) - e2v(ji,jj) ) * 0.5 * r1_e1e2f(ji,jj)912 dj_e1u_2e1e2f(ji,jj) = ( e1u(ji ,jj+1) - e1u(ji,jj) ) * 0.5 * r1_e1e2f(ji,jj)913 END DO914 END DO915 CALL lbc_lnk_multi( di_e2v_2e1e2f, 'F', -1. , dj_e1u_2e1e2f, 'F', -1. ) ! Lateral boundary conditions916 END SELECT917 315 ! 918 316 END SELECT 919 920 IF(lwp) THEN ! Print the choice 921 WRITE(numout,*) 922 SELECT CASE( nvor_scheme ) 923 CASE( np_ENS ) ; WRITE(numout,*) ' ==>>> enstrophy conserving scheme (ENS)' 924 CASE( np_ENE ) ; WRITE(numout,*) ' ==>>> energy conserving scheme (Coriolis at F-points) (ENE)' 925 CASE( np_ENT ) ; WRITE(numout,*) ' ==>>> energy conserving scheme (Coriolis at T-points) (ENT)' 926 CASE( np_EET ) ; WRITE(numout,*) ' ==>>> energy conserving scheme (EEN scheme using e3t) (EET)' 927 CASE( np_EEN ) ; WRITE(numout,*) ' ==>>> energy and enstrophy conserving scheme (EEN)' 928 CASE( np_MIX ) ; WRITE(numout,*) ' ==>>> mixed enstrophy/energy conserving scheme (MIX)' 929 END SELECT 930 ENDIF 931 ! 932 END SUBROUTINE dyn_vor_init 317 ! 318 IF(lwp) WRITE(numout,*) 319 IF(lwp) WRITE(numout,*) ' ==>>> energy conserving scheme (Coriolis at F-points) (ENE)' 320 ! 321 END SUBROUTINE dyn_cor_init 933 322 934 323 !!============================================================================== 935 END MODULE dyn vor324 END MODULE dyncor -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynhpg.F90
r9598 r10009 453 453 DO jj = 2, jpjm1 454 454 DO ji = 2, jpim1 455 ll_tmp1 = MIN( sshn(ji,jj) , sshn(ji+1,jj) ) > & 456 & MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj) ) .AND. & 457 & MAX( sshn(ji,jj) + ht_0(ji,jj), sshn(ji+1,jj) + ht_0(ji+1,jj) ) & 458 & > rn_wdmin1 + rn_wdmin2 459 ll_tmp2 = ( ABS( sshn(ji,jj) - sshn(ji+1,jj) ) > 1.E-12 ) .AND. ( & 460 & MAX( sshn(ji,jj) , sshn(ji+1,jj) ) > & 461 & MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 455 ll_tmp1 = MIN( ssh(ji,jj,Nnn) , ssh(ji+1,jj,Nnn) ) & 456 & > MAX( - ht_0(ji,jj) , - ht_0(ji+1,jj) ) .AND. & 457 & MAX( ssh(ji,jj,Nnn) + ht_0(ji,jj) , ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) ) > rn_wdmin1 + rn_wdmin2 458 ! 459 ll_tmp2 = ABS( ssh(ji,jj,Nnn) - ssh(ji+1,jj,Nnn) ) > 1.E-12 .AND. & 460 & MAX( ssh(ji,jj,Nnn) , ssh(ji+1,jj,Nnn) ) > MAX( ht_0(ji,jj) , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 462 461 463 462 IF(ll_tmp1) THEN 464 463 zcpx(ji,jj) = 1.0_wp 465 464 ELSE IF(ll_tmp2) THEN 466 ! no worries about ssh n(ji+1,jj) - sshn(ji ,jj) = 0, it won't happen ! here467 zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj))&468 & / (sshn(ji+1,jj) - sshn(ji ,jj)))465 ! no worries about ssh(ji+1,jj,,Nnn) - ssh(ji,jj,Nnn) = 0, it won't happen ! here 466 zcpx(ji,jj) = ABS( ( ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 467 & / ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) ) 469 468 ELSE 470 469 zcpx(ji,jj) = 0._wp 471 470 END IF 472 471 473 ll_tmp1 = MIN( ssh n(ji,jj) , sshn(ji,jj+1) ) >&474 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) .AND.&475 & MAX( ssh n(ji,jj) + ht_0(ji,jj), sshn(ji,jj+1) + ht_0(ji,jj+1) )&476 & 477 ll_tmp2 = ( ABS( ssh n(ji,jj) - sshn(ji,jj+1) ) > 1.E-12 ) .AND. (&478 & MAX( sshn(ji,jj) , sshn(ji,jj+1) ) >&479 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 )472 ll_tmp1 = MIN( ssh (ji,jj,Nnn) , ssh (ji,jj+1,Nnn) ) & 473 & > MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) .AND. & 474 & MAX( ssh(ji,jj,Nnn) + ht_0(ji,jj), ssh (ji,jj+1,Nnn) + ht_0(ji,jj+1) ) & 475 & > rn_wdmin1 + rn_wdmin2 476 ll_tmp2 = ( ABS( ssh (ji,jj,Nnn) - ssh (ji,jj+1,Nnn) ) > 1.E-12 ) .AND. & 477 & ( MAX( ssh (ji,jj,Nnn) , ssh (ji,jj+1,Nnn) ) > & 478 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 480 479 481 480 IF(ll_tmp1) THEN 482 481 zcpy(ji,jj) = 1.0_wp 483 482 ELSE IF(ll_tmp2) THEN 484 ! no worries about ssh n(ji,jj+1) - sshn(ji,jj) = 0, it won't happen ! here485 zcpy(ji,jj) = ABS( ( sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj))&486 & / (sshn(ji,jj+1) - sshn(ji,jj )))483 ! no worries about ssh(ji,jj+1,Nnn) - ssh(ji,jj ,Nnn) = 0, it won't happen ! here 484 zcpy(ji,jj) = ABS( ( ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 485 & / ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) ) 487 486 ELSE 488 487 zcpy(ji,jj) = 0._wp … … 687 686 DO jj = 2, jpjm1 688 687 DO ji = 2, jpim1 689 ll_tmp1 = MIN( ssh n(ji,jj) , sshn(ji+1,jj) ) >&690 & MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj)) .AND. &691 & MAX( ssh n(ji,jj) + ht_0(ji,jj), sshn(ji+1,jj) + ht_0(ji+1,jj) ) &692 & 693 ll_tmp2 = ( ABS( ssh n(ji,jj) - sshn(ji+1,jj) ) > 1.E-12 ) .AND. (&694 & MAX( ssh n(ji,jj) , sshn(ji+1,jj) ) > &688 ll_tmp1 = MIN( ssh (ji,jj,Nnn) , ssh (ji+1,jj,Nnn) ) & 689 & > MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj) ) .AND. & 690 & MAX( ssh (ji,jj,Nnn) + ht_0(ji,jj), ssh (ji+1,jj,Nnn) + ht_0(ji+1,jj) ) & 691 & > rn_wdmin1 + rn_wdmin2 692 ll_tmp2 = ( ABS( ssh (ji,jj,Nnn) - ssh (ji+1,jj,Nnn) ) > 1.E-12 ) .AND. ( & 693 & MAX( ssh (ji,jj,Nnn) , ssh (ji+1,jj,Nnn) ) > & 695 694 & MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 696 695 IF(ll_tmp1) THEN 697 696 zcpx(ji,jj) = 1.0_wp 698 697 ELSE IF(ll_tmp2) THEN 699 ! no worries about ssh n(ji+1,jj) - sshn(ji ,jj) = 0, it won't happen ! here700 zcpx(ji,jj) = ABS( (ssh n(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj))&701 & / (ssh n(ji+1,jj) - sshn(ji ,jj)))698 ! no worries about ssh(ji+1,jj,Nnn) - ssh(ji ,jj,Nnn) = 0, it won't happen ! here 699 zcpx(ji,jj) = ABS( (ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 700 & / (ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) ) 702 701 ELSE 703 702 zcpx(ji,jj) = 0._wp 704 703 END IF 705 704 706 ll_tmp1 = MIN( ssh n(ji,jj) , sshn(ji,jj+1) ) > &707 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) .AND.&708 & MAX( ssh n(ji,jj) + ht_0(ji,jj), sshn(ji,jj+1) + ht_0(ji,jj+1) ) &709 & 710 ll_tmp2 = ( ABS( ssh n(ji,jj) - sshn(ji,jj+1) ) > 1.E-12 ) .AND. ( &711 & MAX( ssh n(ji,jj) , sshn(ji,jj+1) ) > &705 ll_tmp1 = MIN( ssh (ji,jj,Nnn) , ssh (ji,jj+1,Nnn) ) > & 706 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) .AND. & 707 & MAX( ssh (ji,jj,Nnn) + ht_0(ji,jj), ssh (ji,jj+1,Nnn) + ht_0(ji,jj+1) ) & 708 & > rn_wdmin1 + rn_wdmin2 709 ll_tmp2 = ( ABS( ssh (ji,jj,Nnn) - ssh (ji,jj+1,Nnn) ) > 1.E-12 ) .AND. ( & 710 & MAX( ssh (ji,jj,Nnn) , ssh (ji,jj+1,Nnn) ) > & 712 711 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 713 712 … … 715 714 zcpy(ji,jj) = 1.0_wp 716 715 ELSE IF(ll_tmp2) THEN 717 ! no worries about ssh n(ji,jj+1) - sshn(ji,jj) = 0, it won't happen ! here718 zcpy(ji,jj) = ABS( (ssh n(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj))&719 & / (ssh n(ji,jj+1) - sshn(ji,jj )))716 ! no worries about ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) = 0, it won't happen ! here 717 zcpy(ji,jj) = ABS( (ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 718 & / (ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) ) 720 719 ELSE 721 720 zcpy(ji,jj) = 0._wp … … 975 974 DO jj = 2, jpjm1 976 975 DO ji = 2, jpim1 977 ll_tmp1 = MIN( ssh n(ji,jj) , sshn(ji+1,jj) ) > &976 ll_tmp1 = MIN( ssh (ji,jj,Nnn) , ssh(ji+1,jj,Nnn) ) > & 978 977 & MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj) ) .AND. & 979 & MAX( ssh n(ji,jj) + ht_0(ji,jj), sshn(ji+1,jj) + ht_0(ji+1,jj) ) &980 & 981 ll_tmp2 = ( ABS( ssh n(ji,jj) - sshn(ji+1,jj) ) > 1.E-12 ) .AND. ( &982 & MAX( ssh n(ji,jj) , sshn(ji+1,jj) ) > &978 & MAX( ssh(ji,jj,Nnn) + ht_0(ji,jj), ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) ) & 979 & > rn_wdmin1 + rn_wdmin2 980 ll_tmp2 = ( ABS( ssh(ji,jj,Nnn) - ssh (ji+1,jj,Nnn) ) > 1.E-12 ) .AND. ( & 981 & MAX( ssh(ji,jj,Nnn) , ssh (ji+1,jj,Nnn) ) > & 983 982 & MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 ) 984 983 … … 986 985 zcpx(ji,jj) = 1.0_wp 987 986 ELSE IF(ll_tmp2) THEN 988 ! no worries about ssh n(ji+1,jj) - sshn(ji ,jj) = 0, it won't happen ! here989 zcpx(ji,jj) = ABS( (ssh n(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj))&990 & / (ssh n(ji+1,jj) - sshn(ji ,jj)))987 ! no worries about ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) = 0, it won't happen ! here 988 zcpx(ji,jj) = ABS( (ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 989 & / (ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) ) 991 990 992 991 zcpx(ji,jj) = max(min( zcpx(ji,jj) , 1.0_wp),0.0_wp) … … 995 994 END IF 996 995 997 ll_tmp1 = MIN( ssh n(ji,jj) , sshn(ji,jj+1) ) > &996 ll_tmp1 = MIN( ssh (ji,jj,Nnn) , ssh(ji,jj+1,Nnn) ) > & 998 997 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) .AND. & 999 & MAX( ssh n(ji,jj) + ht_0(ji,jj), sshn(ji,jj+1) + ht_0(ji,jj+1) ) &1000 & 1001 ll_tmp2 = ( ABS( ssh n(ji,jj) - sshn(ji,jj+1) ) > 1.E-12 ) .AND. ( &1002 & MAX( ssh n(ji,jj) , sshn(ji,jj+1) ) > &998 & MAX( ssh (ji,jj,Nnn) + ht_0(ji,jj), ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) ) & 999 & > rn_wdmin1 + rn_wdmin2 1000 ll_tmp2 = ( ABS( ssh (ji,jj,Nnn) - ssh (ji,jj+1,Nnn) ) > 1.E-12 ) .AND. ( & 1001 & MAX( ssh (ji,jj,Nnn) , ssh (ji,jj+1,Nnn) ) > & 1003 1002 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 1004 1003 … … 1006 1005 zcpy(ji,jj) = 1.0_wp 1007 1006 ELSE IF(ll_tmp2) THEN 1008 ! no worries about ssh n(ji,jj+1) - sshn(ji,jj) = 0, it won't happen ! here1009 zcpy(ji,jj) = ABS( (sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj))&1010 & / (sshn(ji,jj+1) - sshn(ji,jj )))1007 ! no worries about ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) = 0, it won't happen ! here 1008 zcpy(ji,jj) = ABS( ( ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) - ssh(ji,jj,Nnn) - ht_0(ji,jj)) & 1009 & / ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) ) 1011 1010 zcpy(ji,jj) = max(min( zcpy(ji,jj) , 1.0_wp),0.0_wp) 1012 1011 … … 1041 1040 DO jj = 1, jpj 1042 1041 DO ji = 1, jpi 1043 zdept(ji,jj,1) = 0.5_wp * e3w_n(ji,jj,1) - ssh n(ji,jj) * znad1042 zdept(ji,jj,1) = 0.5_wp * e3w_n(ji,jj,1) - ssh(ji,jj,Nnn) * znad 1044 1043 END DO 1045 1044 END DO … … 1087 1086 1088 1087 ! Prepare zsshu_n and zsshv_n 1088 !!gm Vector form 1089 ! DO jj = 2, jpjm1 1090 ! DO ji = 2, jpim1 1091 ! !!gm BUG ? if it is ssh at u- & v-point then it should be: 1092 ! ! zsshu_n(ji,jj) = (e1e2t(ji,jj) * ssh(ji,jj,Nnn) + e1e2t(ji+1,jj) * ssh(ji+1,jj,Nnn)) * & 1093 ! ! & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp 1094 ! ! zsshv_n(ji,jj) = (e1e2t(ji,jj) * ssh(ji,jj,Nnn) + e1e2t(ji,jj+1) * ssh(ji,jj+1,Nnn)) * & 1095 ! ! & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp 1096 ! !!gm not this: 1097 ! zsshu_n(ji,jj) = (e1e2u(ji,jj) * ssh(ji,jj,Nnn) + e1e2u(ji+1, jj) * ssh(ji+1,jj,Nnn)) * & 1098 ! & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp 1099 ! zsshv_n(ji,jj) = (e1e2v(ji,jj) * ssh(ji,jj,Nnn) + e1e2v(ji+1, jj) * ssh(ji,jj+1,Nnn)) * & 1100 ! & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp 1101 ! END DO 1102 ! END DO 1103 !!gm Flux form : 1089 1104 DO jj = 2, jpjm1 1090 DO ji = 2, jpim1 1091 !!gm BUG ? if it is ssh at u- & v-point then it should be: 1092 ! zsshu_n(ji,jj) = (e1e2t(ji,jj) * sshn(ji,jj) + e1e2t(ji+1,jj) * sshn(ji+1,jj)) * & 1093 ! & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp 1094 ! zsshv_n(ji,jj) = (e1e2t(ji,jj) * sshn(ji,jj) + e1e2t(ji,jj+1) * sshn(ji,jj+1)) * & 1095 ! & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp 1096 !!gm not this: 1097 zsshu_n(ji,jj) = (e1e2u(ji,jj) * sshn(ji,jj) + e1e2u(ji+1, jj) * sshn(ji+1,jj)) * & 1098 & r1_e1e2u(ji,jj) * umask(ji,jj,1) * 0.5_wp 1099 zsshv_n(ji,jj) = (e1e2v(ji,jj) * sshn(ji,jj) + e1e2v(ji+1, jj) * sshn(ji,jj+1)) * & 1100 & r1_e1e2v(ji,jj) * vmask(ji,jj,1) * 0.5_wp 1105 DO ji = 2, jpim1 1106 zsshu_n(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji+1,jj,Nnn) ) * ssumask(ji,jj) 1107 zsshv_n(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji,jj+1,Nnn) ) * ssvmask(ji,jj) 1101 1108 END DO 1102 1109 END DO 1103 1104 1110 CALL lbc_lnk_multi (zsshu_n, 'U', 1., zsshv_n, 'V', 1. ) 1105 1111 ! 1106 1112 DO jj = 2, jpjm1 1107 DO ji = 2, jpim11108 zu(ji,jj,1) = - ( e3u_n(ji,jj,1) - zsshu_n(ji,jj) * znad)1109 zv(ji,jj,1) = - ( e3v_n(ji,jj,1) - zsshv_n(ji,jj) * znad)1113 DO ji = 2, jpim1 1114 zu(ji,jj,1) = - ( e3u_n(ji,jj,1) - zsshu_n(ji,jj) * znad) 1115 zv(ji,jj,1) = - ( e3v_n(ji,jj,1) - zsshv_n(ji,jj) * znad) 1110 1116 END DO 1111 1117 END DO 1112 1118 ! 1113 1119 DO jk = 2, jpkm1 1114 DO jj = 2, jpjm1 1115 DO ji = 2, jpim1 1116 zu(ji,jj,jk) = zu(ji,jj,jk-1) - e3u_n(ji,jj,jk) 1117 zv(ji,jj,jk) = zv(ji,jj,jk-1) - e3v_n(ji,jj,jk) 1118 END DO 1119 END DO 1120 DO jj = 2, jpjm1 1121 DO ji = 2, jpim1 1122 zu(ji,jj,jk) = zu(ji,jj,jk-1) - e3u_n(ji,jj,jk) 1123 zv(ji,jj,jk) = zv(ji,jj,jk-1) - e3v_n(ji,jj,jk) 1124 END DO 1125 END DO 1126 END DO 1127 ! 1128 DO jk = 1, jpkm1 1129 DO jj = 2, jpjm1 1130 DO ji = 2, jpim1 1131 zu(ji,jj,jk) = zu(ji,jj,jk) + 0.5_wp * e3u_n(ji,jj,jk) 1132 zv(ji,jj,jk) = zv(ji,jj,jk) + 0.5_wp * e3v_n(ji,jj,jk) 1133 END DO 1134 END DO 1135 END DO 1136 1137 DO jk = 1, jpkm1 1138 DO jj = 2, jpjm1 1139 DO ji = 2, jpim1 1140 zu(ji,jj,jk) = MIN( zu(ji,jj,jk) , MAX( -zdept(ji,jj,jk) , -zdept(ji+1,jj,jk) ) ) 1141 zu(ji,jj,jk) = MAX( zu(ji,jj,jk) , MIN( -zdept(ji,jj,jk) , -zdept(ji+1,jj,jk) ) ) 1142 zv(ji,jj,jk) = MIN( zv(ji,jj,jk) , MAX( -zdept(ji,jj,jk) , -zdept(ji,jj+1,jk) ) ) 1143 zv(ji,jj,jk) = MAX( zv(ji,jj,jk) , MIN( -zdept(ji,jj,jk) , -zdept(ji,jj+1,jk) ) ) 1144 END DO 1145 END DO 1120 1146 END DO 1121 1147 … … 1123 1149 DO jj = 2, jpjm1 1124 1150 DO ji = 2, jpim1 1125 zu(ji,jj,jk) = zu(ji,jj,jk) + 0.5_wp * e3u_n(ji,jj,jk) 1126 zv(ji,jj,jk) = zv(ji,jj,jk) + 0.5_wp * e3v_n(ji,jj,jk) 1127 END DO 1128 END DO 1129 END DO 1130 1131 DO jk = 1, jpkm1 1132 DO jj = 2, jpjm1 1133 DO ji = 2, jpim1 1134 zu(ji,jj,jk) = MIN( zu(ji,jj,jk) , MAX( -zdept(ji,jj,jk) , -zdept(ji+1,jj,jk) ) ) 1135 zu(ji,jj,jk) = MAX( zu(ji,jj,jk) , MIN( -zdept(ji,jj,jk) , -zdept(ji+1,jj,jk) ) ) 1136 zv(ji,jj,jk) = MIN( zv(ji,jj,jk) , MAX( -zdept(ji,jj,jk) , -zdept(ji,jj+1,jk) ) ) 1137 zv(ji,jj,jk) = MAX( zv(ji,jj,jk) , MIN( -zdept(ji,jj,jk) , -zdept(ji,jj+1,jk) ) ) 1138 END DO 1139 END DO 1140 END DO 1141 1142 1143 DO jk = 1, jpkm1 1144 DO jj = 2, jpjm1 1145 DO ji = 2, jpim1 1146 zpwes = 0._wp; zpwed = 0._wp 1147 zpnss = 0._wp; zpnsd = 0._wp 1151 zpwes = 0._wp ; zpwed = 0._wp 1152 zpnss = 0._wp ; zpnsd = 0._wp 1148 1153 zuijk = zu(ji,jj,jk) 1149 1154 zvijk = zv(ji,jj,jk) … … 1176 1181 DO WHILE ( -zdept(jid,jj,jk1) < zuijk ) 1177 1182 IF( jk1 == 1 ) THEN 1178 zdeps = zdept(jid,jj,1) + MIN(zuijk, ssh n(jid,jj)*znad)1183 zdeps = zdept(jid,jj,1) + MIN(zuijk, ssh(jid,jj,Nnn)*znad) 1179 1184 zrhdt1 = zrhh(jid,jj,1) - interp3(zdept(jid,jj,1), asp(jid,jj,1), & 1180 1185 bsp(jid,jj,1), csp(jid,jj,1), & … … 1196 1201 IF( .NOT.ln_linssh ) THEN 1197 1202 zdpdx2 = zcoef0 * r1_e1u(ji,jj) * & 1198 & ( REAL(jis-jid, wp) * (zpwes + zpwed) + (ssh n(ji+1,jj)-sshn(ji,jj)) )1203 & ( REAL(jis-jid, wp) * (zpwes + zpwed) + (ssh(ji+1,jj,Nnn)-ssh(ji,jj,Nnn)) ) 1199 1204 ELSE 1200 1205 zdpdx2 = zcoef0 * r1_e1u(ji,jj) * REAL(jis-jid, wp) * (zpwes + zpwed) … … 1234 1239 DO WHILE ( -zdept(ji,jjd,jk1) < zvijk ) 1235 1240 IF( jk1 == 1 ) THEN 1236 zdeps = zdept(ji,jjd,1) + MIN(zvijk, ssh n(ji,jjd)*znad)1241 zdeps = zdept(ji,jjd,1) + MIN(zvijk, ssh(ji,jjd,Nnn)*znad) 1237 1242 zrhdt1 = zrhh(ji,jjd,1) - interp3(zdept(ji,jjd,1), asp(ji,jjd,1), & 1238 1243 bsp(ji,jjd,1), csp(ji,jjd,1), & … … 1255 1260 IF( .NOT.ln_linssh ) THEN 1256 1261 zdpdy2 = zcoef0 * r1_e2v(ji,jj) * & 1257 ( REAL(jjs-jjd, wp) * (zpnss + zpnsd) + (ssh n(ji,jj+1)-sshn(ji,jj)) )1262 ( REAL(jjs-jjd, wp) * (zpnss + zpnsd) + (ssh(ji,jj+1,Nnn)-ssh(ji,jj,Nnn)) ) 1258 1263 ELSE 1259 1264 zdpdy2 = zcoef0 * r1_e2v(ji,jj) * REAL(jjs-jjd, wp) * (zpnss + zpnsd ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynnxt.F90
r10001 r10009 252 252 ! !* ssh at u- and v-points) 253 253 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 254 zsshu(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji+1,jj) ) * ssumask(ji,jj)255 zsshv(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji ,jj+1) ) * ssvmask(ji,jj)254 zsshu(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj ,Nbb) ) * ssumask(ji,jj) 255 zsshv(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji ,jj+1,Nbb) ) * ssvmask(ji,jj) 256 256 END DO ; END DO 257 257 CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) … … 288 288 ! !* ssh at u- and v-points) 289 289 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 290 zsshu(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji+1,jj) ) * ssumask(ji,jj)291 zsshv(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji ,jj+1) ) * ssvmask(ji,jj)290 zsshu(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj ,Nbb) ) * ssumask(ji,jj) 291 zsshv(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji ,jj+1,Nbb) ) * ssvmask(ji,jj) 292 292 END DO ; END DO 293 293 CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) … … 355 355 IF(.NOT.ln_linssh ) THEN 356 356 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 357 zsshu(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji+1,jj) ) * ssumask(ji,jj)358 zsshv(ji,jj) = 0.5_wp * ( sshb(ji ,jj) + sshb(ji ,jj+1) ) * ssvmask(ji,jj)357 zsshu(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj ,Nbb) ) * ssumask(ji,jj) 358 zsshv(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji ,jj+1,Nbb) ) * ssvmask(ji,jj) 359 359 END DO ; END DO 360 360 CALL lbc_lnk_multi( zsshu(:,:),'U', 1._wp , zsshu(:,:),'V', 1._wp ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynspg.F90
r9939 r10009 120 120 DO jj = 2, jpjm1 ! add tide potential + scalar approximation of load potential 121 121 DO ji = fs_2, fs_jpim1 ! vector opt. 122 spgu(ji,jj) = spgu(ji,jj) + ( grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj)) &123 & + zld * ( ssh n (ji+1,jj) - sshn (ji,jj) ) ) * r1_e1u(ji,jj)124 spgv(ji,jj) = spgv(ji,jj) + ( grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj)) &125 & + zld * ( ssh n (ji,jj+1) - sshn (ji,jj) ) ) * r1_e2v(ji,jj)122 spgu(ji,jj) = spgu(ji,jj) + ( grav * ( pot_astro(ji+1,jj) - pot_astro(ji,jj) ) & 123 & + zld * ( ssh (ji+1,jj,Nnn) - ssh (ji,jj,Nnn) ) ) * r1_e1u(ji,jj) 124 spgv(ji,jj) = spgv(ji,jj) + ( grav * ( pot_astro(ji,jj+1) - pot_astro(ji,jj) ) & 125 & + zld * ( ssh (ji,jj+1,Nnn) - ssh (ji,jj,Nnn) ) ) * r1_e2v(ji,jj) 126 126 END DO 127 127 END DO -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynspg_exp.F90
r9939 r10009 49 49 !! momentum trend the surface pressure gradient : 50 50 !! (ua,va) = (ua,va) + (spgu,spgv) 51 !! where spgu = -1/rho0 d/dx(ps) = -g/e1u di( ssh n)52 !! spgv = -1/rho0 d/dy(ps) = -g/e2v dj( ssh n)51 !! where spgu = -1/rho0 d/dx(ps) = -g/e1u di( ssh(Nnn) ) 52 !! spgv = -1/rho0 d/dy(ps) = -g/e2v dj( ssh(Nnn) ) 53 53 !! 54 54 !! ** Action : (ua,va) trend of horizontal velocity increased by … … 74 74 DO jj = 2, jpjm1 ! now surface pressure gradient 75 75 DO ji = fs_2, fs_jpim1 ! vector opt. 76 spgu(ji,jj) = - grav * ( ssh n(ji+1,jj) - sshn(ji,jj) ) * r1_e1u(ji,jj)77 spgv(ji,jj) = - grav * ( ssh n(ji,jj+1) - sshn(ji,jj) ) * r1_e2v(ji,jj)76 spgu(ji,jj) = - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 77 spgv(ji,jj) = - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 78 78 END DO 79 79 END DO -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/dynspg_ts.F90
r9939 r10009 130 130 !! 131 131 !! ** Action : 132 !! -Update the filtered free surface at step "n+1" : ssh a132 !! -Update the filtered free surface at step "n+1" : ssh(Naa) 133 133 !! -Update filtered barotropic velocities at step "n+1" : ua_b, va_b 134 134 !! -Compute barotropic advective fluxes at step "n" : un_adv, vn_adv … … 440 440 DO jj = 2, jpjm1 441 441 DO ji = 2, jpim1 442 ll_tmp1 = MIN( ssh n(ji,jj) , sshn(ji+1,jj) ) >&443 & MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj) ) .AND.&444 & MAX( ssh n(ji,jj) + ht_0(ji,jj) , sshn(ji+1,jj) + ht_0(ji+1,jj) ) &445 & > rn_wdmin1 + rn_wdmin2446 ll_tmp2 = ( ABS( sshn(ji+1,jj) - sshn(ji ,jj)) > 1.E-12 ).AND.(&447 & MAX( sshn(ji,jj) , sshn(ji+1,jj) ) >&448 & MAX( -ht_0(ji,jj) , -ht_0(ji+1,jj) ) + rn_wdmin1 + rn_wdmin2 )442 ll_tmp1 = MIN( ssh(ji,jj,Nnn) , ssh(ji+1,jj,Nnn) ) > & 443 & MAX( - ht_0(ji,jj) , - ht_0(ji+1,jj) ) .AND. & 444 & MAX( ssh(ji,jj,Nnn) + ht_0(ji,jj) , ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) ) > rn_wdmin1 + rn_wdmin2 445 ! 446 ll_tmp2 = ABS( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) > 1.E-12 .AND. & 447 & MAX( ssh(ji+1,jj,Nnn) , ssh(ji,jj,Nnn) ) > & 448 & MAX(-ht_0(ji+1,jj) , -ht_0(ji,jj) ) + rn_wdmin1 + rn_wdmin2 449 449 IF(ll_tmp1) THEN 450 450 zcpx(ji,jj) = 1.0_wp 451 451 ELSEIF(ll_tmp2) THEN 452 ! no worries about ssh n(ji+1,jj) - sshn(ji ,jj) = 0, it won't happen ! here453 zcpx(ji,jj) = ABS( (sshn(ji+1,jj) + ht_0(ji+1,jj) - sshn(ji,jj) - ht_0(ji,jj))&454 & / (sshn(ji+1,jj) - sshn(ji ,jj)))452 ! no worries about ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) = 0, it won't happen ! here 453 zcpx(ji,jj) = ABS( ( ssh(ji+1,jj,Nnn) + ht_0(ji+1,jj) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 454 & / ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) ) 455 455 zcpx(ji,jj) = MAX( 0._wp , MIN( zcpx(ji,jj) , 1._wp ) ) 456 456 ELSE … … 458 458 ENDIF 459 459 ! 460 ll_tmp1 = MIN( ssh n(ji,jj) , sshn(ji,jj+1) ) >&461 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1) ) .AND.&462 & MAX( ssh n(ji,jj) + ht_0(ji,jj) , sshn(ji,jj+1) + ht_0(ji,jj+1) ) &463 & > rn_wdmin1 + rn_wdmin2464 ll_tmp2 = ( ABS( sshn(ji,jj) - sshn(ji,jj+1)) > 1.E-12 ).AND.(&465 & MAX( sshn(ji,jj) , sshn(ji,jj+1) ) >&466 & MAX( -ht_0(ji,jj) , -ht_0(ji,jj+1)) + rn_wdmin1 + rn_wdmin2 )460 ll_tmp1 = MIN( ssh(ji,jj,Nnn) , ssh(ji,jj+1,Nnn) ) > & 461 & MAX( - ht_0(ji,jj) , - ht_0(ji,jj+1) ) .AND. & 462 & MAX( ssh(ji,jj,Nnn) + ht_0(ji,jj) , ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) ) > rn_wdmin1 + rn_wdmin2 463 ! 464 ll_tmp2 = ABS( ssh(ji,jj,Nnn) - ssh(ji,jj+1,Nnn) ) > 1.E-12 .AND. & 465 & MAX( ssh(ji,jj,Nnn) , ssh(ji,jj+1,Nnn) ) > & 466 & ( MAX(-ht_0(ji,jj) ,-ht_0(ji,jj+1) ) + rn_wdmin1 + rn_wdmin2 ) 467 467 468 468 IF(ll_tmp1) THEN 469 469 zcpy(ji,jj) = 1.0_wp 470 470 ELSE IF(ll_tmp2) THEN 471 ! no worries about sshn(ji,jj+1) - sshn(ji,jj) = 0, it won't happen ! here472 zcpy(ji,jj) = ABS( ( sshn(ji,jj+1) + ht_0(ji,jj+1) - sshn(ji,jj) - ht_0(ji,jj))&473 & / ( sshn(ji,jj+1) - sshn(ji,jj )))471 ! no worries about ssh(ji,jj+1,Nnn) - ssh(ji,jj ,Nnn) = 0, it won't happen ! here 472 zcpy(ji,jj) = ABS( ( ssh(ji,jj+1,Nnn) + ht_0(ji,jj+1) - ssh(ji,jj,Nnn) - ht_0(ji,jj) ) & 473 & / ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) ) 474 474 zcpy(ji,jj) = MAX( 0._wp , MIN( zcpy(ji,jj) , 1.0_wp ) ) 475 475 ELSE … … 481 481 DO jj = 2, jpjm1 482 482 DO ji = 2, jpim1 483 zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( ssh n(ji+1,jj ) - sshn(ji ,jj) ) &483 zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) & 484 484 & * r1_e1u(ji,jj) * zcpx(ji,jj) * wdrampu(ji,jj) !jth 485 zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( ssh n(ji ,jj+1) - sshn(ji ,jj) ) &485 zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) & 486 486 & * r1_e2v(ji,jj) * zcpy(ji,jj) * wdrampv(ji,jj) !jth 487 487 END DO … … 492 492 DO jj = 2, jpjm1 493 493 DO ji = fs_2, fs_jpim1 ! vector opt. 494 zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( ssh n(ji+1,jj ) - sshn(ji ,jj) ) * r1_e1u(ji,jj)495 zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( ssh n(ji ,jj+1) - sshn(ji ,jj) ) * r1_e2v(ji,jj)494 zu_trd(ji,jj) = zu_trd(ji,jj) - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 495 zv_trd(ji,jj) = zv_trd(ji,jj) - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 496 496 END DO 497 497 END DO … … 665 665 ! 666 666 IF (ln_bt_fw) THEN ! FORWARD integration: start from NOW fields 667 sshn_e(:,:) = ssh n(:,:)667 sshn_e(:,:) = ssh (:,:,Nnn) 668 668 un_e (:,:) = un_b(:,:) 669 669 vn_e (:,:) = vn_b(:,:) … … 674 674 hvr_e (:,:) = r1_hv_n(:,:) 675 675 ELSE ! CENTRED integration: start from BEFORE fields 676 sshn_e(:,:) = ssh b(:,:)676 sshn_e(:,:) = ssh (:,:,Nbb) 677 677 un_e (:,:) = ub_b(:,:) 678 678 vn_e (:,:) = vb_b(:,:) … … 687 687 ! 688 688 ! Initialize sums: 689 ua_b (:,:) = 0._wp ! After barotropic velocities (or transport if flux form)690 va_b (:,:) = 0._wp691 ssh a (:,:) = 0._wp ! Sum for after averaged sea level692 un_adv(:,:) = 0._wp ! Sum for now transport issued from ts loop693 vn_adv(:,:) = 0._wp689 ua_b (:,:) = 0._wp ! After barotropic velocities (or transport if flux form) 690 va_b (:,:) = 0._wp 691 ssh (:,:,Naa) = 0._wp ! Sum for after averaged sea level 692 un_adv(:,:) = 0._wp ! Sum for now transport issued from ts loop 693 vn_adv(:,:) = 0._wp 694 694 ! 695 695 IF( ln_wd_dl ) THEN … … 1185 1185 ENDIF 1186 1186 ! ! Sum sea level 1187 ssh a(:,:) = ssha(:,:) + za1 * ssha_e(:,:)1187 ssh(:,:,Naa) = ssh(:,:,Naa) + za1 * ssha_e(:,:) 1188 1188 1189 1189 ! ! ==================== ! … … 1223 1223 END DO 1224 1224 ELSE 1225 ! At this stage, ssha has been corrected: compute new depths at velocity points 1225 ! At this stage, ssh(Naa) has been corrected: compute new depths at velocity points 1226 !!gm KE conserving expression in Vector form 1227 ! DO jj = 1, jpjm1 1228 ! DO ji = 1, jpim1 ! NO Vector Opt. 1229 ! zsshu_a(ji,jj) = r1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj) * ( e1e2t(ji ,jj) * ssh(ji ,jj,Naa) & 1230 ! & + e1e2t(ji+1,jj) * ssh(ji+1,jj,Naa) ) 1231 ! zsshv_a(ji,jj) = r1_2 * ssvmask(ji,jj) * r1_e1e2v(ji,jj) * ( e1e2t(ji,jj ) * ssh(ji,jj ,Naa) & 1232 ! & + e1e2t(ji,jj+1) * ssh(ji,jj+1,Naa) ) 1233 ! END DO 1234 ! END DO 1235 !! replace by the KE conserving expression in flux form 1226 1236 DO jj = 1, jpjm1 1227 1237 DO ji = 1, jpim1 ! NO Vector Opt. 1228 zsshu_a(ji,jj) = r1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj) * ( e1e2t(ji ,jj) * ssha(ji ,jj) & 1229 & + e1e2t(ji+1,jj) * ssha(ji+1,jj) ) 1230 zsshv_a(ji,jj) = r1_2 * ssvmask(ji,jj) * r1_e1e2v(ji,jj) * ( e1e2t(ji,jj ) * ssha(ji,jj ) & 1231 & + e1e2t(ji,jj+1) * ssha(ji,jj+1) ) 1232 END DO 1233 END DO 1238 zsshu_a(ji,jj) = r1_2 * ( ssh(ji,jj,Naa) + ssh(ji+1,jj,Naa) ) * ssumask(ji,jj) 1239 zsshv_a(ji,jj) = r1_2 * ( ssh(ji,jj,Naa) + ssh(ji,jj+1,Naa) ) * ssvmask(ji,jj) 1240 END DO 1241 END DO 1242 !!gm end 1234 1243 CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 1235 1244 ! 1236 DO jk =1,jpkm11245 DO jk = 1, jpkm1 1237 1246 ua(:,:,jk) = ua(:,:,jk) + r1_hu_n(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * r1_Dt 1238 1247 va(:,:,jk) = va(:,:,jk) + r1_hv_n(:,:) * ( va_b(:,:) - vb_b(:,:) * hv_b(:,:) ) * r1_Dt -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/sshwzv.F90
r9939 r10009 56 56 !! *** ROUTINE ssh_nxt *** 57 57 !! 58 !! ** Purpose : compute the after ssh (ssha)58 !! ** Purpose : compute the after ssh(Naa) 59 59 !! 60 60 !! ** Method : - Using the incompressibility hypothesis, the ssh increment … … 62 62 !! by the time step. 63 63 !! 64 !! ** action : ssha, after sea surface height64 !! ** action : ssh(Naa), after sea surface height 65 65 !! 66 66 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. … … 87 87 ! !------------------------------! 88 88 89 IF(ln_wd_il) CALL wad_lmt( ssh b, z1_2rho0 * (emp_b(:,:) + emp(:,:)), rDt )89 IF(ln_wd_il) CALL wad_lmt( ssh(:,:,Nbb), z1_2rho0 * (emp_b(:,:) + emp(:,:)), rDt ) 90 90 91 91 CALL div_hor( kt ) ! Horizontal divergence … … 99 99 ! compute the vertical velocity which can be used to compute the non-linear terms of the momentum equations. 100 100 ! 101 ssh a(:,:) = ( sshb(:,:) - rDt * ( z1_2rho0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:)101 ssh(:,:,Naa) = ( ssh(:,:,Nbb) - rDt * ( z1_2rho0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:) 102 102 ! 103 103 #if defined key_agrif … … 107 107 IF ( .NOT.ln_dynspg_ts ) THEN 108 108 IF( ln_bdy ) THEN 109 CALL lbc_lnk( ssh a, 'T', 1. ) ! Not sure that's necessary110 CALL bdy_ssh( ssh a) ! Duplicate sea level across open boundaries109 CALL lbc_lnk( ssh(:,:,Naa), 'T', 1. ) ! Not sure that's necessary 110 CALL bdy_ssh( ssh(:,:,Naa) ) ! Duplicate sea level across open boundaries 111 111 ENDIF 112 112 ENDIF … … 115 115 ! !------------------------------! 116 116 ! 117 IF(ln_ctl) CALL prt_ctl( tab2d_1=ssh a, clinfo1=' ssha - : ', mask1=tmask )117 IF(ln_ctl) CALL prt_ctl( tab2d_1=ssh(:,:,Naa), clinfo1=' ssha - : ', mask1=tmask ) 118 118 ! 119 119 IF( ln_timing ) CALL timing_stop('ssh_nxt') … … 212 212 !! ** Purpose : achieve the sea surface height time stepping by 213 213 !! applying Asselin time filter and swapping the arrays 214 !! ssh aalready computed in ssh_nxt214 !! ssh(Naa) already computed in ssh_nxt 215 215 !! 216 216 !! ** Method : - apply Asselin time fiter to now ssh (excluding the forcing 217 !! from the filter, see Leclair and Madec 2010) and swap:218 !! ssh n = ssha + rn_atfp * ( sshb -2 sshn + ssha)219 !! - rn_atfp * rn_Dt * ( emp_b - emp ) / rho0220 !! sshn = ssha221 !! 222 !! ** action : - ssh b, sshn :before & now sea surface height223 !! ready for the next time step217 !! from the filter, see Leclair and Madec 2010) : 218 !! ssh(Nnn) = ssh(Naa) + rn_atfp * ( ssh(Nbb) -2 ssh(Nnn) + ssh(Naa) ) 219 !! - rn_atfp * rn_Dt * ( emp_b - emp ) / rho0 220 !! - swap the time-level indexes 221 !! 222 !! ** action : - ssh(Nbb), ssh(Nnn) : new before & now sea surface height 223 !! ready for the next time step 224 224 !! 225 225 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. … … 227 227 INTEGER, INTENT(in) :: kt ! ocean time-step index 228 228 ! 229 INTEGER :: isave ! local integer 229 230 REAL(wp) :: zcoef ! local scalar 230 231 !!---------------------------------------------------------------------- … … 240 241 IF ( l_1st_euler ) THEN !== Euler time-stepping ==! no filter, just swap 241 242 ! 242 sshn(:,:) = ssha(:,:) ! now <-- after (before already = now) 243 isave = Nnn 244 Nnn = Naa ! now <-- after (before remains unchanged) 245 Naa = isave ! after <-- previously now index 243 246 ! 244 247 ELSE !== Leap-Frog time-stepping ==! Asselin filter + swap 245 248 ! 246 249 ! ! before <-- now filtered 247 ssh b(:,:) = sshn(:,:) + rn_atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) )250 ssh(:,:,Nbb) = ssh(:,:,Nnn) + rn_atfp * ( ssh(:,:,Nbb) - 2 * ssh(:,:,Nnn) + ssh(:,:,Naa) ) 248 251 IF( .NOT.ln_linssh ) THEN ! before <-- with forcing removed 249 252 zcoef = rn_atfp * rn_Dt * r1_rho0 250 ssh b(:,:) = sshb(:,:) - zcoef * ( emp_b(:,:) - emp (:,:) &251 & - rnf_b(:,:) + rnf (:,:) &252 & + fwfisf_b(:,:) - fwfisf(:,:) ) * ssmask(:,:)253 ssh(:,:,Nbb) = ssh(:,:,Nbb) - zcoef * ( emp_b(:,:) - emp (:,:) & 254 & - rnf_b(:,:) + rnf (:,:) & 255 & + fwfisf_b(:,:) - fwfisf(:,:) ) * ssmask(:,:) 253 256 ENDIF 254 sshn(:,:) = ssha(:,:) ! now <-- after 255 ENDIF 256 ! 257 IF(ln_ctl) CALL prt_ctl( tab2d_1=sshb, clinfo1=' sshb - : ', mask1=tmask ) 257 isave = Nnn 258 Nnn = Naa ! now <-- after 259 Naa = isave ! after <-- previously now index 260 ENDIF 261 ! 262 IF(ln_ctl) CALL prt_ctl( tab2d_1=ssh(:,:,Nbb), clinfo1=' sshb - : ', mask1=tmask ) 258 263 ! 259 264 IF( ln_timing ) CALL timing_stop('ssh_swp') -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/DYN/wet_dry.F90
r9939 r10009 117 117 118 118 119 SUBROUTINE wad_lmt( sshb1, sshemp, p2dt )119 SUBROUTINE wad_lmt( pssh, sshemp, p2dt ) 120 120 !!---------------------------------------------------------------------- 121 121 !! *** ROUTINE wad_lmt *** … … 127 127 !! ** Action : - calculate flux limiter and W/D flag 128 128 !!---------------------------------------------------------------------- 129 REAL(wp), DIMENSION(:,:), INTENT(inout) :: sshb1 !!gm DOCTOR names: should start with p !129 REAL(wp), DIMENSION(:,:), INTENT(inout) :: pssh ! before sea-surface height 130 130 REAL(wp), DIMENSION(:,:), INTENT(in ) :: sshemp 131 131 REAL(wp) , INTENT(in ) :: p2dt … … 178 178 & + MIN( zflxv(ji,jj) , 0._wp ) - MAX( zflxv(ji, jj-1) , 0._wp ) 179 179 ! 180 zdep2 = ht_0(ji,jj) + sshb1(ji,jj) - rn_wdmin1180 zdep2 = ht_0(ji,jj) + pssh(ji,jj) - rn_wdmin1 181 181 IF( zdep2 <= 0._wp ) THEN ! add more safty, but not necessary 182 sshb1(ji,jj) = rn_wdmin1 - ht_0(ji,jj)182 pssh(ji,jj) = rn_wdmin1 - ht_0(ji,jj) 183 183 IF(zflxu(ji, jj) > 0._wp) zwdlmtu(ji ,jj) = 0._wp 184 184 IF(zflxu(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = 0._wp … … 191 191 ! 192 192 ! ! HPG limiter from jholt 193 wdramp(:,:) = min((ht_0(:,:) + sshb1(:,:) - rn_wdmin1)/(rn_wdmin0 - rn_wdmin1),1.0_wp)193 wdramp(:,:) = min((ht_0(:,:) + pssh(:,:) - rn_wdmin1)/(rn_wdmin0 - rn_wdmin1),1.0_wp) 194 194 !jth assume don't need a lbc_lnk here 195 195 DO jj = 1, jpjm1 … … 221 221 ! 222 222 zdep1 = (zzflxp + zzflxn) * p2dt / ztmp 223 zdep2 = ht_0(ji,jj) + sshb1(ji,jj) - rn_wdmin1 - p2dt * sshemp(ji,jj)223 zdep2 = ht_0(ji,jj) + pssh(ji,jj) - rn_wdmin1 - p2dt * sshemp(ji,jj) 224 224 ! 225 225 IF( zdep1 > zdep2 ) THEN -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/IOM/iom.F90
r9939 r10009 408 408 409 409 i = 0 410 i = i + 1; fields(i)%vname="rdt"; fields(i)%grid="grid_scalar" 411 i = i + 1; fields(i)%vname="un"; fields(i)%grid="grid_N_3D" 412 i = i + 1; fields(i)%vname="ub"; fields(i)%grid="grid_N_3D" 413 i = i + 1; fields(i)%vname="vn"; fields(i)%grid="grid_N_3D" 414 i = i + 1; fields(i)%vname="vb"; fields(i)%grid="grid_N_3D" 415 i = i + 1; fields(i)%vname="tn"; fields(i)%grid="grid_N_3D" 416 i = i + 1; fields(i)%vname="tb"; fields(i)%grid="grid_N_3D" 417 i = i + 1; fields(i)%vname="sn"; fields(i)%grid="grid_N_3D" 418 i = i + 1; fields(i)%vname="sb"; fields(i)%grid="grid_N_3D" 419 i = i + 1; fields(i)%vname="sshn"; fields(i)%grid="grid_N" 420 i = i + 1; fields(i)%vname="sshb"; fields(i)%grid="grid_N" 421 i = i + 1; fields(i)%vname="rhop"; fields(i)%grid="grid_N_3D" 422 i = i + 1; fields(i)%vname="kt"; fields(i)%grid="grid_scalar" 423 i = i + 1; fields(i)%vname="ndastp"; fields(i)%grid="grid_scalar" 424 i = i + 1; fields(i)%vname="adatrj"; fields(i)%grid="grid_scalar" 425 i = i + 1; fields(i)%vname="utau_b"; fields(i)%grid="grid_N" 426 i = i + 1; fields(i)%vname="vtau_b"; fields(i)%grid="grid_N" 427 i = i + 1; fields(i)%vname="qns_b"; fields(i)%grid="grid_N" 428 i = i + 1; fields(i)%vname="emp_b"; fields(i)%grid="grid_N" 429 i = i + 1; fields(i)%vname="sfx_b"; fields(i)%grid="grid_N" 430 i = i + 1; fields(i)%vname="en" ; fields(i)%grid="grid_N_3D" 431 i = i + 1; fields(i)%vname="avt_k"; fields(i)%grid="grid_N_3D" 432 i = i + 1; fields(i)%vname="avm_k"; fields(i)%grid="grid_N_3D" 433 i = i + 1; fields(i)%vname="dissl"; fields(i)%grid="grid_N_3D" 434 i = i + 1; fields(i)%vname="sbc_hc_b"; fields(i)%grid="grid_N" 435 i = i + 1; fields(i)%vname="sbc_sc_b"; fields(i)%grid="grid_N" 436 i = i + 1; fields(i)%vname="qsr_hc_b"; fields(i)%grid="grid_N_3D" 437 i = i + 1; fields(i)%vname="fraqsr_1lev"; fields(i)%grid="grid_N" 438 i = i + 1; fields(i)%vname="greenland_icesheet_mass" 439 fields(i)%grid="grid_scalar" 440 i = i + 1; fields(i)%vname="greenland_icesheet_timelapsed" 441 fields(i)%grid="grid_scalar" 442 i = i + 1; fields(i)%vname="greenland_icesheet_mass_roc" 443 fields(i)%grid="grid_scalar" 444 i = i + 1; fields(i)%vname="antarctica_icesheet_mass" 445 fields(i)%grid="grid_scalar" 446 i = i + 1; fields(i)%vname="antarctica_icesheet_timelapsed" 447 fields(i)%grid="grid_scalar" 448 i = i + 1; fields(i)%vname="antarctica_icesheet_mass_roc" 449 fields(i)%grid="grid_scalar" 450 i = i + 1; fields(i)%vname="frc_v"; fields(i)%grid="grid_scalar" 451 i = i + 1; fields(i)%vname="frc_t"; fields(i)%grid="grid_scalar" 452 i = i + 1; fields(i)%vname="frc_s"; fields(i)%grid="grid_scalar" 453 i = i + 1; fields(i)%vname="frc_wn_t"; fields(i)%grid="grid_scalar" 454 i = i + 1; fields(i)%vname="frc_wn_s"; fields(i)%grid="grid_scalar" 455 i = i + 1; fields(i)%vname="ssh_ini"; fields(i)%grid="grid_N" 456 i = i + 1; fields(i)%vname="e3t_ini"; fields(i)%grid="grid_N_3D" 457 i = i + 1; fields(i)%vname="hc_loc_ini"; fields(i)%grid="grid_N_3D" 458 i = i + 1; fields(i)%vname="sc_loc_ini"; fields(i)%grid="grid_N_3D" 459 i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 460 i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 461 i = i + 1; fields(i)%vname="tilde_e3t_b"; fields(i)%grid="grid_N" 462 i = i + 1; fields(i)%vname="tilde_e3t_n"; fields(i)%grid="grid_N" 463 i = i + 1; fields(i)%vname="hdiv_lf"; fields(i)%grid="grid_N" 464 i = i + 1; fields(i)%vname="ub2_b"; fields(i)%grid="grid_N" 465 i = i + 1; fields(i)%vname="vb2_b"; fields(i)%grid="grid_N" 466 i = i + 1; fields(i)%vname="sshbb_e"; fields(i)%grid="grid_N" 467 i = i + 1; fields(i)%vname="ubb_e"; fields(i)%grid="grid_N" 468 i = i + 1; fields(i)%vname="vbb_e"; fields(i)%grid="grid_N" 469 i = i + 1; fields(i)%vname="sshb_e"; fields(i)%grid="grid_N" 470 i = i + 1; fields(i)%vname="ub_e"; fields(i)%grid="grid_N" 471 i = i + 1; fields(i)%vname="vb_e"; fields(i)%grid="grid_N" 472 i = i + 1; fields(i)%vname="fwf_isf_b"; fields(i)%grid="grid_N" 473 i = i + 1; fields(i)%vname="isf_sc_b"; fields(i)%grid="grid_N" 474 i = i + 1; fields(i)%vname="isf_hc_b"; fields(i)%grid="grid_N" 475 i = i + 1; fields(i)%vname="ssh_ibb"; fields(i)%grid="grid_N" 476 i = i + 1; fields(i)%vname="rnf_b"; fields(i)%grid="grid_N" 477 i = i + 1; fields(i)%vname="rnf_hc_b"; fields(i)%grid="grid_N" 478 i = i + 1; fields(i)%vname="rnf_sc_b"; fields(i)%grid="grid_N" 479 i = i + 1; fields(i)%vname="nn_fsbc"; fields(i)%grid="grid_scalar" 480 i = i + 1; fields(i)%vname="ssu_m"; fields(i)%grid="grid_N" 481 i = i + 1; fields(i)%vname="ssv_m"; fields(i)%grid="grid_N" 482 i = i + 1; fields(i)%vname="sst_m"; fields(i)%grid="grid_N" 483 i = i + 1; fields(i)%vname="sss_m"; fields(i)%grid="grid_N" 484 i = i + 1; fields(i)%vname="ssh_m"; fields(i)%grid="grid_N" 485 i = i + 1; fields(i)%vname="e3t_m"; fields(i)%grid="grid_N" 486 i = i + 1; fields(i)%vname="frq_m"; fields(i)%grid="grid_N" 487 i = i + 1; fields(i)%vname="avmb"; fields(i)%grid="grid_vector" 488 i = i + 1; fields(i)%vname="avtb"; fields(i)%grid="grid_vector" 489 i = i + 1; fields(i)%vname="ub2_i_b"; fields(i)%grid="grid_N" 490 i = i + 1; fields(i)%vname="vb2_i_b"; fields(i)%grid="grid_N" 491 i = i + 1; fields(i)%vname="ntime"; fields(i)%grid="grid_scalar" 492 i = i + 1; fields(i)%vname="Dsst"; fields(i)%grid="grid_scalar" 493 i = i + 1; fields(i)%vname="tmask"; fields(i)%grid="grid_N_3D" 494 i = i + 1; fields(i)%vname="umask"; fields(i)%grid="grid_N_3D" 495 i = i + 1; fields(i)%vname="vmask"; fields(i)%grid="grid_N_3D" 496 i = i + 1; fields(i)%vname="smask"; fields(i)%grid="grid_N_3D" 497 i = i + 1; fields(i)%vname="gdepw_n"; fields(i)%grid="grid_N_3D" 498 i = i + 1; fields(i)%vname="e3t_n"; fields(i)%grid="grid_N_3D" 499 i = i + 1; fields(i)%vname="e3u_n"; fields(i)%grid="grid_N_3D" 500 i = i + 1; fields(i)%vname="e3v_n"; fields(i)%grid="grid_N_3D" 501 i = i + 1; fields(i)%vname="surf_ini"; fields(i)%grid="grid_N" 502 i = i + 1; fields(i)%vname="e3t_b"; fields(i)%grid="grid_N_3D" 503 i = i + 1; fields(i)%vname="hmxl_n"; fields(i)%grid="grid_N_3D" 504 i = i + 1; fields(i)%vname="un_bf"; fields(i)%grid="grid_N" 505 i = i + 1; fields(i)%vname="vn_bf"; fields(i)%grid="grid_N" 506 i = i + 1; fields(i)%vname="hbl"; fields(i)%grid="grid_N" 507 i = i + 1; fields(i)%vname="hbli"; fields(i)%grid="grid_N" 508 i = i + 1; fields(i)%vname="wn"; fields(i)%grid="grid_N_3D" 410 i = i + 1; fields(i)%vname="rdt" ; fields(i)%grid="grid_scalar" 411 i = i + 1; fields(i)%vname="un" ; fields(i)%grid="grid_N_3D" 412 i = i + 1; fields(i)%vname="ub" ; fields(i)%grid="grid_N_3D" 413 i = i + 1; fields(i)%vname="vn" ; fields(i)%grid="grid_N_3D" 414 i = i + 1; fields(i)%vname="vb" ; fields(i)%grid="grid_N_3D" 415 i = i + 1; fields(i)%vname="tn" ; fields(i)%grid="grid_N_3D" 416 i = i + 1; fields(i)%vname="tb" ; fields(i)%grid="grid_N_3D" 417 i = i + 1; fields(i)%vname="sn" ; fields(i)%grid="grid_N_3D" 418 i = i + 1; fields(i)%vname="sb" ; fields(i)%grid="grid_N_3D" 419 i = i + 1; fields(i)%vname='sshn' ; fields(i)%grid="grid_N" 420 i = i + 1; fields(i)%vname='sshb' ; fields(i)%grid="grid_N" 421 i = i + 1; fields(i)%vname="rhop" ; fields(i)%grid="grid_N_3D" 422 i = i + 1; fields(i)%vname="kt" ; fields(i)%grid="grid_scalar" 423 i = i + 1; fields(i)%vname="ndastp" ; fields(i)%grid="grid_scalar" 424 i = i + 1; fields(i)%vname="adatrj" ; fields(i)%grid="grid_scalar" 425 i = i + 1; fields(i)%vname="utau_b" ; fields(i)%grid="grid_N" 426 i = i + 1; fields(i)%vname="vtau_b" ; fields(i)%grid="grid_N" 427 i = i + 1; fields(i)%vname="qns_b" ; fields(i)%grid="grid_N" 428 i = i + 1; fields(i)%vname="emp_b" ; fields(i)%grid="grid_N" 429 i = i + 1; fields(i)%vname="sfx_b" ; fields(i)%grid="grid_N" 430 i = i + 1; fields(i)%vname="en" ; fields(i)%grid="grid_N_3D" 431 i = i + 1; fields(i)%vname="avt_k" ; fields(i)%grid="grid_N_3D" 432 i = i + 1; fields(i)%vname="avm_k" ; fields(i)%grid="grid_N_3D" 433 i = i + 1; fields(i)%vname="dissl" ; fields(i)%grid="grid_N_3D" 434 i = i + 1; fields(i)%vname="sbc_hc_b" ; fields(i)%grid="grid_N" 435 i = i + 1; fields(i)%vname="sbc_sc_b" ; fields(i)%grid="grid_N" 436 i = i + 1; fields(i)%vname="qsr_hc_b" ; fields(i)%grid="grid_N_3D" 437 i = i + 1; fields(i)%vname="fraqsr_1lev" ; fields(i)%grid="grid_N" 438 i = i + 1; fields(i)%vname="greenland_icesheet_mass" ; fields(i)%grid="grid_scalar" 439 i = i + 1; fields(i)%vname="greenland_icesheet_timelapsed" ; fields(i)%grid="grid_scalar" 440 i = i + 1; fields(i)%vname="greenland_icesheet_mass_roc" ; fields(i)%grid="grid_scalar" 441 i = i + 1; fields(i)%vname="antarctica_icesheet_mass" ; fields(i)%grid="grid_scalar" 442 i = i + 1; fields(i)%vname="antarctica_icesheet_timelapsed" ; fields(i)%grid="grid_scalar" 443 i = i + 1; fields(i)%vname="antarctica_icesheet_mass_roc" ; fields(i)%grid="grid_scalar" 444 i = i + 1; fields(i)%vname="frc_v" ; fields(i)%grid="grid_scalar" 445 i = i + 1; fields(i)%vname="frc_t" ; fields(i)%grid="grid_scalar" 446 i = i + 1; fields(i)%vname="frc_s" ; fields(i)%grid="grid_scalar" 447 i = i + 1; fields(i)%vname="frc_wn_t" ; fields(i)%grid="grid_scalar" 448 i = i + 1; fields(i)%vname="frc_wn_s" ; fields(i)%grid="grid_scalar" 449 i = i + 1; fields(i)%vname="ssh_ini" ; fields(i)%grid="grid_N" 450 i = i + 1; fields(i)%vname="e3t_ini" ; fields(i)%grid="grid_N_3D" 451 i = i + 1; fields(i)%vname="hc_loc_ini" ; fields(i)%grid="grid_N_3D" 452 i = i + 1; fields(i)%vname="sc_loc_ini" ; fields(i)%grid="grid_N_3D" 453 i = i + 1; fields(i)%vname="ssh_hc_loc_ini" ; fields(i)%grid="grid_N" 454 i = i + 1; fields(i)%vname="ssh_sc_loc_ini" ; fields(i)%grid="grid_N" 455 i = i + 1; fields(i)%vname="tilde_e3t_b" ; fields(i)%grid="grid_N" 456 i = i + 1; fields(i)%vname="tilde_e3t_n" ; fields(i)%grid="grid_N" 457 i = i + 1; fields(i)%vname="hdiv_lf" ; fields(i)%grid="grid_N" 458 i = i + 1; fields(i)%vname="ub2_b" ; fields(i)%grid="grid_N" 459 i = i + 1; fields(i)%vname="vb2_b" ; fields(i)%grid="grid_N" 460 i = i + 1; fields(i)%vname="sshbb_e" ; fields(i)%grid="grid_N" 461 i = i + 1; fields(i)%vname="ubb_e" ; fields(i)%grid="grid_N" 462 i = i + 1; fields(i)%vname="vbb_e" ; fields(i)%grid="grid_N" 463 i = i + 1; fields(i)%vname="sshb_e" ; fields(i)%grid="grid_N" 464 i = i + 1; fields(i)%vname="ub_e" ; fields(i)%grid="grid_N" 465 i = i + 1; fields(i)%vname="vb_e" ; fields(i)%grid="grid_N" 466 i = i + 1; fields(i)%vname="fwf_isf_b" ; fields(i)%grid="grid_N" 467 i = i + 1; fields(i)%vname="isf_sc_b" ; fields(i)%grid="grid_N" 468 i = i + 1; fields(i)%vname="isf_hc_b" ; fields(i)%grid="grid_N" 469 i = i + 1; fields(i)%vname="ssh_ibb" ; fields(i)%grid="grid_N" 470 i = i + 1; fields(i)%vname="rnf_b" ; fields(i)%grid="grid_N" 471 i = i + 1; fields(i)%vname="rnf_hc_b" ; fields(i)%grid="grid_N" 472 i = i + 1; fields(i)%vname="rnf_sc_b" ; fields(i)%grid="grid_N" 473 i = i + 1; fields(i)%vname="nn_fsbc" ; fields(i)%grid="grid_scalar" 474 i = i + 1; fields(i)%vname="ssu_m" ; fields(i)%grid="grid_N" 475 i = i + 1; fields(i)%vname="ssv_m" ; fields(i)%grid="grid_N" 476 i = i + 1; fields(i)%vname="sst_m" ; fields(i)%grid="grid_N" 477 i = i + 1; fields(i)%vname="sss_m" ; fields(i)%grid="grid_N" 478 i = i + 1; fields(i)%vname="ssh_m" ; fields(i)%grid="grid_N" 479 i = i + 1; fields(i)%vname="e3t_m" ; fields(i)%grid="grid_N" 480 i = i + 1; fields(i)%vname="frq_m" ; fields(i)%grid="grid_N" 481 i = i + 1; fields(i)%vname="avmb" ; fields(i)%grid="grid_vector" 482 i = i + 1; fields(i)%vname="avtb" ; fields(i)%grid="grid_vector" 483 i = i + 1; fields(i)%vname="ub2_i_b" ; fields(i)%grid="grid_N" 484 i = i + 1; fields(i)%vname="vb2_i_b" ; fields(i)%grid="grid_N" 485 i = i + 1; fields(i)%vname="ntime" ; fields(i)%grid="grid_scalar" 486 i = i + 1; fields(i)%vname="Dsst" ; fields(i)%grid="grid_scalar" 487 i = i + 1; fields(i)%vname="tmask" ; fields(i)%grid="grid_N_3D" 488 i = i + 1; fields(i)%vname="umask" ; fields(i)%grid="grid_N_3D" 489 i = i + 1; fields(i)%vname="vmask" ; fields(i)%grid="grid_N_3D" 490 i = i + 1; fields(i)%vname="smask" ; fields(i)%grid="grid_N_3D" 491 i = i + 1; fields(i)%vname="gdepw_n" ; fields(i)%grid="grid_N_3D" 492 i = i + 1; fields(i)%vname="e3t_n" ; fields(i)%grid="grid_N_3D" 493 i = i + 1; fields(i)%vname="e3u_n" ; fields(i)%grid="grid_N_3D" 494 i = i + 1; fields(i)%vname="e3v_n" ; fields(i)%grid="grid_N_3D" 495 i = i + 1; fields(i)%vname="surf_ini" ; fields(i)%grid="grid_N" 496 i = i + 1; fields(i)%vname="e3t_b" ; fields(i)%grid="grid_N_3D" 497 i = i + 1; fields(i)%vname="hmxl_n" ; fields(i)%grid="grid_N_3D" 498 i = i + 1; fields(i)%vname="un_bf" ; fields(i)%grid="grid_N" 499 i = i + 1; fields(i)%vname="vn_bf" ; fields(i)%grid="grid_N" 500 i = i + 1; fields(i)%vname="hbl" ; fields(i)%grid="grid_N" 501 i = i + 1; fields(i)%vname="hbli" ; fields(i)%grid="grid_N" 502 i = i + 1; fields(i)%vname="wn" ; fields(i)%grid="grid_N_3D" 509 503 510 504 IF( i-1 > max_rst_fields) THEN … … 523 517 !!--------------------------------------------------------------------- 524 518 !sets enabled = .TRUE. for each field in restart file 525 CHARACTER(len=*) :: cdrst_file519 CHARACTER(len=*) :: cdrst_file 526 520 #if defined key_iomput 527 TYPE(xios_field) :: field_hdl 528 TYPE(xios_file) :: file_hdl 529 TYPE(xios_filegroup) :: filegroup_hdl 530 INTEGER :: i 531 CHARACTER(lc) :: clpath 521 TYPE(xios_field) :: field_hdl 522 TYPE(xios_file) :: file_hdl 523 TYPE(xios_filegroup) :: filegroup_hdl 524 INTEGER :: i 525 CHARACTER(lc) :: clpath 526 !!--------------------------------------------------------------------- 532 527 533 528 !set name of the restart file and enable available fields … … 567 562 #endif 568 563 END SUBROUTINE iom_set_rstw_active 564 569 565 570 566 SUBROUTINE iom_set_rst_context( ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/OBS/diaobs.F90
r9939 r10009 498 498 USE dom_oce, ONLY : gdept_n, gdept_1d ! Ocean space and time domain variables 499 499 USE phycst , ONLY : rday ! Physical constants 500 USE oce , ONLY : tsn, un, vn, ssh n! Ocean dynamics and tracers variables500 USE oce , ONLY : tsn, un, vn, ssh ! Ocean dynamics and tracers variables 501 501 USE phycst , ONLY : rday ! Physical constants 502 502 #if defined key_si3 … … 596 596 zsurfvar(:,:) = tsn(:,:,1,jp_tem) 597 597 CASE('sla') 598 zsurfvar(:,:) = ssh n(:,:)598 zsurfvar(:,:) = ssh(:,:,Nnn) 599 599 CASE('sss') 600 600 zsurfvar(:,:) = tsn(:,:,1,jp_sal) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/OBS/obs_read_altbias.F90
r9598 r10009 28 28 & e2t, & 29 29 & gphit 30 USE oce, ONLY : & ! Model variables31 & sshn32 30 USE obs_inter_h2d 33 31 USE obs_utils ! Various observation tools … … 35 33 36 34 IMPLICIT NONE 37 38 !! * Routine accessibility39 35 PRIVATE 40 36 41 PUBLIC obs_rea_altbias! Read the altimeter bias37 PUBLIC obs_rea_altbias ! Read the altimeter bias 42 38 43 39 !!---------------------------------------------------------------------- -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/OBS/obs_readmdt.F90
r9598 r10009 25 25 & tmask, tmask_i, e1e2t, gphit, glamt 26 26 USE obs_const, ONLY : obfillflt ! Fillvalue 27 USE oce , ONLY : ssh n! Model variables27 USE oce , ONLY : ssh ! Model variables 28 28 29 29 IMPLICIT NONE … … 216 216 zarea = zarea + zdxdy 217 217 zeta1 = zeta1 + mdt(ji,jj) * zdxdy 218 zeta2 = zeta2 + ssh n (ji,jj) * zdxdy218 zeta2 = zeta2 + ssh(ji,jj,Nnn) * zdxdy 219 219 END DO 220 220 END DO … … 241 241 IF(lwp) THEN 242 242 WRITE(numout,*) 243 WRITE(numout,*) ' obs_readmdt : rn_mdtcutoff 243 WRITE(numout,*) ' obs_readmdt : rn_mdtcutoff = ', rn_mdtcutoff 244 244 WRITE(numout,*) ' ----------- zcorr_mdt = ', zcorr_mdt 245 245 WRITE(numout,*) ' zcorr_bcketa = ', zcorr_bcketa 246 246 WRITE(numout,*) ' zcorr = ', zcorr 247 WRITE(numout,*) ' nn_msshc 247 WRITE(numout,*) ' nn_msshc = ', nn_msshc 248 248 ENDIF 249 249 -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/OBS/obs_sstbias.F90
r9023 r10009 27 27 & gphit, & 28 28 & glamt 29 USE oce, ONLY : & ! Model variables30 & sshn31 29 USE obs_inter_h2d 32 30 USE obs_utils ! Various observation tools -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/SBC/sbccpl.F90
r9939 r10009 32 32 USE cpl_oasis3 ! OASIS3 coupling 33 33 USE geo2ocean ! 34 USE oce , ONLY : tsn, un, vn, ssh n, ub, vb, sshb, fraqsr_1lev34 USE oce , ONLY : tsn, un, vn, ssh, ub, vb, fraqsr_1lev 35 35 USE ocealb ! 36 36 USE eosbn2 ! … … 2467 2467 IF( ln_apr_dyn ) THEN 2468 2468 IF( kt /= nit000 ) THEN 2469 ztmp1(:,:) = ssh b(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )2469 ztmp1(:,:) = ssh(:,:,Nbb) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 2470 2470 ELSE 2471 ztmp1(:,:) = ssh b(:,:)2471 ztmp1(:,:) = ssh(:,:,Nbb) 2472 2472 ENDIF 2473 2473 ELSE 2474 ztmp1(:,:) = ssh n(:,:)2474 ztmp1(:,:) = ssh(:,:,Nnn) 2475 2475 ENDIF 2476 2476 CALL cpl_snd( jps_wlev , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) … … 2482 2482 ! ! removed inverse barometer ssh when Patm 2483 2483 ! forcing is used (for sea-ice dynamics) 2484 IF( ln_apr_dyn ) THEN ; ztmp1(:,:) = ssh b(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )2485 ELSE ; ztmp1(:,:) = ssh n(:,:)2484 IF( ln_apr_dyn ) THEN ; ztmp1(:,:) = ssh(:,:,Nbb) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 2485 ELSE ; ztmp1(:,:) = ssh(:,:,Nnn) 2486 2486 ENDIF 2487 2487 CALL cpl_snd( jps_ssh , isec, RESHAPE ( ztmp1 , (/jpi,jpj,1/) ), info ) 2488 2489 2488 ENDIF 2490 2489 ! ! SSS -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/SBC/sbcfwb.F90
r9939 r10009 127 127 a_fwb_b = a_fwb ! mean sea level taking into account the ice+snow 128 128 ! sum over the global domain 129 a_fwb = glob_sum( e1e2t(:,:) * ( ssh n(:,:) + snwice_mass(:,:) * r1_rho0 ) )129 a_fwb = glob_sum( e1e2t(:,:) * ( ssh(:,:,Nnn) + snwice_mass(:,:) * r1_rho0 ) ) 130 130 a_fwb = a_fwb * 1.e+3 / ( area * rday * 365. ) ! convert in Kg/m3/s = mm/s 131 131 !!gm ! !!bug 365d year -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/SBC/sbcice_cice.F90
r10001 r10009 227 227 IF( .NOT.ln_rstart ) THEN 228 228 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 229 sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rho0 230 sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rho0 231 232 !!gm This should be put elsewhere.... (same remark for limsbc) 233 !!gm especially here it is assumed zstar coordinate, but it can be ztilde.... 234 IF( .NOT.ln_linssh ) THEN 229 ssh(:,:,Nnn) = ssh(:,:,Nnn) - snwice_mass(:,:) * r1_rho0 230 ssh(:,:,Nbb) = ssh(:,:,Nbb) - snwice_mass(:,:) * r1_rho0 231 ! 232 IF( .NOT.ln_linssh ) THEN ! modified the now and before vertical mesh and scale factors 235 233 ! 236 DO jk = 1,jpkm1 ! adjust initial vertical scale factors 237 e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + sshn(:,:) * r1_ht_0(:,:) ) 238 e3t_b(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + sshb(:,:) * r1_ht_0(:,:) ) 239 END DO 240 e3t_a(:,:,:) = e3t_b(:,:,:) 241 ! Reconstruction of all vertical scale factors at now and before time-steps 242 ! ============================================================================= 243 ! Horizontal scale factor interpolations 244 ! -------------------------------------- 245 CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 246 CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 247 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 248 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 249 CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 250 ! Vertical scale factor interpolations 251 ! ------------------------------------ 252 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 253 CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 254 CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 255 CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 256 CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 257 ! t- and w- points depth 258 ! ---------------------- 259 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 260 gdepw_n(:,:,1) = 0.0_wp 261 gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 262 DO jk = 2, jpk 263 gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk) 264 gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 265 gde3w_n(:,:,jk) = gdept_n(:,:,jk ) - sshn (:,:) 266 END DO 234 ! !* BEFORE fields : 235 CALL ssh2e3_before ! set: hu , hv , r1_hu, r1_hv 236 ! ! e3t, e3w, e3u, e3uw, e3v, e3vw 237 ! 238 ! !* NOW fields : 239 CALL ssh2e3_now ! set: ht , hu , hv , r1_hu, r1_hv 240 ! ! e3t, e3w, e3u, e3uw, e3v, e3vw, e3f 241 ! ! gdept_n, gdepw_n, gde3w_n 267 242 ENDIF 268 243 ENDIF … … 290 265 ENDIF 291 266 292 ztmp(:,:) =0.0267 ztmp(:,:) = 0._wp 293 268 294 269 ! Aggregate ice concentration already set in cice_sbc_out (or cice_sbc_init on -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/SBC/sbcssm.F90
r9939 r10009 75 75 sss_m(:,:) = zts(:,:,jp_sal) 76 76 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 77 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh n(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )78 ELSE ; ssh_m(:,:) = ssh n(:,:)77 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh(:,:,Nnn) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 78 ELSE ; ssh_m(:,:) = ssh(:,:,Nnn) 79 79 ENDIF 80 80 ! … … 98 98 sss_m(:,:) = zcoef * zts(:,:,jp_sal) 99 99 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 100 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( ssh n(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) )101 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:)100 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( ssh(:,:,Nnn) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 101 ELSE ; ssh_m(:,:) = zcoef * ssh(:,:,Nnn) 102 102 ENDIF 103 103 ! … … 126 126 sss_m(:,:) = sss_m(:,:) + zts(:,:,jp_sal) 127 127 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 128 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + ssh n(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )129 ELSE ; ssh_m(:,:) = ssh_m(:,:) + ssh n(:,:)128 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + ssh(:,:,Nnn) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 129 ELSE ; ssh_m(:,:) = ssh_m(:,:) + ssh(:,:,Nnn) 130 130 ENDIF 131 131 ! … … 247 247 ENDIF 248 248 sss_m(:,:) = tsn (:,:,1,jp_sal) 249 ssh_m(:,:) = ssh n (:,:)249 ssh_m(:,:) = ssh (:,:,Nnn) 250 250 e3t_m(:,:) = e3t_n(:,:,1) 251 251 frq_m(:,:) = 1._wp -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRA/trasbc.F90
r9939 r10009 125 125 DO ji = fs_2, fs_jpim1 ! vector opt. 126 126 IF ( ll_wd ) THEN ! If near WAD point limit the flux for now 127 IF ( ssh n(ji,jj) + ht_0(ji,jj) > 2._wp * rn_wdmin1 ) THEN127 IF ( ssh(ji,jj,Nnn) + ht_0(ji,jj) > 2._wp * rn_wdmin1 ) THEN 128 128 sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj) ! non solar heat flux 129 ELSE IF ( ssh n(ji,jj) + ht_0(ji,jj) > rn_wdmin1 ) THEN129 ELSE IF ( ssh(ji,jj,Nnn) + ht_0(ji,jj) > rn_wdmin1 ) THEN 130 130 sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj) & 131 & * tanh ( 5._wp * ( ( sshn(ji,jj) + ht_0(ji,jj) -rn_wdmin1 ) * r_rn_wdmin1 ) )131 & * tanh ( 5._wp * ( ( ssh(ji,jj,Nnn) + ht_0(ji,jj) - rn_wdmin1 ) * r_rn_wdmin1 ) ) 132 132 ELSE 133 133 sbc_tsc(ji,jj,jp_tem) = 0._wp -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/TRD/trdpen.F90
r9598 r10009 114 114 !IF( ln_linssh ) THEN ! cst volume : ssh term (otherwise include in e3t variation) 115 115 ! ALLOCATE( z2d(jpi,jpj) ) 116 ! z2d(:,:) = ( ssh a(:,:) - sshb(:,:) )&116 ! z2d(:,:) = ( ssh(:,:,Naa) - ssh(:,:,Nbb) ) & 117 117 ! & * ( dPE_dt(:,:,1) * tsn(:,:,1,jp_tem) & 118 118 ! & + dPE_ds(:,:,1) * tsn(:,:,1,jp_sal) ) / ( e3t_n(:,:,1) * pdt ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/nemogcm.F90
r10001 r10009 424 424 ! 425 425 ENDIF 426 ! ! Domain decomposition 427 CALL mpp_init ! MPP 428 429 ! Now we know the dimensions of the grid and numout has been set: we can allocate arrays 430 CALL nemo_alloc() 426 427 CALL mpp_init ! MPP domain decomposition 428 429 CALL dom_nam ! set the time (Nt) by reading namelist namrun and namdom 430 431 ! ! allocate arrays (here, as we know the dimensions of both 432 ! ! the grid and number of time-level used, and 433 CALL nemo_alloc() ! numout has been set: we can allocate arrays) 431 434 432 435 ! !-------------------------------! -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/oce.F90
r10001 r10009 34 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ub_b , un_b , ua_b !: Barotropic velocities at u-point [m/s] 35 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vb_b , vn_b , va_b !: Barotropic velocities at v-point [m/s] 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,: ) :: sshb , sshn , ssha !: sea surface height at t-point[m]36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ssh !: sea surface height at t-point [m] 37 37 38 38 !!gm?? REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ssh , sshu , sshv !: sea surface height at t-, u- v-points [m] … … 93 93 & rhd (jpi,jpj,jpk) , rhop (jpi,jpj,jpk) , STAT=ierr(1) ) 94 94 ! 95 ALLOCATE( sshb (jpi,jpj) , sshn (jpi,jpj) , ssha(jpi,jpj) , & 96 & ub_b(jpi,jpj) , un_b(jpi,jpj) , ua_b(jpi,jpj) , & 95 ALLOCATE( ub_b(jpi,jpj) , un_b(jpi,jpj) , ua_b(jpi,jpj) , & 97 96 & vb_b(jpi,jpj) , vn_b(jpi,jpj) , va_b(jpi,jpj) , & 98 97 & spgu (jpi,jpj) , spgv(jpi,jpj) , & … … 102 101 & grui(jpi,jpj) , grvi(jpi,jpj) , & 103 102 & riceload(jpi,jpj) , STAT=ierr(2) ) 103 ! 104 105 106 ALLOCATE( ssh(jpi,jpj,Nt) , STAT=ierr(5) ) 107 108 104 109 ! 105 110 ALLOCATE( fraqsr_1lev(jpi,jpj) , STAT=ierr(3) ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/par_oce.F90
r10001 r10009 13 13 PUBLIC 14 14 15 16 !!17 INTEGER, PUBLIC :: Nnn, Np1, Nm1 ! =now, before, after18 19 INTEGER, PUBLIC :: Nb, Nn, Na ! before, now, after index20 21 22 23 !!----------------------------------------------------------------------24 !! namcfg namelist parameters25 !!----------------------------------------------------------------------26 LOGICAL :: ln_read_cfg !: (=T) read the domain configuration file or (=F) not27 CHARACTER(lc) :: cn_domcfg !: filename the configuration file to be read28 LOGICAL :: ln_write_cfg !: (=T) create the domain configuration file29 CHARACTER(lc) :: cn_domcfg_out !: filename the configuration file to be read30 !31 LOGICAL :: ln_use_jattr !: input file read offset32 ! ! Use file global attribute: open_ocean_jstart to determine start j-row33 ! ! when reading input from those netcdf files that have the34 ! ! attribute defined. This is designed to enable input files associated35 ! ! with the extended grids used in the under ice shelf configurations to36 ! ! be used without redundant rows when the ice shelves are not in use.37 !38 39 15 !!--------------------------------------------------------------------- 40 16 !! Domain Matrix size 41 17 !!--------------------------------------------------------------------- 42 ! configuration name & resolution (required only in ORCA family case)43 CHARACTER(lc) :: cn_cfg !: name of the configuration44 INTEGER :: nn_cfg !: resolution of the configuration18 ! time dimension and index 19 INTEGER, PUBLIC :: Nt !: number of time-level used 20 INTEGER, PUBLIC :: Nbb, Nnn, Naa !: before, now, after time-level indices 45 21 46 22 ! global domain size !!! * total computational domain * … … 48 24 INTEGER :: jpjglo !: 2nd - - --> j-direction 49 25 INTEGER :: jpkglo !: 3nd - - --> k levels 26 !!gm to be used in futur (?): 27 !! INTEGER, PUBLIC :: Niglo , Njglo , Nkglo !: global domain size 50 28 51 29 ! global domain size for AGRIF !!! * total AGRIF computational domain * … … 65 43 INTEGER, PUBLIC :: jpimax! = ( jpiglo-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls !: maximum jpi 66 44 INTEGER, PUBLIC :: jpjmax! = ( jpjglo-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls !: maximum jpj 45 !!gm to be used in futur (?): 46 !! INTEGER, PUBLIC :: Ni , Nj , Nk !: local domain size 67 47 68 48 !!--------------------------------------------------------------------- … … 85 65 86 66 !!---------------------------------------------------------------------- 67 !! namcfg namelist parameters 68 !!---------------------------------------------------------------------- 69 LOGICAL :: ln_read_cfg !: (=T) read the domain configuration file or (=F) not 70 CHARACTER(lc) :: cn_domcfg !: filename the configuration file to be read 71 LOGICAL :: ln_write_cfg !: (=T) create the domain configuration file 72 CHARACTER(lc) :: cn_domcfg_out !: filename the configuration file to be read 73 LOGICAL :: ln_use_jattr !: input file read offset 74 ! ! Use file global attribute: open_ocean_jstart to determine start j-row 75 ! ! when reading input from those netcdf files that have the 76 ! ! attribute defined. This is designed to enable input files associated 77 ! ! with the extended grids used in the under ice shelf configurations to 78 ! ! be used without redundant rows when the ice shelves are not in use. 79 80 ! configuration name & resolution (required only in ORCA family case) 81 CHARACTER(lc) :: cn_cfg !: name of the configuration 82 INTEGER :: nn_cfg !: resolution of the configuration 83 84 !!---------------------------------------------------------------------- 87 85 !! NEMO/OCE 4.0 , NEMO Consortium (2018) 88 86 !! $Id$ -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/stpctl.F90
r9808 r10009 102 102 ! !== test of extrema ==! 103 103 IF( ll_wd ) THEN 104 zmax(1) = MAXVAL( ABS( ssh n(:,:) + ssh_ref*tmask(:,:,1) ) ) ! ssh max104 zmax(1) = MAXVAL( ABS( ssh(:,:,Nnn) + ssh_ref*tmask(:,:,1) ) ) ! ssh max 105 105 ELSE 106 zmax(1) = MAXVAL( ABS( ssh n(:,:) ) ) ! ssh max106 zmax(1) = MAXVAL( ABS( ssh(:,:,Nnn) ) ) ! ssh max 107 107 ENDIF 108 108 zmax(2) = MAXVAL( ABS( un(:,:,:) ) ) ! velocity max (zonal only) … … 129 129 & ISNAN( zmax(1) + zmax(2) + zmax(3) ) ) THEN ! NaN encounter in the tests 130 130 IF( lk_mpp ) THEN 131 CALL mpp_maxloc( ABS(ssh n), ssmask(:,:) , zzz, iih , ijh )131 CALL mpp_maxloc( ABS(ssh(:,:,Nnn)), ssmask(:,:) , zzz, iih , ijh ) 132 132 CALL mpp_maxloc( ABS(un) , umask (:,:,:), zzz, iiu , iju , iku ) 133 133 CALL mpp_minloc( tsn(:,:,:,jp_sal), tmask (:,:,:), zzz, iis1, ijs1, iks1 ) 134 134 CALL mpp_maxloc( tsn(:,:,:,jp_sal), tmask (:,:,:), zzz, iis2, ijs2, iks2 ) 135 135 ELSE 136 iloch = MINLOC( ABS( ssh n(:,:) ))137 ilocu = MAXLOC( ABS( un (:,:,:) ))136 iloch = MINLOC( ABS( ssh(:,:,Nnn) ) ) 137 ilocu = MAXLOC( ABS( un (:,:,:) ) ) 138 138 ilocs1 = MINLOC( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) 139 139 ilocs2 = MAXLOC( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OFF/dtadyn.F90
r9939 r10009 142 142 emp_b (:,:) = sf_dyn(jf_empb)%fnow(:,:,1) * tmask(:,:,1) ! E-P 143 143 zemp (:,:) = ( 0.5_wp * ( emp(:,:) + emp_b(:,:) ) + rnf(:,:) + fwbcorr ) * tmask(:,:,1) 144 CALL dta_dyn_ssh( kt, zhdivtr, sshb, zemp, ssha, e3t_a(:,:,:) ) != ssh, vertical scale factor & vertical transport 144 CALL dta_dyn_ssh( kt, zhdivtr, ssh(:,:,Nbb), zemp, ssh(:,:,Naa) ) != ssh, vertical scale factor & vertical transport 145 !! 146 !!gm BUG ? ssh after computed but no swap so, not used in the restart.... 147 !! 145 148 DEALLOCATE( zemp , zhdivtr ) 146 149 ! Write in the tracer restart file … … 148 151 IF( lrst_trc ) THEN 149 152 IF(lwp) WRITE(numout,*) 150 IF(lwp) WRITE(numout,*) 'dta_dyn _ssh: ssh field written in tracer restart file at it= ', kt,' date= ', ndastp151 IF(lwp) WRITE(numout,*) '~~~~~~~ ~~~~'152 CALL iom_rstput( kt, nitrst, numrtw, 'sshn', ssh a)153 CALL iom_rstput( kt, nitrst, numrtw, 'sshb', ssh n)153 IF(lwp) WRITE(numout,*) 'dta_dyn : ssh field written in tracer restart file at it= ', kt,' date= ', ndastp 154 IF(lwp) WRITE(numout,*) '~~~~~~~' 155 CALL iom_rstput( kt, nitrst, numrtw, 'sshn', ssh(:,:,Nnn) ) 156 CALL iom_rstput( kt, nitrst, numrtw, 'sshb', ssh(:,:,Nbb) ) 154 157 ENDIF 155 158 ENDIF … … 313 316 ! 314 317 IF( .NOT.ln_linssh ) THEN 315 IF( .NOT. sf_dyn(jf_uwd)%ln_clim .AND. ln_rsttr .AND. & ! Restart: read in restart file 316 iom_varid( numrtr, 'sshn', ldstop = .FALSE. ) > 0 ) THEN 317 IF(lwp) WRITE(numout,*) ' sshn forcing fields read in the restart file for initialisation' 318 CALL iom_get( numrtr, jpdom_autoglo, 'sshn', sshn(:,:) ) 319 CALL iom_get( numrtr, jpdom_autoglo, 'sshb', sshb(:,:) ) 320 ELSE 321 IF(lwp) WRITE(numout,*) ' sshn forcing fields read in the restart file for initialisation' 322 CALL iom_open( 'restart', inum ) 323 CALL iom_get( inum, jpdom_autoglo, 'sshn', sshn(:,:) ) 324 CALL iom_get( inum, jpdom_autoglo, 'sshb', sshb(:,:) ) 325 CALL iom_close( inum ) ! close file 326 ENDIF 327 ! 328 DO jk = 1, jpkm1 329 e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + sshn(:,:) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1) ) ) 330 ENDDO 331 e3t_a(:,:,jpk) = e3t_0(:,:,jpk) 332 333 ! Horizontal scale factor interpolations 334 ! -------------------------------------- 335 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 336 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 337 338 ! Vertical scale factor interpolations 339 ! ------------------------------------ 340 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n(:,:,:), 'W' ) 341 342 e3t_b(:,:,:) = e3t_n(:,:,:) 343 e3u_b(:,:,:) = e3u_n(:,:,:) 344 e3v_b(:,:,:) = e3v_n(:,:,:) 345 346 ! t- and w- points depth 347 ! ---------------------- 348 gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 349 gdepw_n(:,:,1) = 0.0_wp 350 351 DO jk = 2, jpk 352 DO jj = 1,jpj 353 DO ji = 1,jpi 354 ! zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) ! 0 everywhere 355 ! tmask = wmask, ie everywhere expect at jk = mikt 356 ! 1 for jk = 357 ! mikt 358 zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 359 gdepw_n(ji,jj,jk) = gdepw_n(ji,jj,jk-1) + e3t_n(ji,jj,jk-1) 360 gdept_n(ji,jj,jk) = zcoef * ( gdepw_n(ji,jj,jk ) + 0.5 * e3w_n(ji,jj,jk)) & 361 & + (1-zcoef) * ( gdept_n(ji,jj,jk-1) + e3w_n(ji,jj,jk)) 362 END DO 363 END DO 364 END DO 365 366 gdept_b(:,:,:) = gdept_n(:,:,:) 367 gdepw_b(:,:,:) = gdepw_n(:,:,:) 368 ! 318 IF( .NOT. sf_dyn(jf_uwd)%ln_clim .AND. ln_rsttr .AND. & ! Restart: read in restart file 319 iom_varid( numrtr, 'sshn', ldstop = .FALSE. ) > 0 ) THEN 320 IF(lwp) WRITE(numout,*) ' ssh forcing fields read in the restart file for initialisation' 321 CALL iom_get( numrtr, jpdom_autoglo, 'sshn', ssh(:,:,Nnn) ) 322 CALL iom_get( numrtr, jpdom_autoglo, 'sshb', ssh(:,:,Nbb) ) 323 ELSE 324 IF(lwp) WRITE(numout,*) ' ssh forcing fields read in the restart file for initialisation' 325 CALL iom_open( 'restart', inum ) 326 CALL iom_get( inum, jpdom_autoglo, 'sshn', ssh(:,:,Nnn) ) 327 CALL iom_get( inum, jpdom_autoglo, 'sshb', ssh(:,:,Nbb) ) 328 CALL iom_close( inum ) ! close file 329 ENDIF 330 ! 331 ! !== Set of all other vertical mesh fields ==! (now and before) 332 ! 333 ! !* BEFORE fields : 334 CALL ssh2e3_before ! set: hu , hv , r1_hu, r1_hv 335 ! ! e3t, e3w, e3u, e3uw, e3v, e3vw (from 1 to jpkm1) 336 ! 337 ! ! set jpk level one to the e3._0 values 338 e3t_b(:,:,jpk) = e3t_0(:,:,jpk) ; e3u_b(:,:,jpk) = e3w_0(:,:,jpk) ; e3v_b(:,:,jpk) = e3v_0(:,:,jpk) 339 e3w_b(:,:,jpk) = e3w_0(:,:,jpk) ; e3uw_b(:,:,jpk) = e3uw_0(:,:,jpk) ; e3vw_b(:,:,jpk) = e3vw_0(:,:,jpk) 340 ! 341 ! !* NOW fields : 342 CALL ssh2e3_now ! set: ht , hu , hv , r1_hu, r1_hv 343 ! ! e3t, e3w, e3u, e3uw, e3v, e3vw, e3f (from 1 to jpkm1) 344 ! ! gdept_n, gdepw_n, gde3w_n 345 !!gm issue? gdept_n, gdepw_n, gde3w_n never defined at jpk 346 ! 347 ! ! set one for all last level to the e3._0 value 348 e3t_n(:,:,jpk) = e3t_0(:,:,jpk) ; e3u_n(:,:,jpk) = e3w_0(:,:,jpk) ; e3v_n(:,:,jpk) = e3v_0(:,:,jpk) 349 e3w_n(:,:,jpk) = e3w_0(:,:,jpk) ; e3uw_n(:,:,jpk) = e3uw_0(:,:,jpk) ; e3vw_n(:,:,jpk) = e3vw_0(:,:,jpk) 350 e3f_n(:,:,jpk) = e3f_0(:,:,jpk) 351 ! 352 ! !* AFTER fields : (last level for OPA, 3D required for AGRIF initialisation) 353 e3t_a(:,:,:) = e3t_n(:,:,:) ; e3u_a(:,:,:) = e3u_n(:,:,:) ; e3v_a(:,:,:) = e3v_n(:,:,:) 354 ! 369 355 ENDIF 370 356 ! … … 430 416 INTEGER :: ji, jj, jk 431 417 REAL(wp) :: zcoef 418 REAL(wp), DIMENSION(jpi,jpj) :: zssht_h, zsshu_h, zsshv_h 432 419 !!--------------------------------------------------------------------- 433 420 … … 438 425 ENDIF 439 426 440 sshb(:,:) = sshn(:,:) + rn_atfp * ( sshb(:,:) - 2 * sshn(:,:) + ssha(:,:) ) ! before <-- now filtered 441 sshn(:,:) = ssha(:,:) 442 443 e3t_n(:,:,:) = e3t_a(:,:,:) 427 ssh(:,:,Nbb) = ssh(:,:,Nnn) + rn_atfp * ( ssh(:,:,Nbb) - 2 * ssh(:,:,Nnn) + ssh(:,:,Naa) ) ! before <-- now filtered 428 ssh(:,:,Nnn) = ssh(:,:,Naa) 444 429 445 430 ! Reconstruction of all vertical scale factors at now and before time steps 446 431 ! ============================================================================= 447 448 ! Horizontal scale factor interpolations 449 ! -------------------------------------- 450 CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 451 CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 452 453 ! Vertical scale factor interpolations 454 ! ------------------------------------ 455 CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W' ) 456 432 ! 433 ! !== now ssh ==! (u- and v-points) 434 DO jj = 2, jpjm1 ; DO ji = 2, jpim1 435 zsshu_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji+1,jj,Nnn) ) * ssumask(ji,jj) 436 zsshv_h(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji,jj+1,Nnn) ) * ssvmask(ji,jj) 437 END DO ; END DO 438 CALL lbc_lnk_multi( zsshu_h(:,:), 'U', 1._wp , zsshv_h(:,:), 'V', 1._wp ) 439 ! 440 ! !== after depths and its inverse ==! 441 hu_n(:,:) = hu_0(:,:) + zsshu_h(:,:) 442 hv_n(:,:) = hv_0(:,:) + zsshv_h(:,:) 443 r1_hu_n(:,:) = ssumask(:,:) / ( hu_n(:,:) + 1._wp - ssumask(:,:) ) 444 r1_hv_n(:,:) = ssvmask(:,:) / ( hv_n(:,:) + 1._wp - ssvmask(:,:) ) 445 ! 446 ! !== now scale factors ==! (e3t , e3u , e3v) 447 zssht_h(:,:) = ssh (:,:,Nnn) * r1_ht_0(:,:) ! t-point 448 zsshu_h(:,:) = zsshu_h(:,:) * r1_hu_0(:,:) ! u-point 449 zsshv_h(:,:) = zsshv_h(:,:) * r1_hv_0(:,:) ! v-point 450 DO jk = 1, jpkm1 451 e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * tmask(:,:,jk) ) 452 e3u_n(:,:,jk) = e3u_0(:,:,jk) * ( 1._wp + zsshu_h(:,:) * umask(:,:,jk) ) 453 e3v_n(:,:,jk) = e3v_0(:,:,jk) * ( 1._wp + zsshv_h(:,:) * vmask(:,:,jk) ) 454 e3w_n(:,:,jk) = e3w_0(:,:,jk) * ( 1._wp + zssht_h(:,:) * MAX( tmask(:,:,jk) , tmask(:,:,jk+1) ) 455 END DO 456 ! 457 457 e3t_b(:,:,:) = e3t_n(:,:,:) 458 458 e3u_b(:,:,:) = e3u_n(:,:,:) … … 475 475 END DO 476 476 ! 477 zssht_h(:,:) = 1._wp + zssht_h(:,:) ! t-point 478 ! 479 IF( ln_isfcav ) THEN ! ISF cavities : ssh scaling not applied over the iceshelf thickness 480 DO jk = 1, jpkm1 481 gdept_n(:,:,jk) = ( gdept_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 482 gdepw_n(:,:,jk) = ( gdepw_0(:,:,jk) - risfdep(:,:) ) * zssht_h(:,:) + risfdep(:,:) 483 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh (:,:,Nnn) 484 END DO 485 ELSE ! no ISF cavities 486 DO jk = 1, jpkm1 487 gdept_n(:,:,jk) = gdept_0(:,:,jk) * zssht_h(:,:) 488 gdepw_n(:,:,jk) = gdepw_0(:,:,jk) * zssht_h(:,:) 489 gde3w_n(:,:,jk) = gdept_n(:,:,jk) - ssh (:,:,Nnn) 490 END DO 491 ENDIF 492 ! 477 493 gdept_b(:,:,:) = gdept_n(:,:,:) 478 494 gdepw_b(:,:,:) = gdepw_n(:,:,:) … … 481 497 482 498 483 SUBROUTINE dta_dyn_ssh( kt, phdivtr, psshb, pemp, pssha , pe3ta)499 SUBROUTINE dta_dyn_ssh( kt, phdivtr, psshb, pemp, pssha ) 484 500 !!---------------------------------------------------------------------- 485 501 !! *** ROUTINE dta_dyn_wzv *** … … 502 518 !! Reference : Leclair, M., and G. Madec, 2009, Ocean Modelling. 503 519 !!---------------------------------------------------------------------- 504 INTEGER, INTENT(in) :: kt ! time-step505 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: phdivtr ! horizontal divergence transport506 REAL(wp), DIMENSION(jpi,jpj) , OPTIONAL, INTENT(in ) :: psshb ! now ssh507 REAL(wp), DIMENSION(jpi,jpj) , OPTIONAL, INTENT(in ) :: pemp ! evaporation minus precipitation520 INTEGER, INTENT(in ) :: kt ! time-step 521 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: phdivtr ! horizontal divergence transport 522 REAL(wp), DIMENSION(jpi,jpj) , OPTIONAL, INTENT(in ) :: psshb ! now ssh 523 REAL(wp), DIMENSION(jpi,jpj) , OPTIONAL, INTENT(in ) :: pemp ! evaporation minus precipitation 508 524 REAL(wp), DIMENSION(jpi,jpj) , OPTIONAL, INTENT(inout) :: pssha ! after ssh 509 REAL(wp), DIMENSION(jpi,jpj,jpk), OPTIONAL, INTENT(out) :: pe3ta ! after vertical scale factor510 525 ! 511 526 INTEGER :: jk … … 518 533 END DO 519 534 ! ! Sea surface elevation time-stepping 520 pssha(:,:) = ( psshb(:,:) - rDt * ( r1_rho0 * pemp(:,:) + zhdiv(:,:) ) ) * ssmask(:,:) 521 ! ! 522 ! ! After acale factors at t-points ( z_star coordinate ) 523 DO jk = 1, jpkm1 524 pe3ta(:,:,jk) = e3t_0(:,:,jk) * ( 1._wp + pssha(:,:) * tmask(:,:,1) / ( ht_0(:,:) + 1.0 - tmask(:,:,1) ) ) 525 END DO 535 pssha(:,:) = ( psshb(:,:) - rDt * ( r1_rho0 * pemp(:,:) + zhdiv(:,:) ) ) * ssmask(:,:) 526 536 ! 527 537 END SUBROUTINE dta_dyn_ssh -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OFF/nemogcm.F90
r9939 r10009 265 265 ! 266 266 ENDIF 267 ! ! Domain decomposition 268 CALL mpp_init ! MPP 269 270 ! Now we know the dimensions of the grid and numout has been set: we can allocate arrays 271 CALL nemo_alloc() 267 CALL mpp_init ! MPP domain decomposition 268 269 CALL dom_nam ! set the time (Nt) by reading namelist namrun and namdom 270 271 ! ! allocate arrays (here, as we know the dimensions of both 272 ! ! the grid and number of time-level used, and 273 CALL nemo_alloc() ! numout has been set: we can allocate arrays) 272 274 273 275 ! !-------------------------------! -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/SAO/sao_read.F90
r9598 r10009 9 9 USE par_kind, ONLY: lc 10 10 USE netcdf 11 USE oce, ONLY: tsn, ssh n11 USE oce, ONLY: tsn, ssh 12 12 USE dom_oce, ONLY: nlci, nlcj, nimpp, njmpp, tmask 13 13 USE par_oce, ONLY: jpi, jpj, jpk … … 77 77 78 78 IF (TRIM(filename) == 'nofile') THEN 79 tsn 80 ssh n(:,:)= fbrmdi79 tsn(:,:,:,:) = fbrmdi 80 ssh(:,:,Nnn) = fbrmdi 81 81 ELSE 82 82 WRITE(numout,*) "Opening :", TRIM(filename) … … 133 133 WHERE(temp_sshn(:,:) == fill_val) temp_sshn(:,:) = fbrmdi 134 134 135 ! Initialise tsn, ssh nto fbrmdi135 ! Initialise tsn, ssh to fbrmdi 136 136 tsn(:,:,:,:) = fbrmdi 137 ssh n(:,:) = fbrmdi137 ssh(:,:,Nnn) = fbrmdi 138 138 139 139 ! Mask out missing data index 140 140 tsn(1:nlci,1:nlcj,1:jpk,1) = temp_tn(:,:,:) * tmask(1:nlci,1:nlcj,1:jpk) 141 141 tsn(1:nlci,1:nlcj,1:jpk,2) = temp_sn(:,:,:) * tmask(1:nlci,1:nlcj,1:jpk) 142 ssh n(1:nlci,1:nlcj)= temp_sshn(:,:) * tmask(1:nlci,1:nlcj,1)142 ssh(1:nlci,1:nlcj,Nnn) = temp_sshn(:,:) * tmask(1:nlci,1:nlcj,1) 143 143 144 ! Remove halo from tmask, tsn, ssh nto prevent double obs counting144 ! Remove halo from tmask, tsn, ssh to prevent double obs counting 145 145 IF (jpi > nlci) THEN 146 146 tmask(nlci+1:,:,:) = 0 147 147 tsn(nlci+1:,:,:,1) = 0 148 148 tsn(nlci+1:,:,:,2) = 0 149 ssh n(nlci+1:,:) = 0149 ssh(nlci+1:,:,Nnn) = 0 150 150 END IF 151 151 IF (jpj > nlcj) THEN … … 153 153 tsn(:,nlcj+1:,:,1) = 0 154 154 tsn(:,nlcj+1:,:,2) = 0 155 ssh n(:,nlcj+1:) = 0155 ssh(:,nlcj+1:,Nnn) = 0 156 156 END IF 157 157 … … 161 161 ! Mark all as missing data 162 162 tsn(:,:,:,:) = fbrmdi 163 ssh n(:,:) = fbrmdi163 ssh(:,:,Nnn) = fbrmdi 164 164 ENDIF 165 165 ! Close netcdf file -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/TOP/oce_trc.F90
r9939 r10009 8 8 !!---------------------------------------------------------------------- 9 9 ! !* Domain size * 10 USE par_oce , ONLY : jpi => jpi !: first dimension of grid --> i 11 USE par_oce , ONLY : jpj => jpj !: second dimension of grid --> j 12 USE par_oce , ONLY : jpk => jpk !: number of levels 13 USE par_oce , ONLY : jpim1 => jpim1 !: jpi - 1 14 USE par_oce , ONLY : jpjm1 => jpjm1 !: jpj - 1 15 USE par_oce , ONLY : jpkm1 => jpkm1 !: jpk - 1 16 USE par_oce , ONLY : jpij => jpij !: jpi x jpj 17 USE par_oce , ONLY : jp_tem => jp_tem !: indice for temperature 18 USE par_oce , ONLY : jp_sal => jp_sal !: indice for salinity 10 USE par_oce, ONLY : jpi => jpi !: first dimension of grid --> i 11 USE par_oce, ONLY : jpj => jpj !: second dimension of grid --> j 12 USE par_oce, ONLY : jpk => jpk !: number of levels 13 USE par_oce, ONLY : jpim1 => jpim1 !: jpi - 1 14 USE par_oce, ONLY : jpjm1 => jpjm1 !: jpj - 1 15 USE par_oce, ONLY : jpkm1 => jpkm1 !: jpk - 1 16 USE par_oce, ONLY : jpij => jpij !: jpi x jpj 17 USE par_oce, ONLY : jp_tem => jp_tem !: indice for temperature 18 USE par_oce, ONLY : jp_sal => jp_sal !: indice for salinity 19 20 USE par_oce, ONLY : Nt => Nt !: number of time-levels 21 USE par_oce, ONLY : Nbb => Nbb !: index for before time-level 22 USE par_oce, ONLY : Nnn => Nnn !: index for now - - 23 USE par_oce, ONLY : Naa => Naa !: index for after - - 19 24 20 25 USE in_out_manager !* IO manager * … … 42 47 USE oce , ONLY : rhd => rhd !: in situ density anomalie rhd=(rho-rho0)/rho0 (no units) 43 48 USE oce , ONLY : hdivn => hdivn !: horizontal divergence (1/s) 44 USE oce , ONLY : sshn => sshn !: sea surface height at t-point [m] 45 USE oce , ONLY : sshb => sshb !: sea surface height at t-point [m] 46 USE oce , ONLY : ssha => ssha !: sea surface height at t-point [m] 49 USE oce , ONLY : ssh => ssh !: sea surface height at t-point [m] 47 50 USE oce , ONLY : rab_n => rab_n !: local thermal/haline expension ratio at T-points 48 51 … … 94 97 USE zdfmxl , ONLY : hmlpt => hmlpt !: mixed layer depth at t-points (m) 95 98 99 !!====================================================================== 96 100 END MODULE oce_trc -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/TOP/trcsub.F90
r9939 r10009 104 104 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 105 105 ! 106 sshb_hold (:,:) = ssh n (:,:)106 sshb_hold (:,:) = ssh (:,:,Nnn) 107 107 emp_b_hold (:,:) = emp_b (:,:) 108 108 ! … … 136 136 ENDIF 137 137 ! 138 sshn_tm (:,:) = sshn_tm (:,:) + ssh n (:,:)138 sshn_tm (:,:) = sshn_tm (:,:) + ssh (:,:,Nnn) 139 139 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) 140 140 h_rnf_tm (:,:) = h_rnf_tm (:,:) + h_rnf (:,:) … … 168 168 ENDIF 169 169 ENDIF 170 sshn_temp (:,:) = ssh n (:,:)171 sshb_temp (:,:) = ssh b (:,:)172 ssha_temp (:,:) = ssh a (:,:)170 sshn_temp (:,:) = ssh (:,:,Nnn) 171 sshb_temp (:,:) = ssh (:,:,Nbb) 172 ssha_temp (:,:) = ssh (:,:,Naa) 173 173 rnf_temp (:,:) = rnf (:,:) 174 174 h_rnf_temp (:,:) = h_rnf (:,:) … … 206 206 ENDIF 207 207 ENDIF 208 sshn_tm (:,:) = sshn_tm (:,:) + ssh n (:,:)209 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) 210 h_rnf_tm (:,:) = h_rnf_tm (:,:) + h_rnf (:,:) 208 sshn_tm (:,:) = sshn_tm (:,:) + ssh (:,:,Nnn) 209 rnf_tm (:,:) = rnf_tm (:,:) + rnf (:,:) 210 h_rnf_tm (:,:) = h_rnf_tm (:,:) + h_rnf (:,:) 211 211 hmld_tm (:,:) = hmld_tm (:,:) + hmld (:,:) 212 212 fr_i_tm (:,:) = fr_i_tm (:,:) + fr_i (:,:) … … 216 216 wndm_tm (:,:) = wndm_tm (:,:) + wndm (:,:) 217 217 ! 218 ssh n (:,:)= sshn_tm (:,:) * r1_ndttrcp1219 ssh b (:,:)= sshb_hold (:,:)218 ssh (:,:,Nnn) = sshn_tm (:,:) * r1_ndttrcp1 219 ssh (:,:,Nbb) = sshb_hold (:,:) 220 220 rnf (:,:) = rnf_tm (:,:) * r1_ndttrcp1 221 221 h_rnf (:,:) = h_rnf_tm (:,:) * r1_ndttrcp1 … … 324 324 vslp_tm (:,:,:) = vslp (:,:,:) 325 325 ENDIF 326 sshn_tm (:,:) = ssh n (:,:)326 sshn_tm (:,:) = ssh (:,:,Nnn) 327 327 rnf_tm (:,:) = rnf (:,:) 328 328 h_rnf_tm (:,:) = h_rnf (:,:) … … 377 377 vslp (:,:,:)= vslp_temp (:,:,:) 378 378 ENDIF 379 ssh n (:,:)= sshn_temp (:,:)380 ssh b (:,:)= sshb_temp (:,:)381 ssh a (:,:)= ssha_temp (:,:)379 ssh (:,:,Nnn) = sshn_temp (:,:) 380 ssh (:,:,Nbb) = sshb_temp (:,:) 381 ssh (:,:,Naa) = ssha_temp (:,:) 382 382 rnf (:,:) = rnf_temp (:,:) 383 383 h_rnf (:,:) = h_rnf_temp (:,:) … … 417 417 ENDIF 418 418 ! 419 sshb_hold (:,:) = ssh n (:,:)419 sshb_hold (:,:) = ssh (:,:,Nnn) 420 420 emp_b_hold (:,:) = emp (:,:) 421 sshn_tm (:,:) = ssh n (:,:)421 sshn_tm (:,:) = ssh (:,:,Nnn) 422 422 rnf_tm (:,:) = rnf (:,:) 423 423 h_rnf_tm (:,:) = h_rnf (:,:) … … 449 449 !! *** ROUTINE trc_sub_ssh *** 450 450 !! 451 !! ** Purpose : compute the after ssh (ssha), the now vertical velocity451 !! ** Purpose : compute the after ssh, the now vertical velocity 452 452 !! and update the now vertical coordinate (ln_linssh=F). 453 453 !! … … 497 497 ! because emp_b field is initialized with the vlaues of emp field. Hence, 0.5 * ( emp + emp_b ) = emp 498 498 z1_2rho0 = 0.5 * r1_rho0 499 ssh a(:,:) = ( sshb(:,:) - rDt * ( z1_2rho0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * tmask(:,:,1)499 ssh(:,:,Naa) = ( ssh(:,:,Nbb) - rDt * ( z1_2rho0 * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:) 500 500 501 501 IF( .NOT.ln_dynspg_ts ) THEN … … 506 506 #endif 507 507 IF( ln_bdy ) THEN 508 ssh a(:,:) = ssha(:,:) * bdytmask(:,:)509 CALL lbc_lnk( ssh a, 'T', 1. )508 ssh(:,:,Naa) = ssh(:,:,Naa) * bdytmask(:,:) 509 CALL lbc_lnk( ssh(:,:,Naa), 'T', 1. ) 510 510 ENDIF 511 511 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.