- Timestamp:
- 2020-02-18T11:58:37+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2
- Files:
-
- 34 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/cfgs/SHARED/namelist_ref
r12377 r12397 42 42 nn_leapy = 0 ! Leap year calendar (1) or not (0) 43 43 ln_rstart = .false. ! start from rest (F) or from a restart file (T) 44 nn_euler = 1 ! = 0 : start with forward time step if ln_rstart=T45 nn_rstctl = 0! restart control ==> activated only if ln_rstart=T44 ln_1st_euler = .false. ! =T force a start with forward time step (ln_rstart=T) 45 nn_rstctl = 0 ! restart control ==> activated only if ln_rstart=T 46 46 ! ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist 47 47 ! ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/NST/agrif_oce_sponge.F90
r12377 r12397 439 439 440 440 !* set relaxation time scale 441 IF( neuler == 0.AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_tra / ( rdt )441 IF( l_1st_euler .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_tra / ( rdt ) 442 442 ELSE ; ztrelax = rn_trelax_tra / (2._wp * rdt ) 443 443 ENDIF … … 596 596 #endif 597 597 !* set relaxation time scale 598 IF( neuler == 0.AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_dyn / ( rdt )598 IF( l_1st_euler .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_dyn / ( rdt ) 599 599 ELSE ; ztrelax = rn_trelax_dyn / (2._wp * rdt ) 600 600 ENDIF … … 772 772 # endif 773 773 !* set relaxation time scale 774 IF( neuler == 0.AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_dyn / ( rdt )774 IF( l_1st_euler .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_dyn / ( rdt ) 775 775 ELSE ; ztrelax = rn_trelax_dyn / (2._wp * rdt ) 776 776 ENDIF -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/NST/agrif_oce_update.F90
r12377 r12397 256 256 ! 2) BEFORE fields: 257 257 !------------------ 258 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0) )) THEN258 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler) )) THEN 259 259 ! 260 260 ! Vertical scale factor interpolations … … 351 351 ENDDO 352 352 353 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN353 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 354 354 ! Add asselin part 355 355 DO jn = 1,jpts … … 381 381 END DO 382 382 ! 383 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN383 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 384 384 ts(i1:i2,j1:j2,1:jpkm1,1:jpts,Kbb_a) = ts(i1:i2,j1:j2,1:jpkm1,1:jpts,Kmm_a) 385 385 ENDIF … … 422 422 ENDDO 423 423 !< jc tmp 424 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN424 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 425 425 ! Add asselin part 426 426 DO jn = 1,jpts … … 452 452 END DO 453 453 ! 454 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN454 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 455 455 ts(i1:i2,j1:j2,k1:k2,1:jpts,Kbb_a) = ts(i1:i2,j1:j2,k1:k2,1:jpts,Kmm_a) 456 456 ENDIF … … 551 551 DO jj=j1,j2 552 552 DO ji=i1,i2 553 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part553 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 554 554 zub = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 555 555 zuno = uu(ji,jj,jk,Kmm_a) * e3u(ji,jj,jk,Krhs_a) … … 564 564 END DO 565 565 ! 566 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN566 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 567 567 uu(i1:i2,j1:j2,1:jpkm1,Kbb_a) = uu(i1:i2,j1:j2,1:jpkm1,Kmm_a) 568 568 ENDIF … … 597 597 tabres(ji,jj,jk,1) = tabres(ji,jj,jk,1) * r1_e2u(ji,jj) 598 598 ! 599 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part599 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 600 600 zub = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 601 601 zuno = uu(ji,jj,jk,Kmm_a) * e3u(ji,jj,jk,Krhs_a) … … 610 610 END DO 611 611 ! 612 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN612 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 613 613 uu(i1:i2,j1:j2,k1:k2,Kbb_a) = uu(i1:i2,j1:j2,k1:k2,Kmm_a) 614 614 ENDIF … … 751 751 DO jj=j1,j2 752 752 DO ji=i1,i2 753 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part753 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 754 754 zvb = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 755 755 zvno = vv(ji,jj,jk,Kmm_a) * e3v(ji,jj,jk,Krhs_a) … … 764 764 END DO 765 765 ! 766 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN766 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 767 767 vv(i1:i2,j1:j2,1:jpkm1,Kbb_a) = vv(i1:i2,j1:j2,1:jpkm1,Kmm_a) 768 768 ENDIF … … 801 801 tabres(ji,jj,jk,1) = tabres(ji,jj,jk,1) * r1_e1v(ji,jj) 802 802 ! 803 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part803 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 804 804 zvb = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 805 805 zvno = vv(ji,jj,jk,Kmm_a) * e3v(ji,jj,jk,Krhs_a) … … 814 814 END DO 815 815 ! 816 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN816 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 817 817 vv(i1:i2,j1:j2,k1:k2,Kbb_a) = vv(i1:i2,j1:j2,k1:k2,Kmm_a) 818 818 ENDIF … … 907 907 ! Update barotropic velocities: 908 908 IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 909 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part909 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 910 910 zcorr = (tabres(ji,jj) - uu_b(ji,jj,Kmm_a) * hu(ji,jj,Krhs_a)) * r1_hu(ji,jj,Kbb_a) 911 911 uu_b(ji,jj,Kbb_a) = uu_b(ji,jj,Kbb_a) + atfp * zcorr * umask(ji,jj,1) … … 928 928 END DO 929 929 ! 930 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN930 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 931 931 uu_b(i1:i2,j1:j2,Kbb_a) = uu_b(i1:i2,j1:j2,Kmm_a) 932 932 ENDIF … … 973 973 ! Update barotropic velocities: 974 974 IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 975 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN ! Add asselin part975 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN ! Add asselin part 976 976 zcorr = (tabres(ji,jj) - vv_b(ji,jj,Kmm_a) * hv(ji,jj,Krhs_a)) * r1_hv(ji,jj,Kbb_a) 977 977 vv_b(ji,jj,Kbb_a) = vv_b(ji,jj,Kbb_a) + atfp * zcorr * vmask(ji,jj,1) … … 994 994 END DO 995 995 ! 996 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN996 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 997 997 vv_b(i1:i2,j1:j2,Kbb_a) = vv_b(i1:i2,j1:j2,Kmm_a) 998 998 ENDIF … … 1021 1021 END DO 1022 1022 ELSE 1023 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN1023 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 1024 1024 DO jj=j1,j2 1025 1025 DO ji=i1,i2 … … 1036 1036 END DO 1037 1037 ! 1038 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN1038 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 1039 1039 ssh(i1:i2,j1:j2,Kbb_a) = ssh(i1:i2,j1:j2,Kmm_a) 1040 1040 ENDIF … … 1119 1119 zcor = rdt * r1_e1e2t(i1 ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj)) 1120 1120 ssh(i1 ,jj,Kmm_a) = ssh(i1 ,jj,Kmm_a) + zcor 1121 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) ssh(i1 ,jj,Kbb_a) = ssh(i1 ,jj,Kbb_a) + atfp * zcor1121 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i1 ,jj,Kbb_a) = ssh(i1 ,jj,Kbb_a) + atfp * zcor 1122 1122 END DO 1123 1123 ENDIF … … 1126 1126 zcor = - rdt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 1127 1127 ssh(i2+1,jj,Kmm_a) = ssh(i2+1,jj,Kmm_a) + zcor 1128 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) + atfp * zcor1128 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) + atfp * zcor 1129 1129 END DO 1130 1130 ENDIF … … 1207 1207 zcor = rdt * r1_e1e2t(ji,j1 ) * e1v(ji,j1 ) * (vb2_b(ji,j1)-tabres(ji,j1)) 1208 1208 ssh(ji,j1 ,Kmm_a) = ssh(ji,j1 ,Kmm_a) + zcor 1209 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) ssh(ji,j1 ,Kbb_a) = ssh(ji,j1,Kbb_a) + atfp * zcor1209 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j1 ,Kbb_a) = ssh(ji,j1,Kbb_a) + atfp * zcor 1210 1210 END DO 1211 1211 ENDIF … … 1214 1214 zcor = - rdt * r1_e1e2t(ji,j2+1) * e1v(ji,j2 ) * (vb2_b(ji,j2)-tabres(ji,j2)) 1215 1215 ssh(ji,j2+1,Kmm_a) = ssh(ji,j2+1,Kmm_a) + zcor 1216 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) + atfp * zcor1216 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) + atfp * zcor 1217 1217 END DO 1218 1218 ENDIF … … 1359 1359 ! hdiv(i1:i2,j1:j2,1:jpkm1) = e3t(i1:i2,j1:j2,1:jpkm1,Kbb_a) 1360 1360 1361 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0) )) THEN1361 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler) )) THEN 1362 1362 DO jk = 1, jpkm1 1363 1363 DO jj=j1,j2 … … 1422 1422 END DO 1423 1423 ! 1424 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN1424 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 1425 1425 e3t (i1:i2,j1:j2,1:jpk,Kbb_a) = e3t (i1:i2,j1:j2,1:jpk,Kmm_a) 1426 1426 e3w (i1:i2,j1:j2,1:jpk,Kbb_a) = e3w (i1:i2,j1:j2,1:jpk,Kmm_a) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/NST/agrif_top_sponge.F90
r12377 r12397 137 137 138 138 !* set relaxation time scale 139 IF( neuler == 0.AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_tra / ( rdt )139 IF( l_1st_euler .AND. lk_agrif_fstep ) THEN ; ztrelax = rn_trelax_tra / ( rdt ) 140 140 ELSE ; ztrelax = rn_trelax_tra / (2._wp * rdt ) 141 141 ENDIF -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/NST/agrif_top_update.F90
r12377 r12397 125 125 ENDDO 126 126 ! 127 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN127 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 128 128 ! Add asselin part 129 129 DO jn = 1,jptra … … 155 155 END DO 156 156 ! 157 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN157 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 158 158 tr(i1:i2,j1:j2,1:jpkm1,1:jptra,Kbb_a) = tr(i1:i2,j1:j2,1:jpkm1,1:jptra,Kmm_a) 159 159 ENDIF … … 199 199 ENDDO 200 200 !< jc tmp 201 IF (.NOT.(lk_agrif_fstep.AND.( neuler==0))) THEN201 IF (.NOT.(lk_agrif_fstep.AND.(l_1st_euler))) THEN 202 202 ! Add asselin part 203 203 DO jn = n1,n2 … … 229 229 END DO 230 230 ! 231 IF (( neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN231 IF ((l_1st_euler).AND.(Agrif_Nb_Step()==0) ) THEN 232 232 tr(i1:i2,j1:j2,k1:k2,n1:n2,Kbb_a) = tr(i1:i2,j1:j2,k1:k2,n1:n2,Kmm_a) 233 233 ENDIF -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/ASM/asminc.F90
r12377 r12397 487 487 ENDIF 488 488 ! 489 IF(lwp) WRITE(numout,*) ' ==>>> Euler time step switch is ', neuler489 IF(lwp) WRITE(numout,*) ' ==>>> Euler time step switch is ', l_1st_euler 490 490 ! 491 491 IF( lk_asminc ) THEN !== data assimilation ==! … … 577 577 IF ( kt == nitdin_r ) THEN 578 578 ! 579 neuler = 0! Force Euler forward step579 l_1st_euler = .TRUE. ! Force Euler forward step 580 580 ! 581 581 ! Initialize the now fields with the background + increment … … 677 677 IF ( kt == nitdin_r ) THEN 678 678 ! 679 neuler = 0! Force Euler forward step679 l_1st_euler = .TRUE. ! Force Euler forward step 680 680 ! 681 681 ! Initialize the now fields with the background + increment … … 753 753 IF ( kt == nitdin_r ) THEN 754 754 ! 755 neuler = 0! Force Euler forward step755 l_1st_euler = .TRUE. ! Force Euler forward step 756 756 ! 757 757 ssh(:,:,Kmm) = ssh_bkg(:,:) + ssh_bkginc(:,:) ! Initialize the now fields the background + increment … … 896 896 IF ( kt == nitdin_r ) THEN 897 897 ! 898 neuler = 0! Force Euler forward step898 l_1st_euler = 0 ! Force Euler forward step 899 899 ! 900 900 ! Sea-ice : SI3 case -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DIA/diacfl.F90
r12377 r12397 52 52 ! 53 53 INTEGER :: ji, jj, jk ! dummy loop indices 54 REAL(wp) :: z 2dt, zCu_max, zCv_max, zCw_max! local scalars54 REAL(wp) :: zCu_max, zCv_max, zCw_max ! local scalars 55 55 INTEGER , DIMENSION(3) :: iloc_u , iloc_v , iloc_w , iloc ! workspace 56 56 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zCu_cfl, zCv_cfl, zCw_cfl ! workspace … … 59 59 IF( ln_timing ) CALL timing_start('dia_cfl') 60 60 ! 61 ! ! setup timestep multiplier to account for initial Eulerian timestep62 IF( neuler == 0 .AND. kt == nit000 ) THEN ; z2dt = rdt63 ELSE ; z2dt = rdt * 2._wp64 ENDIF65 !66 !67 61 DO_3D_11_11( 1, jpk ) 68 zCu_cfl(ji,jj,jk) = ABS( uu(ji,jj,jk,Kmm) ) * z2dt / e1u (ji,jj) ! for i-direction69 zCv_cfl(ji,jj,jk) = ABS( vv(ji,jj,jk,Kmm) ) * z2dt / e2v (ji,jj) ! for j-direction70 zCw_cfl(ji,jj,jk) = ABS( ww(ji,jj,jk) ) * z2dt / e3w(ji,jj,jk,Kmm) ! for k-direction62 zCu_cfl(ji,jj,jk) = ABS( uu(ji,jj,jk,Kmm) ) * r2dt / e1u (ji,jj) ! for i-direction 63 zCv_cfl(ji,jj,jk) = ABS( vv(ji,jj,jk,Kmm) ) * r2dt / e2v (ji,jj) ! for j-direction 64 zCw_cfl(ji,jj,jk) = ABS( ww(ji,jj,jk) ) * r2dt / e3w(ji,jj,jk,Kmm) ! for k-direction 71 65 END_3D 72 66 ! … … 118 112 WRITE(numcfl,*) '******************************************' 119 113 WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cu', rCu_max, nCu_loc(1), nCu_loc(2), nCu_loc(3) 120 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCu_max114 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', r2dt/rCu_max 121 115 WRITE(numcfl,*) '******************************************' 122 116 WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cv', rCv_max, nCv_loc(1), nCv_loc(2), nCv_loc(3) 123 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCv_max117 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', r2dt/rCv_max 124 118 WRITE(numcfl,*) '******************************************' 125 119 WRITE(numcfl,FMT='(3x,a12,6x,f7.4,1x,i4,1x,i4,1x,i4)') 'Run Max Cw', rCw_max, nCw_loc(1), nCw_loc(2), nCw_loc(3) 126 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', z2dt/rCw_max120 WRITE(numcfl,FMT='(3x,a8,11x,f15.1)') ' => dt/C', r2dt/rCw_max 127 121 CLOSE( numcfl ) 128 122 ! … … 131 125 WRITE(numout,*) 'dia_cfl : Maximum Courant number information for the run ' 132 126 WRITE(numout,*) '~~~~~~~' 133 WRITE(numout,*) ' Max Cu = ', rCu_max, ' at (i,j,k) = (',nCu_loc(1),nCu_loc(2),nCu_loc(3),') => dt/C = ', z2dt/rCu_max134 WRITE(numout,*) ' Max Cv = ', rCv_max, ' at (i,j,k) = (',nCv_loc(1),nCv_loc(2),nCv_loc(3),') => dt/C = ', z2dt/rCv_max135 WRITE(numout,*) ' Max Cw = ', rCw_max, ' at (i,j,k) = (',nCw_loc(1),nCw_loc(2),nCw_loc(3),') => dt/C = ', z2dt/rCw_max127 WRITE(numout,*) ' Max Cu = ', rCu_max, ' at (i,j,k) = (',nCu_loc(1),nCu_loc(2),nCu_loc(3),') => dt/C = ', r2dt/rCu_max 128 WRITE(numout,*) ' Max Cv = ', rCv_max, ' at (i,j,k) = (',nCv_loc(1),nCv_loc(2),nCv_loc(3),') => dt/C = ', r2dt/rCv_max 129 WRITE(numout,*) ' Max Cw = ', rCw_max, ' at (i,j,k) = (',nCw_loc(1),nCw_loc(2),nCw_loc(3),') => dt/C = ', r2dt/rCw_max 136 130 ENDIF 137 131 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DOM/dom_oce.F90
r12377 r12397 35 35 REAL(wp), PUBLIC :: rn_rdt !: time step for the dynamics and tracer 36 36 REAL(wp), PUBLIC :: rn_atfp !: asselin time filter parameter 37 INTEGER , PUBLIC :: nn_euler !: =0 start with forward time step or not (=1)37 LOGICAL , PUBLIC :: ln_1st_euler !: =T start with forward time step or not (=F) 38 38 LOGICAL , PUBLIC :: ln_crs !: Apply grid coarsening to dynamical model output or online passive tracers 39 39 … … 59 59 60 60 ! !!! associated variables 61 INTEGER , PUBLIC :: neuler !: restart euler forward option (0=Euler)62 REAL(wp), PUBLIC :: r2dt !: = 2*rdt except at nit000 (=rdt) if neuler=061 LOGICAL , PUBLIC :: l_1st_euler !: Euler 1st time-step flag (=T if ln_restart=F or ln_1st_euler=T) 62 REAL(wp), PUBLIC :: r2dt, r1_2dt !: = 2*rdt and 1/(2*rdt) except at nit000 (=rdt and 1/rdt) if l_1st_euler=.true. 63 63 64 64 !!---------------------------------------------------------------------- -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DOM/domain.F90
r12377 r12397 287 287 & nn_no , cn_exp , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl , & 288 288 & nn_it000, nn_itend , nn_date0 , nn_time0 , nn_leapy , nn_istate , & 289 & nn_stock, nn_write , ln_mskland , ln_clobber , nn_chunksz, nn_euler ,&289 & nn_stock, nn_write , ln_mskland , ln_clobber , nn_chunksz, ln_1st_euler , & 290 290 & ln_cfmeta, ln_xios_read, nn_wxios 291 291 NAMELIST/namdom/ ln_linssh, rn_rdt, rn_atfp, ln_crs, ln_meshmask … … 317 317 WRITE(numout,*) ' restart output directory cn_ocerst_outdir= ', TRIM( cn_ocerst_outdir ) 318 318 WRITE(numout,*) ' restart logical ln_rstart = ', ln_rstart 319 WRITE(numout,*) ' start with forward time step nn_euler = ', nn_euler319 WRITE(numout,*) ' start with forward time step ln_1st_euler = ', ln_1st_euler 320 320 WRITE(numout,*) ' control of time step nn_rstctl = ', nn_rstctl 321 321 WRITE(numout,*) ' number of the first time step nn_it000 = ', nn_it000 … … 353 353 nleapy = nn_leapy 354 354 ninist = nn_istate 355 neuler = nn_euler356 IF( neuler == 1.AND. .NOT. ln_rstart ) THEN355 l_1st_euler = ln_1st_euler 356 IF( .NOT. l_1st_euler .AND. .NOT. ln_rstart ) THEN 357 357 IF(lwp) WRITE(numout,*) 358 358 IF(lwp) WRITE(numout,*)' ==>>> Start from rest (ln_rstart=F)' 359 IF(lwp) WRITE(numout,*)' an Euler initial time step is used : nn_euler is forced to 0'360 neuler = 0359 IF(lwp) WRITE(numout,*)' an Euler initial time step is used : l_1st_euler is forced to .true. ' 360 l_1st_euler = .true. 361 361 ENDIF 362 362 ! ! control of output frequency -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DOM/domvvl.F90
r12377 r12397 319 319 INTEGER :: ji, jj, jk ! dummy loop indices 320 320 INTEGER , DIMENSION(3) :: ijk_max, ijk_min ! temporary integers 321 REAL(wp) :: z 2dt, z_tmin, z_tmax! local scalars321 REAL(wp) :: z_tmin, z_tmax ! local scalars 322 322 LOGICAL :: ll_do_bclinic ! local logical 323 323 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv … … 430 430 ! 4 - Time stepping of baroclinic scale factors 431 431 ! --------------------------------------------- 432 ! Leapfrog time stepping433 ! ~~~~~~~~~~~~~~~~~~~~~~434 IF( neuler == 0 .AND. kt == nit000 ) THEN435 z2dt = rdt436 ELSE437 z2dt = 2.0_wp * rdt438 ENDIF439 432 CALL lbc_lnk( 'domvvl', tilde_e3t_a(:,:,:), 'T', 1._wp ) 440 tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + z2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:)433 tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + r2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:) 441 434 442 435 ! Maximum deformation control … … 624 617 ! - ML - e3(t/u/v)_b are allready computed in dynnxt. 625 618 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 626 IF( neuler == 0 .AND. kt == nit000) THEN619 IF( l_1st_euler ) THEN 627 620 tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 628 621 ELSE … … 821 814 e3t(:,:,:,Kbb) = e3t_0(:,:,:) 822 815 END WHERE 823 IF( neuler == 0) THEN816 IF( l_1st_euler ) THEN 824 817 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 825 818 ENDIF … … 827 820 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart files' 828 821 IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 829 IF(lwp) write(numout,*) ' neuler is forced to 0'822 IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 830 823 CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 831 824 e3t(:,:,:,Kmm) = e3t(:,:,:,Kbb) 832 neuler = 0825 l_1st_euler = .true. 833 826 ELSE IF( id2 > 0 ) THEN 834 827 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kbb) not found in restart files' 835 828 IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 836 IF(lwp) write(numout,*) ' neuler is forced to 0'829 IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 837 830 CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 838 831 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 839 neuler = 0832 l_1st_euler = .true. 840 833 ELSE 841 834 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart file' 842 835 IF(lwp) write(numout,*) 'Compute scale factor from sshn' 843 IF(lwp) write(numout,*) ' neuler is forced to 0'836 IF(lwp) write(numout,*) 'l_1st_euler is forced to true' 844 837 DO jk = 1, jpk 845 838 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kmm) ) & … … 848 841 END DO 849 842 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 850 neuler = 0843 l_1st_euler = .true. 851 844 ENDIF 852 845 ! ! ----------- ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DOM/istate.F90
r12377 r12397 92 92 ! ! --------------- 93 93 numror = 0 ! define numror = 0 -> no restart file to read 94 neuler = 0! Set time-step indicator at nit000 (euler forward)94 l_1st_euler = .true. ! Set time-step indicator at nit000 (euler forward) 95 95 CALL day_init ! model calendar (using both namelist and restart infos) 96 96 ! ! Initialization of ocean to zero -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DYN/dynatf.F90
r12377 r12397 157 157 ! 158 158 IF( l_trddyn ) THEN ! prepare the atf trend computation + some diagnostics 159 z1_2dt = 1._wp / (2. * rdt) ! Euler or leap-frog time step160 IF( neuler == 0 .AND. kt == nit000 ) z1_2dt = 1._wp / rdt161 159 ! 162 160 ! ! Kinetic energy and Conversion … … 164 162 ! 165 163 IF( ln_dyn_trd ) THEN ! 3D output: total momentum trends 166 zua(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) * z1_2dt167 zva(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) * z1_2dt164 zua(:,:,:) = ( puu(:,:,:,Kaa) - puu(:,:,:,Kbb) ) * r1_2dt 165 zva(:,:,:) = ( pvv(:,:,:,Kaa) - pvv(:,:,:,Kbb) ) * r1_2dt 168 166 CALL iom_put( "utrd_tot", zua ) ! total momentum trends, except the asselin time filter 169 167 CALL iom_put( "vtrd_tot", zva ) … … 178 176 ! ------------------------------------------ 179 177 180 IF( .NOT. ( neuler == 0 .AND. kt == nit000 )) THEN !* Leap-Frog : Asselin time filter178 IF( .NOT. l_1st_euler ) THEN !* Leap-Frog : Asselin time filter 181 179 ! ! =============! 182 180 IF( ln_linssh ) THEN ! Fixed volume ! … … 263 261 ENDIF 264 262 ! 265 ENDIF ! neuler /= 0263 ENDIF ! .NOT. l_1st_euler 266 264 ! 267 265 ! Set "now" and "before" barotropic velocities for next time step: -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DYN/dynspg_ts.F90
r12377 r12397 180 180 ! zwdramp = 1._wp / (rn_wdmin2 - rn_wdmin1) ! more general ramp 181 181 ! ! inverse of baroclinic time step 182 IF( kt == nit000 .AND. neuler == 0 ) THEN ; r1_2dt_b = 1._wp / ( rdt ) 183 ELSE ; r1_2dt_b = 1._wp / ( 2._wp * rdt ) 184 ENDIF 182 r1_2dt_b = 1._wp / r2dt 185 183 ! 186 184 ll_init = ln_bt_av ! if no time averaging, then no specific restart … … 198 196 IF(lwp) WRITE(numout,*) 199 197 ! 200 IF( neuler == 0) ll_init=.TRUE.201 ! 202 IF( ln_bt_fw .OR. neuler == 0) THEN198 IF( l_1st_euler ) ll_init=.TRUE. 199 ! 200 IF( ln_bt_fw .OR. l_1st_euler ) THEN 203 201 ll_fw_start =.TRUE. 204 202 noffset = 0 … … 209 207 CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 210 208 ! 211 ENDIF 212 ! 213 ! If forward start at previous time step, and centered integration, 214 ! then update averaging weights: 215 IF (.NOT.ln_bt_fw .AND.( neuler==0 .AND. kt==nit000+1 ) ) THEN 216 ll_fw_start=.FALSE. 217 CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 218 ENDIF 219 ! 220 209 ELSEIF( kt == nit000 + 1 ) THEN !* initialisation 2nd time-step 210 ! 211 IF( .NOT.ln_bt_fw ) THEN 212 ! If we did an Euler timestep on the first timestep we need to reset ll_fw_start 213 ! and the averaging weights. We don't have an easy way of telling whether we did 214 ! an Euler timestep on the first timestep (because l_1st_euler is reset to .false. 215 ! at the end of the first timestep) so just do this in all cases. 216 ll_fw_start = .FALSE. 217 CALL ts_wgt( ln_bt_av, ll_fw_start, icycle, wgtbtp1, wgtbtp2 ) 218 ENDIF 219 ! 220 ENDIF 221 ! 221 222 ! ----------------------------------------------------------------------------- 222 223 ! Phase 1 : Coupling between general trend and barotropic estimates (1st step) … … 701 702 ! Set advection velocity correction: 702 703 IF (ln_bt_fw) THEN 703 IF( .NOT.( kt == nit000 .AND. neuler==0) ) THEN704 IF( .NOT.( kt == nit000 .AND. l_1st_euler ) ) THEN 704 705 DO_2D_11_11 705 706 zun_save = un_adv(ji,jj) … … 889 890 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise 890 891 ! ! --------------- 891 IF( ln_rstart .AND. ln_bt_fw .AND. ( neuler/=0) ) THEN !* Read the restart file892 IF( ln_rstart .AND. ln_bt_fw .AND. (.NOT.l_1st_euler) ) THEN !* Read the restart file 892 893 CALL iom_get( numror, jpdom_autoglo, 'ub2_b' , ub2_b (:,:), ldxios = lrxios ) 893 894 CALL iom_get( numror, jpdom_autoglo, 'vb2_b' , vb2_b (:,:), ldxios = lrxios ) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DYN/dynzdf.F90
r12377 r12397 92 92 ENDIF 93 93 ENDIF 94 ! !* set time step95 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! = rdt (restart with Euler time stepping)96 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2. * rdt ! = 2 rdt (leapfrog)97 ENDIF98 !99 94 ! !* explicit top/bottom drag case 100 95 IF( .NOT.ln_drgimp ) CALL zdf_drg_exp( kt, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add top/bottom friction trend to (puu(Kaa),pvv(Kaa)) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/DYN/sshwzv.F90
r12377 r12397 75 75 REAL(wp), DIMENSION(jpi,jpj,jpt), INTENT(inout) :: pssh ! sea-surface height 76 76 ! 77 INTEGER :: jk ! dummy loop indice78 REAL(wp) :: z 2dt, zcoef ! local scalars77 INTEGER :: jk ! dummy loop index 78 REAL(wp) :: zcoef ! local scalar 79 79 REAL(wp), DIMENSION(jpi,jpj) :: zhdiv ! 2D workspace 80 80 !!---------------------------------------------------------------------- … … 88 88 ENDIF 89 89 ! 90 z2dt = 2._wp * rdt ! set time step size (Euler/Leapfrog)91 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt92 90 zcoef = 0.5_wp * r1_rau0 93 91 … … 96 94 ! !------------------------------! 97 95 IF(ln_wd_il) THEN 98 CALL wad_lmt(pssh(:,:,Kbb), zcoef * (emp_b(:,:) + emp(:,:)), z2dt, Kmm, uu, vv )96 CALL wad_lmt(pssh(:,:,Kbb), zcoef * (emp_b(:,:) + emp(:,:)), r2dt, Kmm, uu, vv ) 99 97 ENDIF 100 98 … … 109 107 ! compute the vertical velocity which can be used to compute the non-linear terms of the momentum equations. 110 108 ! 111 pssh(:,:,Kaa) = ( pssh(:,:,Kbb) - z2dt * ( zcoef * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:)109 pssh(:,:,Kaa) = ( pssh(:,:,Kbb) - r2dt * ( zcoef * ( emp_b(:,:) + emp(:,:) ) + zhdiv(:,:) ) ) * ssmask(:,:) 112 110 ! 113 111 #if defined key_agrif … … 152 150 ! 153 151 INTEGER :: ji, jj, jk ! dummy loop indices 154 REAL(wp) :: z1_2dt ! local scalars155 152 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zhdiv 156 153 !!---------------------------------------------------------------------- … … 168 165 ! ! Now Vertical Velocity ! 169 166 ! !------------------------------! 170 z1_2dt = 1. / ( 2. * rdt ) ! set time step size (Euler/Leapfrog)171 IF( neuler == 0 .AND. kt == nit000 ) z1_2dt = 1. / rdt172 167 ! 173 168 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! z_tilde and layer cases … … 187 182 ! computation of w 188 183 pww(:,:,jk) = pww(:,:,jk+1) - ( e3t(:,:,jk,Kmm) * hdiv(:,:,jk) + zhdiv(:,:,jk) & 189 & + z1_2dt * ( e3t(:,:,jk,Kaa) - e3t(:,:,jk,Kbb) ) ) * tmask(:,:,jk)184 & + r1_2dt * ( e3t(:,:,jk,Kaa) - e3t(:,:,jk,Kbb) ) ) * tmask(:,:,jk) 190 185 END DO 191 186 ! IF( ln_vvl_layer ) pww(:,:,:) = 0.e0 … … 195 190 ! computation of w 196 191 pww(:,:,jk) = pww(:,:,jk+1) - ( e3t(:,:,jk,Kmm) * hdiv(:,:,jk) & 197 & + z1_2dt * ( e3t(:,:,jk,Kaa) - e3t(:,:,jk,Kbb) ) ) * tmask(:,:,jk)192 & + r1_2dt * ( e3t(:,:,jk,Kaa) - e3t(:,:,jk,Kbb) ) ) * tmask(:,:,jk) 198 193 END DO 199 194 ENDIF … … 249 244 ENDIF 250 245 ! !== Euler time-stepping: no filter, just swap ==! 251 IF ( .NOT.( neuler == 0 .AND. kt == nit000) ) THEN ! Only do time filtering for leapfrog timesteps246 IF ( .NOT.( l_1st_euler ) ) THEN ! Only do time filtering for leapfrog timesteps 252 247 ! ! filtered "now" field 253 248 pssh(:,:,Kmm) = pssh(:,:,Kmm) + atfp * ( pssh(:,:,Kbb) - 2 * pssh(:,:,Kmm) + pssh(:,:,Kaa) ) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/IOM/restart.F90
r12377 r12397 247 247 IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 ) THEN 248 248 CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 249 IF( zrdt /= rdt ) neuler = 0 249 IF( zrdt /= rn_rdt ) THEN 250 IF(lwp) WRITE( numout,*) 251 IF(lwp) WRITE( numout,*) 'rst_read: rdt not equal to the read one' 252 IF(lwp) WRITE( numout,*) 253 IF(lwp) WRITE( numout,*) ' ==>>> forced euler first time-step' 254 l_1st_euler = .TRUE. 255 ENDIF 250 256 ENDIF 251 257 … … 270 276 CALL iom_get( numror, jpdom_autoglo, 'sshb' ,ssh(:,: ,Kbb), ldxios = lrxios ) 271 277 ELSE 272 neuler = 0278 l_1st_euler = .TRUE. ! before field not found, forced euler 1st time-step 273 279 ENDIF 274 280 ! … … 284 290 ENDIF 285 291 ! 286 IF( neuler == 0 ) THEN ! Euler restart (neuler=0)292 IF( l_1st_euler ) THEN ! Euler restart 287 293 ts (:,:,:,:,Kbb) = ts (:,:,:,:,Kmm) ! all before fields set to now values 288 294 uu (:,:,: ,Kbb) = uu (:,:,: ,Kmm) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/ISF/isfcpl.F90
r12353 r12397 68 68 ! 69 69 ! start on an euler time step 70 neuler = 070 l_1st_euler = .TRUE. 71 71 ! 72 72 ! allocation and initialisation to 0 -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traadv.F90
r12377 r12397 92 92 IF( ln_timing ) CALL timing_start('tra_adv') 93 93 ! 94 ! ! set time step95 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! at nit000 (Euler)96 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2._wp * rdt ! at nit000 or nit000+1 (Leapfrog)97 ENDIF98 !99 94 ! !== effective transport ==! 100 95 zuu(:,:,jpk) = 0._wp -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traatf.F90
r12377 r12397 113 113 IF( ln_bdy ) CALL bdy_tra( kt, Kbb, pts, Kaa ) ! BDY open boundaries 114 114 115 ! set time step size (Euler/Leapfrog)116 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! at nit000 (Euler)117 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2._wp* rdt ! at nit000 or nit000+1 (Leapfrog)118 ENDIF119 120 115 ! trends computation initialisation 121 116 IF( l_trdtra ) THEN … … 144 139 ENDIF 145 140 146 IF( neuler == 0 .AND. kt == nit000) THEN ! Euler time-stepping141 IF( l_1st_euler ) THEN ! Euler time-stepping 147 142 ! 148 143 IF (l_trdtra .AND. .NOT. ln_linssh ) THEN ! Zero Asselin filter contribution must be explicitly written out since for vvl -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traldf_iso.F90
r12377 r12397 109 109 REAL(wp) :: zmsku, zahu_w, zabe1, zcof1, zcoef3 ! local scalars 110 110 REAL(wp) :: zmskv, zahv_w, zabe2, zcof2, zcoef4 ! - - 111 REAL(wp) :: zcoef0, ze3w_2, zsign , z2dt, z1_2dt! - -111 REAL(wp) :: zcoef0, ze3w_2, zsign ! - - 112 112 REAL(wp), DIMENSION(jpi,jpj) :: zdkt, zdk1t, z2d 113 113 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdit, zdjt, zftu, zftv, ztfw … … 129 129 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) ) l_hst = .TRUE. 130 130 ! 131 ! ! set time step size (Euler/Leapfrog)132 IF( neuler == 0 .AND. kt == nit000 ) THEN ; z2dt = rdt ! at nit000 (Euler)133 ELSE ; z2dt = 2.* rdt ! (Leapfrog)134 ENDIF135 z1_2dt = 1._wp / z2dt136 131 ! 137 132 IF( kpass == 1 ) THEN ; zsign = 1._wp ! bilaplacian operator require a minus sign (eddy diffusivity >0) … … 178 173 DO_3D_10_10( 2, jpkm1 ) 179 174 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 180 zcoef0 = z2dt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 )181 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt175 zcoef0 = r2dt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 ) 176 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_2dt 182 177 END_3D 183 178 ENDIF -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traldf_triad.F90
r12377 r12397 86 86 INTEGER :: ip,jp,kp ! dummy loop indices 87 87 INTEGER :: ierr ! local integer 88 REAL(wp) :: zmsku, zabe1, zcof1, zcoef3 89 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 90 REAL(wp) :: zcoef0, ze3w_2, zsign , z2dt, z1_2dt! - -88 REAL(wp) :: zmsku, zabe1, zcof1, zcoef3 ! local scalars 89 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 ! - - 90 REAL(wp) :: zcoef0, ze3w_2, zsign ! - - 91 91 ! 92 92 REAL(wp) :: zslope_skew, zslope_iso, zslope2, zbu, zbv … … 111 111 l_hst = .FALSE. 112 112 l_ptr = .FALSE. 113 IF( cdtype == 'TRA' .AND. ( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf' ) ) ) l_ptr = .TRUE. 114 IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 115 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) ) l_hst = .TRUE. 116 ! 117 ! ! set time step size (Euler/Leapfrog) 118 IF( neuler == 0 .AND. kt == kit000 ) THEN ; z2dt = rdt ! at nit000 (Euler) 119 ELSE ; z2dt = 2.* rdt ! (Leapfrog) 113 IF( cdtype == 'TRA' ) THEN 114 IF( iom_use( 'sophtldf' ) .OR. iom_use( 'sopstldf') ) l_ptr = .TRUE. 115 IF( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 116 & iom_use("uadv_salttr") .OR. iom_use("vadv_salttr") ) l_hst = .TRUE. 120 117 ENDIF 121 z1_2dt = 1._wp / z2dt122 118 ! 123 119 IF( kpass == 1 ) THEN ; zsign = 1._wp ! bilaplacian operator require a minus sign (eddy diffusivity >0) … … 189 185 DO_3D_10_10( 2, jpkm1 ) 190 186 ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 191 zcoef0 = z2dt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 )192 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * z1_2dt187 zcoef0 = r2dt * ( akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2 ) 188 akz(ji,jj,jk) = MAX( zcoef0 - 0.5_wp , 0._wp ) * ze3w_2 * r1_2dt 193 189 END_3D 194 190 ENDIF -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/traqsr.F90
r12377 r12397 135 135 ! !-----------------------------------! 136 136 IF( kt == nit000 ) THEN !== 1st time step ==! 137 !!gm case neuler not taken into account.... 138 IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 ) THEN ! read in restart 137 IF( ln_rstart .AND. iom_varid( numror, 'qsr_hc_b', ldstop = .FALSE. ) > 0 .AND. .NOT.l_1st_euler ) THEN ! read in restart 139 138 IF(lwp) WRITE(numout,*) ' nit000-1 qsr tracer content forcing field read in the restart file' 140 139 z1_2 = 0.5_wp -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRA/trazdf.F90
r12377 r12397 64 64 IF(lwp)WRITE(numout,*) 'tra_zdf : implicit vertical mixing on T & S' 65 65 IF(lwp)WRITE(numout,*) '~~~~~~~ ' 66 ENDIF67 !68 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! at nit000, = rdt (restarting with Euler time stepping)69 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2. * rdt ! otherwise, = 2 rdt (leapfrog)70 66 ENDIF 71 67 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/TRD/trdtra.F90
r12377 r12397 236 236 INTEGER , INTENT(in ) :: Kmm ! time level index 237 237 !!---------------------------------------------------------------------- 238 239 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! = rdt (restart with Euler time stepping)240 ELSEIF( kt <= nit000 + 1) THEN ; r2dt = 2. * rdt ! = 2 rdt (leapfrog)241 ENDIF242 238 243 239 ! ! 3D output of tracers trends using IOM interface -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/nemogcm.F90
r12377 r12397 160 160 ! !== time stepping ==! 161 161 ! !-----------------------! 162 ! 163 ! !== set the model time-step ==! 164 ! 162 165 istp = nit000 163 166 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/OCE/step.F90
r12377 r12397 102 102 ! 103 103 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 104 ! model timestep 105 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 106 ! 107 IF( l_1st_euler ) THEN ; r2dt = rn_rdt ! start or restart with Euler 1st time-step 108 ELSE ; r2dt = 2._wp * rn_rdt ! restart with leapfrog 109 ENDIF 110 r1_2dt = 1._wp / r2dt 111 ! 112 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 104 113 ! update I/O and calendar 105 114 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< … … 335 344 #endif 336 345 ! 346 IF( l_1st_euler ) l_1st_euler = .FALSE. ! recover Leap-frog timestep 347 ! 337 348 IF( ln_timing ) CALL timing_stop('stp') 338 349 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/PISCES/P2Z/p2zexp.F90
r12377 r12397 114 114 ! Time filter and swap of arrays 115 115 ! ------------------------------ 116 IF( neuler == 0 .AND. kt == nittrc000) THEN ! Euler time-stepping at first time-step117 ! 116 IF( l_1st_euler ) THEN ! Euler time-stepping at first time-step 117 ! ! (only swap) 118 118 sedpocn(:,:) = zsedpoca(:,:) 119 119 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/PISCES/P4Z/p4zsms.F90
r12377 r12397 111 111 ENDIF 112 112 113 IF( ( neuler == 0 .AND. kt == nittrc000 ).OR. ln_top_euler ) THEN113 IF( l_1st_euler .OR. ln_top_euler ) THEN 114 114 DO jn = jp_pcs0, jp_pcs1 ! SMS on tracer without Asselin time-filter 115 115 tr(:,:,:,jn,Kbb) = tr(:,:,:,jn,Kmm) -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/TRP/trcatf.F90
r12377 r12397 139 139 ENDIF 140 140 ! ! Leap-Frog + Asselin filter time stepping 141 IF( (neuler == 0 .AND. kt == nittrc000).OR. ln_top_euler ) THEN ! Euler time-stepping141 IF( l_1st_euler .OR. ln_top_euler ) THEN ! Euler time-stepping 142 142 ! 143 143 IF (l_trdtrc .AND. .NOT. ln_linssh ) THEN ! Zero Asselin filter contribution must be explicitly written out since for vvl -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/trc.F90
r12377 r12397 62 62 CHARACTER(len = 256), PUBLIC :: cn_trcrst_outdir !: restart output directory 63 63 REAL(wp) , PUBLIC :: rdttrc !: passive tracer time step 64 REAL(wp) , PUBLIC :: r2dttrc !: = 2*rdttrc except at nit000 (=rdttrc) if neuler=064 REAL(wp) , PUBLIC :: r2dttrc !: = 2*rdttrc except at nit000 (=rdttrc) if l_1st_euler=.true. 65 65 LOGICAL , PUBLIC :: ln_top_euler !: boolean term for euler integration 66 66 LOGICAL , PUBLIC :: ln_trcdta !: Read inputs data from files -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/trcrst.F90
r12377 r12397 276 276 ENDIF 277 277 ! 278 IF( ln_rsttr ) THEN ; neuler = 1279 ELSE ; neuler = 0278 IF( ln_rsttr ) THEN ; l_1st_euler = .false. 279 ELSE ; l_1st_euler = .true. 280 280 ENDIF 281 281 ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/src/TOP/trcstp.F90
r12377 r12397 64 64 IF( ln_timing ) CALL timing_start('trc_stp') 65 65 ! 66 IF( ( neuler == 0 .AND. kt == nittrc000 ).OR. ln_top_euler ) THEN ! at nittrc00066 IF( l_1st_euler .OR. ln_top_euler ) THEN ! at nittrc000 67 67 r2dttrc = rdttrc ! = rdttrc (use or restarting with Euler time stepping) 68 68 ELSEIF( kt <= nittrc000 + 1 ) THEN ! at nittrc000 or nittrc000+1 -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/tests/CANAL/MY_SRC/domvvl.F90
r12377 r12397 295 295 INTEGER :: ji, jj, jk ! dummy loop indices 296 296 INTEGER , DIMENSION(3) :: ijk_max, ijk_min ! temporary integers 297 REAL(wp) :: z 2dt, z_tmin, z_tmax! local scalars297 REAL(wp) :: z_tmin, z_tmax ! local scalars 298 298 LOGICAL :: ll_do_bclinic ! local logical 299 299 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv … … 418 418 ! Leapfrog time stepping 419 419 ! ~~~~~~~~~~~~~~~~~~~~~~ 420 IF( neuler == 0 .AND. kt == nit000 ) THEN421 z2dt = rdt422 ELSE423 z2dt = 2.0_wp * rdt424 ENDIF425 420 CALL lbc_lnk( 'domvvl', tilde_e3t_a(:,:,:), 'T', 1._wp ) 426 tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + z2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:)421 tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + r2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:) 427 422 428 423 ! Maximum deformation control … … 610 605 ! - ML - e3(t/u/v)_b are allready computed in dynnxt. 611 606 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 612 IF( neuler == 0 .AND. kt == nit000) THEN607 IF( l_1st_euler ) THEN 613 608 tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 614 609 ELSE … … 827 822 e3t(:,:,:,Kbb) = e3t_0(:,:,:) 828 823 END WHERE 829 IF( neuler == 0) THEN824 IF( l_1st_euler ) THEN 830 825 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 831 826 ENDIF … … 833 828 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart files' 834 829 IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 835 IF(lwp) write(numout,*) ' neuler is forced to 0'830 IF(lwp) write(numout,*) 'l_1st_euler is forced to .true.' 836 831 CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 837 832 e3t(:,:,:,Kmm) = e3t(:,:,:,Kbb) 838 neuler = 0833 l_1st_euler = .true. 839 834 ELSE IF( id2 > 0 ) THEN 840 835 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kbb) not found in restart files' 841 836 IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 842 IF(lwp) write(numout,*) ' neuler is forced to 0'837 IF(lwp) write(numout,*) 'l_1st_euler is forced to .true.' 843 838 CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 844 839 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 845 neuler = 0840 l_1st_euler = .true. 846 841 ELSE 847 842 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart file' 848 843 IF(lwp) write(numout,*) 'Compute scale factor from sshn' 849 IF(lwp) write(numout,*) ' neuler is forced to 0'844 IF(lwp) write(numout,*) 'l_1st_euler is forced to .true.' 850 845 DO jk = 1, jpk 851 846 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kmm) ) & … … 854 849 END DO 855 850 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 856 neuler = 0851 l_1st_euler = .true. 857 852 ENDIF 858 853 ! ! ----------- ! -
NEMO/branches/2020/KERNEL-03_Storkey_Coward_RK3_stage2/tests/VORTEX/MY_SRC/domvvl.F90
r12377 r12397 323 323 INTEGER :: ji, jj, jk ! dummy loop indices 324 324 INTEGER , DIMENSION(3) :: ijk_max, ijk_min ! temporary integers 325 REAL(wp) :: z 2dt, z_tmin, z_tmax! local scalars325 REAL(wp) :: z_tmin, z_tmax ! local scalars 326 326 LOGICAL :: ll_do_bclinic ! local logical 327 327 REAL(wp), DIMENSION(jpi,jpj) :: zht, z_scale, zwu, zwv, zhdiv … … 446 446 ! Leapfrog time stepping 447 447 ! ~~~~~~~~~~~~~~~~~~~~~~ 448 IF( neuler == 0 .AND. kt == nit000 ) THEN449 z2dt = rdt450 ELSE451 z2dt = 2.0_wp * rdt452 ENDIF453 448 CALL lbc_lnk( 'domvvl', tilde_e3t_a(:,:,:), 'T', 1._wp ) 454 tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + z2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:)449 tilde_e3t_a(:,:,:) = tilde_e3t_b(:,:,:) + r2dt * tmask(:,:,:) * tilde_e3t_a(:,:,:) 455 450 456 451 ! Maximum deformation control … … 638 633 ! - ML - e3(t/u/v)_b are allready computed in dynnxt. 639 634 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN 640 IF( neuler == 0 .AND. kt == nit000) THEN635 IF( l_1st_euler ) THEN 641 636 tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 642 637 ELSE … … 849 844 e3t(:,:,:,Kbb) = e3t_0(:,:,:) 850 845 END WHERE 851 IF( neuler == 0) THEN846 IF( l_1st_euler ) THEN 852 847 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 853 848 ENDIF … … 855 850 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart files' 856 851 IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 857 IF(lwp) write(numout,*) ' neuler is forced to 0'852 IF(lwp) write(numout,*) 'l_1st_euler is forced to .true.' 858 853 CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t(:,:,:,Kbb), ldxios = lrxios ) 859 854 e3t(:,:,:,Kmm) = e3t(:,:,:,Kbb) 860 neuler = 0855 l_1st_euler = .true. 861 856 ELSE IF( id2 > 0 ) THEN 862 857 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kbb) not found in restart files' 863 858 IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 864 IF(lwp) write(numout,*) ' neuler is forced to 0'859 IF(lwp) write(numout,*) 'l_1st_euler is forced to .true.' 865 860 CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t(:,:,:,Kmm), ldxios = lrxios ) 866 861 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 867 neuler = 0862 l_1st_euler = .true. 868 863 ELSE 869 864 IF(lwp) write(numout,*) 'dom_vvl_rst WARNING : e3t(:,:,:,Kmm) not found in restart file' 870 865 IF(lwp) write(numout,*) 'Compute scale factor from sshn' 871 IF(lwp) write(numout,*) ' neuler is forced to 0'866 IF(lwp) write(numout,*) 'l_1st_euler is forced to .true.' 872 867 DO jk = 1, jpk 873 868 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kmm) ) & … … 876 871 END DO 877 872 e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 878 neuler = 0873 l_1st_euler = .true. 879 874 ENDIF 880 875 ! ! ----------- !
Note: See TracChangeset
for help on using the changeset viewer.