- Timestamp:
- 2021-05-06T17:42:46+02:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r14318_RK3_stage1/src
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_oce_interp.F90
r14227 r14800 156 156 157 157 158 SUBROUTINE Agrif_tra 158 SUBROUTINE Agrif_tra( kt, kstg ) 159 159 !!---------------------------------------------------------------------- 160 160 !! *** ROUTINE Agrif_tra *** 161 161 !!---------------------------------------------------------------------- 162 INTEGER, INTENT(in) :: kt 163 INTEGER, OPTIONAL, INTENT(in) :: kstg 164 REAL(wp) :: ztindex 162 165 ! 163 166 IF( Agrif_Root() ) RETURN 167 ! 168 ! Set time index depending on stage in case of RK3 time stepping: 169 IF ( PRESENT( kstg ) ) THEN 170 ztindex = REAL(Agrif_Nbstepint(), wp) 171 IF ( kstg == 1 ) THEN 172 ztindex = ztindex + 1._wp / 3._wp 173 ELSEIF ( kstg == 2 ) THEN 174 ztindex = ztindex + 1._wp / 2._wp 175 ELSEIF ( kstg == 3 ) THEN 176 ztindex = ztindex + 1._wp 177 ENDIF 178 ztindex = ztindex / Agrif_Rhot() 179 ELSE 180 ztindex = REAL(Agrif_Nbstepint()+1, wp) / Agrif_Rhot() 181 ENDIF 164 182 ! 165 183 Agrif_SpecialValue = 0._wp … … 167 185 l_vremap = ln_vert_remap 168 186 ! 169 CALL Agrif_Bc_variable( ts_interp_id, procname=interptsn )187 CALL Agrif_Bc_variable( ts_interp_id, calledweight=ztindex, procname=interptsn ) 170 188 ! 171 189 Agrif_UseSpecialValue = .FALSE. … … 175 193 176 194 177 SUBROUTINE Agrif_dyn( kt )195 SUBROUTINE Agrif_dyn( kt, kstg ) 178 196 !!---------------------------------------------------------------------- 179 197 !! *** ROUTINE Agrif_DYN *** 180 198 !!---------------------------------------------------------------------- 181 199 INTEGER, INTENT(in) :: kt 200 INTEGER, OPTIONAL, INTENT(in) :: kstg 182 201 ! 183 202 INTEGER :: ji, jj, jk ! dummy loop indices 184 203 INTEGER :: ibdy1, jbdy1, ibdy2, jbdy2 185 204 REAL(wp), DIMENSION(jpi,jpj) :: zub, zvb 205 REAL(wp) :: ztindex 186 206 !!---------------------------------------------------------------------- 187 207 ! 188 208 IF( Agrif_Root() ) RETURN 209 ! 210 ! Set time index depending on stage in case of RK3 time stepping: 211 IF ( PRESENT( kstg ) ) THEN 212 ztindex = REAL(Agrif_Nbstepint(), wp) 213 IF ( kstg == 1 ) THEN 214 ztindex = ztindex + 1._wp / 3._wp 215 ELSEIF ( kstg == 2 ) THEN 216 ztindex = ztindex + 1._wp / 2._wp 217 ELSEIF ( kstg == 3 ) THEN 218 ztindex = ztindex + 1._wp 219 ENDIF 220 ztindex = ztindex / Agrif_Rhot() 221 ELSE 222 ztindex = REAL(Agrif_Nbstepint()+1, wp) / Agrif_Rhot() 223 ENDIF 189 224 ! 190 225 Agrif_SpecialValue = 0.0_wp … … 194 229 use_sign_north = .TRUE. 195 230 sign_north = -1.0_wp 196 CALL Agrif_Bc_variable( un_interp_id, procname=interpun )197 CALL Agrif_Bc_variable( vn_interp_id, procname=interpvn )231 CALL Agrif_Bc_variable( un_interp_id, calledweight=ztindex, procname=interpun ) 232 CALL Agrif_Bc_variable( vn_interp_id, calledweight=ztindex, procname=interpvn ) 198 233 199 234 IF( .NOT.ln_dynspg_ts ) THEN ! Get transports 200 235 ubdy(:,:) = 0._wp ; vbdy(:,:) = 0._wp 201 236 utint_stage(:,:) = 0 ; vtint_stage(:,:) = 0 202 CALL Agrif_Bc_variable( unb_interp_id, procname=interpunb )203 CALL Agrif_Bc_variable( vnb_interp_id, procname=interpvnb )237 CALL Agrif_Bc_variable( unb_interp_id, calledweight=ztindex, procname=interpunb ) 238 CALL Agrif_Bc_variable( vnb_interp_id, calledweight=ztindex, procname=interpvnb ) 204 239 ENDIF 205 240 … … 599 634 ! 600 635 IF( Agrif_Root() ) RETURN 636 ! 637 #if defined key_RK3 638 Agrif_SpecialValue = 0._wp 639 Agrif_UseSpecialValue = .TRUE. 640 CALL Agrif_Bc_variable(sshn_id, procname=interpsshn ) 641 Agrif_UseSpecialValue = .FALSE. 642 #endif 601 643 ! 602 644 ll_int_cons = ln_bt_fw ! Assume conservative temporal integration in the forward case only -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_oce_sponge.F90
r14227 r14800 51 51 ! 52 52 #if defined SPONGE 53 #if defined key_RK3 54 zcoef = REAL(Agrif_Nbstepint(), wp)/REAL(Agrif_rhot()) 55 #else 53 56 !! Assume persistence: 54 57 zcoef = REAL(Agrif_rhot()-1,wp)/REAL(Agrif_rhot()) 58 #endif 55 59 56 60 Agrif_SpecialValue = 0._wp … … 79 83 ! 80 84 #if defined SPONGE 85 86 #if defined key_RK3 87 zcoef = REAL(Agrif_Nbstepint(), wp)/REAL(Agrif_rhot()) 88 #else 81 89 zcoef = REAL(Agrif_rhot()-1,wp)/REAL(Agrif_rhot()) 90 #endif 82 91 83 92 Agrif_SpecialValue = 0._wp -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_oce_update.F90
r14227 r14800 98 98 # endif 99 99 ! 100 #if ! defined key_RK3 100 101 IF ( ln_dynspg_ts .AND. ln_bt_fw ) THEN 101 102 ! Update time integrated transports … … 108 109 # endif 109 110 END IF 111 #endif 110 112 111 113 # if ! defined DECAL_FEEDBACK … … 383 385 ENDDO 384 386 387 #if ! defined key_RK3 385 388 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 386 389 ! Add asselin part … … 401 404 END DO 402 405 ENDIF 406 #endif 403 407 DO jn = 1,jpts 404 408 DO jk = 1, jpkm1 … … 417 421 & * tmask(i1:i2,j1:j2,k1:k2) 418 422 ENDDO 419 423 #if ! defined key_RK3 420 424 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 421 425 ! Add asselin part … … 436 440 END DO 437 441 ENDIF 442 #endif 438 443 DO jn = 1,jpts 439 444 DO jk=k1,k2 … … 558 563 DO jj=j1,j2 559 564 DO ji=i1,i2 565 #if ! defined key_RK3 560 566 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 561 567 zub = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used … … 565 571 & * umask(ji,jj,jk) / e3u(ji,jj,jk,Kbb_a) 566 572 ENDIF 573 #endif 567 574 ! 568 575 uu(ji,jj,jk,Kmm_a) = tabres_child(ji,jj,jk) * umask(ji,jj,jk) … … 705 712 DO jj=j1,j2 706 713 DO ji=i1,i2 714 #if ! defined key_RK3 707 715 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 708 716 zvb = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used … … 712 720 & * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kbb_a) 713 721 ENDIF 722 #endif 714 723 ! 715 724 vv(ji,jj,jk,Kmm_a) = tabres_child(ji,jj,jk) * vmask(ji,jj,jk) … … 781 790 ! 782 791 ! Update barotropic velocities: 792 #if ! defined key_RK3 783 793 IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 784 794 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part … … 787 797 END IF 788 798 ENDIF 799 #endif 789 800 uu_b(ji,jj,Kmm_a) = tabres(ji,jj) * r1_hu(ji,jj,Kmm_a) * umask(ji,jj,1) 790 801 ! … … 826 837 tabres(ji,jj) = tabres(ji,jj) * r1_e1v(ji,jj) 827 838 ! Update barotropic velocities: 839 #if ! defined key_RK3 828 840 IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 829 841 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part … … 832 844 END IF 833 845 ENDIF 846 #endif 834 847 vv_b(ji,jj,Kmm_a) = tabres(ji,jj) * r1_hv(ji,jj,Kmm_a) * vmask(ji,jj,1) 835 848 ! … … 864 877 END DO 865 878 ELSE 879 #if ! defined key_RK3 866 880 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 867 881 DO jj=j1,j2 … … 872 886 END DO 873 887 ENDIF 888 #endif 874 889 ! 875 890 DO jj=j1,j2 … … 962 977 zcor = rn_Dt * r1_e1e2t(i1 ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj)) 963 978 ssh(i1 ,jj,Kmm_a) = ssh(i1 ,jj,Kmm_a) + zcor 979 #if ! defined key_RK3 964 980 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i1 ,jj,Kbb_a) = ssh(i1 ,jj,Kbb_a) + rn_atfp * zcor 981 #endif 965 982 END DO 966 983 ENDIF … … 969 986 zcor = - rn_Dt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 970 987 ssh(i2+1,jj,Kmm_a) = ssh(i2+1,jj,Kmm_a) + zcor 988 #if ! defined key_RK3 971 989 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) + rn_atfp * zcor 990 #endif 972 991 END DO 973 992 ENDIF … … 1050 1069 zcor = rn_Dt * r1_e1e2t(ji,j1 ) * e1v(ji,j1 ) * (vb2_b(ji,j1)-tabres(ji,j1)) 1051 1070 ssh(ji,j1 ,Kmm_a) = ssh(ji,j1 ,Kmm_a) + zcor 1071 #if ! defined key_RK3 1052 1072 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j1 ,Kbb_a) = ssh(ji,j1,Kbb_a) + rn_atfp * zcor 1073 #endif 1053 1074 END DO 1054 1075 ENDIF … … 1057 1078 zcor = - rn_Dt * r1_e1e2t(ji,j2+1) * e1v(ji,j2 ) * (vb2_b(ji,j2)-tabres(ji,j2)) 1058 1079 ssh(ji,j2+1,Kmm_a) = ssh(ji,j2+1,Kmm_a) + zcor 1080 #if ! defined key_RK3 1059 1081 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) + rn_atfp * zcor 1082 #endif 1060 1083 END DO 1061 1084 ENDIF … … 1203 1226 ! hdiv(i1:i2,j1:j2,1:jpkm1) = e3t(i1:i2,j1:j2,1:jpkm1,Kbb_a) 1204 1227 1228 #if ! defined key_RK3 1205 1229 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler) )) THEN 1206 1230 DO jk = 1, jpkm1 … … 1233 1257 ! 1234 1258 ENDIF 1259 #endif 1235 1260 ! 1236 1261 ! 2) Updates at NOW time step: -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_top_interp.F90
r14218 r14800 36 36 CONTAINS 37 37 38 SUBROUTINE Agrif_trc 38 SUBROUTINE Agrif_trc( kt, kstg ) 39 39 !!---------------------------------------------------------------------- 40 40 !! *** ROUTINE Agrif_trc *** 41 41 !!---------------------------------------------------------------------- 42 INTEGER, INTENT(in) :: kt 43 INTEGER, OPTIONAL, INTENT(in) :: kstg 44 ! 45 REAL(wp) :: ztindex 42 46 ! 43 47 IF( Agrif_Root() ) RETURN 48 ! 49 ! Set time index depending on stage in case of RK3 time stepping: 50 IF ( PRESENT( kstg ) ) THEN 51 ztindex = REAL(Agrif_Nbstepint(), wp) 52 IF ( kstg == 1 ) THEN 53 ztindex = ztindex + 1._wp / 3._wp 54 ELSEIF ( kstg == 2 ) THEN 55 ztindex = ztindex + 1._wp / 2._wp 56 ELSEIF ( kstg == 3 ) THEN 57 ztindex = ztindex + 1._wp 58 ENDIF 59 ztindex = ztindex / Agrif_Rhot() 60 ELSE 61 ztindex = REAL(Agrif_Nbstepint()+1, wp) / Agrif_Rhot() 62 ENDIF 44 63 ! 45 64 Agrif_SpecialValue = 0._wp … … 47 66 l_vremap = ln_vert_remap 48 67 ! 49 CALL Agrif_Bc_variable( trn_id, procname=interptrn )68 CALL Agrif_Bc_variable( trn_id,calledweight=ztindex, procname=interptrn ) 50 69 ! 51 70 Agrif_UseSpecialValue = .FALSE. -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_top_sponge.F90
r14170 r14800 47 47 ! 48 48 #if defined SPONGE_TOP 49 #if defined key_RK3 50 zcoef = REAL(Agrif_Nbstepint(), wp)/REAL(Agrif_rhot()) 51 #else 49 52 !! Assume persistence: 50 53 zcoef = REAL(Agrif_rhot()-1,wp)/REAL(Agrif_rhot()) 51 54 #endif 52 55 Agrif_SpecialValue = 0._wp 53 56 Agrif_UseSpecialValue = .TRUE. -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/NST/agrif_top_update.F90
r14148 r14800 129 129 ENDDO 130 130 ENDDO 131 131 #if ! defined key_RK3 132 132 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 133 133 ! Add asselin part … … 148 148 END DO 149 149 ENDIF 150 #endif 150 151 DO jn = 1,jptra 151 152 DO jk = 1, jpkm1 … … 164 165 & * tmask(i1:i2,j1:j2,k1:k2) 165 166 ENDDO 167 #if ! defined key_RK3 166 168 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 167 169 ! Add asselin part … … 182 184 END DO 183 185 ENDIF 186 #endif 184 187 DO jn = 1,jptra 185 188 DO jk=k1,k2 -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/IOM/restart.F90
r14239 r14800 424 424 ENDIF 425 425 ! 426 #if defined key_RK3 427 ssh(:,:,Kmm) = 0._wp !* RK3: set Kmm to 0 for AGRIF 428 #else 429 ssh(:,:,Kmm) = ssh(:,:,Kbb) !* MLF: set now values from to before ones 430 #endif 431 ENDIF 432 ! 426 ssh(:,:,Kmm) = ssh(:,:,Kbb) !* set now values from to before ones 427 ENDIF 428 ! 429 !JC: line below ??? 433 430 ! !==========================! 434 431 ssh(:,:,Kaa) = 0._wp !== Set to 0 for AGRIF ==! -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/TRA/traatf.F90
r14072 r14800 107 107 ! 108 108 #if defined key_agrif 109 CALL Agrif_tra ! AGRIF zoom boundaries109 CALL Agrif_tra( kt ) ! AGRIF zoom boundaries 110 110 #endif 111 111 ! ! local domain boundaries (T-point, unchanged sign) -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/stp2d.F90
r14782 r14800 29 29 #if defined key_agrif 30 30 USE agrif_oce_interp 31 USE agrif_oce_sponge 31 32 #endif 32 33 … … 123 124 ! !* lateral viscosity *! 124 125 CALL dyn_ldf( kt, Kbb, Kbb, uu, vv, Krhs ) 126 #if defined key_agrif 127 IF(.NOT. Agrif_Root() ) THEN !* AGRIF: sponge *! 128 CALL Agrif_Sponge_dyn 129 ENDIF 130 #endif 125 131 ! 126 132 ! !* hydrostatic pressure gradient *! -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/stpmlf.F90
r14618 r14800 512 512 ! 513 513 # if defined key_agrif 514 CALL Agrif_tra 514 CALL Agrif_tra( kt ) !* AGRIF zoom boundaries 515 515 CALL Agrif_dyn( kt ) 516 516 # endif -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/stprk3.F90
r14784 r14800 241 241 ! AGRIF recursive integration 242 242 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 243 Kbb_a = Nbb; Kmm_a = N nn; Krhs_a = Nrhs ! agrif_oce module copies of time level indices243 Kbb_a = Nbb; Kmm_a = Nbb; Krhs_a = Nrhs ! agrif_oce module copies of time level indices 244 244 CALL Agrif_Integrate_ChildGrids( stp_RK3 ) ! allows to finish all the Child Grids before updating 245 245 … … 365 365 ! 366 366 # if defined key_agrif 367 CALL Agrif_tra 367 CALL Agrif_tra( kt ) !* AGRIF zoom boundaries 368 368 CALL Agrif_dyn( kt ) 369 369 # endif -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/stprk3_stg.F90
r14782 r14800 354 354 ! 355 355 # if defined key_agrif 356 CALL Agrif_tra 357 CALL Agrif_dyn( kstp )356 CALL Agrif_tra( kstp, kstg ) !* AGRIF zoom boundaries 357 CALL Agrif_dyn( kstp, kstg ) 358 358 # endif 359 359 ! ! local domain boundaries (T-point, unchanged sign) -
NEMO/branches/2021/dev_r14318_RK3_stage1/src/TOP/TRP/trcatf.F90
r14172 r14800 100 100 ! 101 101 #if defined key_agrif 102 CALL Agrif_trc 102 CALL Agrif_trc( kt ) ! AGRIF zoom boundaries 103 103 #endif 104 104 ! Update after tracer on domain lateral boundaries
Note: See TracChangeset
for help on using the changeset viewer.