Skip to content

Commit aaf1306

Browse files
committed
Merge hybrid_ELM into master
Squashed commit of the following: commit feef498 Author: Fei Ye <feiye@vims.edu> Date: Mon Apr 6 15:03:24 2020 -0400 Added hybrid ELM for itr_met==4. Passed preliminary tests (itr_met=3 and 4) Mistral. commit e72e16b Author: Joseph Zhang <yjzhang@vims.edu> Date: Sun Apr 5 14:49:43 2020 -0400 Edit notes commit e9d2348 Author: Joseph Zhang <yjzhang@vims.edu> Date: Sun Apr 5 14:47:28 2020 -0400 SMall fixes in make files commit 2bd700a Author: Joseph Zhang <yjzhang@vims.edu> Date: Sat Apr 4 19:18:34 2020 -0400 Add hybridized ELM in transport to bypass small transport time step. Tested with CORIE, lock exchange. commit ccf5d97 Author: Joseph Zhang <yjzhang@vims.edu> Date: Fri Apr 3 12:37:24 2020 -0400 minor edit
1 parent 62b0354 commit aaf1306

File tree

10 files changed

+150
-27
lines changed

10 files changed

+150
-27
lines changed

CONTRIBUTING.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ nothing to commit (working directory clean)
100100

101101
`$ git push --set-upstream origin new_branch`
102102

103+
(Get updates from other with pull)
104+
`$ git pull origin new_branch`
105+
103106
When ready to merge your branch with master, there are two approaches: via pull request (PR) or local merge+push
104107

105108
2.1 Local merge + push

cmake/SCHISM.local.cyclops

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,5 @@ set(NetCDF_FORTRAN_DIR "$ENV{NETCDF_FORTRAN}" CACHE PATH "Path to NetCDF Fortran
5555

5656
##set(MPI_VERSION CACHE STRING "2")
5757
###Compile flags
58-
set(CMAKE_Fortran_FLAGS_RELEASE "-O2 -xCORE-AVX2 -fma -align array64byte -finline-functions" CACHE STRING "Fortran flags" FORCE)
58+
set(CMAKE_Fortran_FLAGS_RELEASE "-O2 -xCORE-AVX2 -fma -align array64byte -finline-functions -mcmodel medium -shared-intel" CACHE STRING "Fortran flags" FORCE)
5959

mk/Make.defs.cyclops

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ ENV = cyclops
4141
# Environment
4242
################################################################################
4343

44-
FCP = mpiifort
44+
FCP = mpif90
4545
FLD = $(FCP)
4646
FCS = $(FCP)
4747
PPFLAGS := $(PPFLAGS) -DMPIVERSION=2
4848
FCPFLAGS = $(PPFLAGS) -O2 -xCORE-AVX2 #-qopenmp
4949
#FCSFLAGS = $(FFCPFLAGS)
50-
FLDFLAGS = -O2 -xCORE-AVX2 -fma -align array64byte -finline-functions
50+
FLDFLAGS = -O2 -xCORE-AVX2 -fma -align array64byte -finline-functions -mcmodel medium -shared-intel #-fPIC
5151
#####Libraries
5252
MTSLIBS = -L./ParMetis-3.1-Sep2010/ -lparmetis -lmetis
5353
CDFLIBS = -L$(NETCDF_FORTRAN)/lib -L$(NETCDF)/lib -lnetcdf -lnetcdff

sample_inputs/param.nml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,10 @@
401401
eps1_tvd_imp = 1.e-4 !suggested value is 1.e-4, but for large suspended load, need to use a smaller value (e.g. 1.e-9)
402402
eps2_tvd_imp = 1.e-14
403403

404+
!Optional hybridized ELM transport for efficiency
405+
ielm_transport = 0 !1: turn on. Used only with itr_met>=3
406+
max_subcyc = 10 !used only if ielm_transport/=0. Max # of subcycling per time step in transport allowed
407+
404408
!if itr_met = 4, the following parameters are needed
405409
!if itr_met=4 and ipre=1, diagnostic outputs are generated for weno accuracy and stencil quality,
406410
! see subroutine weno_diag in src/Hydro/misc_subs.F90 for details

src/Core/schism_glbl.F90

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,16 @@ module schism_glbl
8181
a2_cm03,schk,schpsi
8282

8383
integer,parameter :: natrm=12 !# of _available_ tracer models at the moment (including T,S)
84+
integer,parameter :: mntracers=30 !max # of tracers, used only for dimensioning btrack arrays. Must >=ntracers
85+
8486
!Parameters from param.nml
8587
integer,save :: ipre,ipre2,indvel,imm,ihot,ics,iwbl,iharind,nws,impose_net_flux,iwindoff, &
8688
&ibc,nrampbc,nrampwind,nrampwafo,nramp,nramp_ss,ibdef,ihorcon,nstep_wwm,icou_elfe_wwm, &
8789
&iwind_form,irec_nu,itur,ihhat,inu_elev, &
8890
&inu_uv,ibcc_mean,iflux,iout_sta,nspool_sta,nhot,nhot_write, &
8991
&moitn0,mxitn0,nchi,ibtrack_test,nramp_elev,islip,ibtp,inunfl,shorewafo, &
9092
&inv_atm_bnd,ieos_type,ieos_pres,iupwind_mom,inter_mom,ishapiro,isav, &
91-
&nstep_ice,niter_shap,iunder_deep,ibtrack_openbnd,flag_fib
93+
&nstep_ice,niter_shap,iunder_deep,ibtrack_openbnd,flag_fib,ielm_transport,max_subcyc
9294
integer,save :: ntrs(natrm),nnu_pts(natrm),mnu_pts
9395
integer,save,dimension(:),allocatable :: iof_hydro,iof_wwm,iof_gen,iof_age,iof_sed,iof_eco, &
9496
&iof_icm,iof_cos,iof_fib,iof_sed2d,iof_ice,iof_ana,iof_marsh,iof_dvd,iadjust_mass_consv
@@ -114,7 +116,9 @@ module schism_glbl
114116
real(rkind),save :: q2min,tempmin,tempmax,saltmin,saltmax, &
115117
&vis_coe1,vis_coe2,h_bcc1,velmin_btrack,h_tvd,rmaxvel1,rmaxvel2, &
116118
&difnum_max_l2,wtime1,wtime2,fluxsu00,srad00,cmiu0, &
117-
&cpsi2,rpub,rmub,rnub,cpsi1,psimin,eps_min,tip_dp,sav_di0,sav_h0,sav_nv0
119+
&cpsi2,rpub,rmub,rnub,cpsi1,psimin,eps_min,tip_dp,sav_di0,sav_h0,sav_nv0, &
120+
&dtb_min_transport
121+
118122
! logical,save :: lm2d !2D or 3D model
119123
logical,save :: lhas_quad=.false. !existence of quads
120124
logical,save :: lflbc !flag to indicate existence of ifltype/=0
@@ -172,7 +176,7 @@ module schism_glbl
172176
real(rkind) :: rt2 ! time remaining from left-over from previous subdomain
173177
real(rkind) :: ut,vt,wt ! Current backtracking sub-step velocity
174178
real(rkind) :: xt,yt,zt ! Current backtracking sub-step point
175-
real(rkind) :: sclr(4) ! Backtracked values for some tracers
179+
real(rkind) :: sclr(4+mntracers) ! Backtracked values for tracers etc
176180
real(rkind) :: gcor0(3) ! global coord. of the starting pt (for ics=2)
177181
real(rkind) :: frame0(3,3) ! frame tensor at starting pt (for ics=2)
178182
end type bt_type

src/Hydro/bktrk_subs.F90

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ subroutine init_inter_btrack
6464
if(ierr/=MPI_SUCCESS) call parallel_abort('INIT_INTER_BTRACK: mpi_get_address',ierr)
6565
types(1)=itype
6666

67-
! Second part of bt_type is block of 26 doubles (including arrays)
67+
! Second part of bt_type is block of 26+mntracers doubles (including arrays)
6868
! (starting at bttmp%dtbk)
69-
blockl(2)=26
69+
blockl(2)=26+mntracers
7070
#if MPIVERSION==1
7171
call mpi_address(bttmp%dtbk,displ(2),ierr)
7272
#elif MPIVERSION==2
@@ -710,7 +710,7 @@ subroutine btrack(l_ns,ipsgb,ifl_bnd,j0,iadvf,gcor0,frame0,dtbk, &
710710
! nnel,jlev: initial and final element and level;
711711
!
712712
! Output:
713-
! sclr(4): btrack'ed values of some variables;
713+
! sclr(4+mntracers): btrack'ed values of some variables;
714714
! iexit: logical flag indicating backtracking exits augmented subdomain. If
715715
! iexit=.true., nnel is inside the aug. domain and should also be inside
716716
! one of the neighboring processes. (xt,yt) is inside nnel.
@@ -727,7 +727,7 @@ subroutine btrack(l_ns,ipsgb,ifl_bnd,j0,iadvf,gcor0,frame0,dtbk, &
727727
real(rkind), intent(in) :: gcor0(3),frame0(3,3),dtbk,vis_coe
728728
real(rkind), intent(inout) :: time_rm,time_rm2,uuint,vvint,wwint,xt,yt,zt
729729
integer, intent(inout) :: nnel,jlev
730-
real(rkind), intent(out) :: sclr(4)
730+
real(rkind), intent(out) :: sclr(4+mntracers)
731731
logical, intent(out) :: iexit
732732

733733
!Local
@@ -941,6 +941,11 @@ subroutine btrack(l_ns,ipsgb,ifl_bnd,j0,iadvf,gcor0,frame0,dtbk, &
941941
! Error: Kriging for wvel as well?
942942
if(l_ns==3) return
943943

944+
if(zrat<0._rkind.or.zrat>1._rkind) then
945+
write(errmsg,*)'BTRACK: zrat wrong:',jlev,zrat
946+
call parallel_abort(errmsg)
947+
endif
948+
944949
! Calc max/min for ELAD
945950
! If inter_mom/=0, sclr() will be updated below
946951
if(ibtrack_test==1) then
@@ -970,6 +975,18 @@ subroutine btrack(l_ns,ipsgb,ifl_bnd,j0,iadvf,gcor0,frame0,dtbk, &
970975
sclr(3)=max(sclr(3),vv2(jlev,nd),vv2(jlev-1,nd))
971976
sclr(4)=min(sclr(4),vv2(jlev,nd),vv2(jlev-1,nd))
972977
enddo !j
978+
979+
!Interp tracers
980+
sclr(5:4+ntracers)=0.d0
981+
do i=1,ntracers
982+
do j=1,i34(nnel)
983+
nd=elnode(j,nnel)
984+
!tmp=tr_nd(i,jlev,nd)*(1._rkind-zrat)+tr_nd(i,jlev-1,nd)*zrat
985+
!Transport uses split, so keep vertical level at original
986+
tmp=tr_nd(i,j0,nd)
987+
sclr(4+i)=sclr(4+i)+tmp*arco(j)
988+
enddo !j
989+
enddo !i=1,ntracers
973990
endif !ibtrack_test
974991

975992
! Kriging for vel. (excluding bnd sides)
@@ -1058,11 +1075,6 @@ subroutine btrack(l_ns,ipsgb,ifl_bnd,j0,iadvf,gcor0,frame0,dtbk, &
10581075
endif !Kriging
10591076

10601077
! nnel wet
1061-
if(zrat<0._rkind.or.zrat>1._rkind) then
1062-
write(errmsg,*)'BTRACK: zrat wrong:',jlev,zrat
1063-
call parallel_abort(errmsg)
1064-
endif
1065-
10661078
end subroutine btrack
10671079

10681080
!===============================================================================

src/Hydro/schism_init.F90

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ subroutine schism_init(indir,iths,ntime)
178178
&iharind,icou_elfe_wwm,nrampwafo,drampwafo,nstep_wwm,hmin_radstress,turbinj, &
179179
&iwbl,if_source,nramp_ss,dramp_ss,ieos_type,ieos_pres,eos_a,eos_b,slr_rate, &
180180
&rho0,shw,isav,sav_cd,nstep_ice,iunder_deep,h1_bcc,h2_bcc,hw_depth,hw_ratio, &
181-
&ibtrack_openbnd,level_age,vclose_surf_frac,iadjust_mass_consv0,ipre2
181+
&ibtrack_openbnd,level_age,vclose_surf_frac,iadjust_mass_consv0,ipre2, &
182+
&ielm_transport,max_subcyc
182183

183184
namelist /SCHOUT/iof_hydro,iof_wwm,iof_gen,iof_age,iof_sed,iof_eco,iof_icm,iof_cos,iof_fib, &
184185
&iof_sed2d,iof_ice,iof_ana,iof_marsh,iof_dvd, &
@@ -387,6 +388,7 @@ subroutine schism_init(indir,iths,ntime)
387388
!The big tracer arrays are: tr_el(ntracers,nvrt,nea2),tr_nd0(ntracers,nvrt,npa)
388389
!The order of each tracer modules can be seen above
389390
ntracers=sum(ntrs(:)) !including T,S
391+
if(mntracers<ntracers) call parallel_abort('INIT: mntracers<ntracers')
390392

391393
!'Init. ranges for each model. These index into 1:ntracers
392394
do i=1,natrm !# of _available_ tracer models at the moment
@@ -446,6 +448,7 @@ subroutine schism_init(indir,iths,ntime)
446448
vclose_surf_frac=1.0
447449
iadjust_mass_consv0=0 !Enforce mass conservation for a tracer
448450
ipre2=0
451+
ielm_transport=0; max_subcyc=10
449452

450453
!Output elev, hvel by detault
451454
iof_hydro(1)=1; iof_hydro(25)=1
@@ -1473,6 +1476,11 @@ subroutine schism_init(indir,iths,ntime)
14731476
endif
14741477
!... TWO-PHASE-MIXTURE TSINGHUA GROUP------------------
14751478

1479+
if(ielm_transport/=0) then
1480+
if(max_subcyc<=0) call parallel_abort('INIT: max_subcyc<=0')
1481+
dtb_min_transport=dt/max_subcyc !min dt for transport allowed
1482+
endif
1483+
14761484
!... Check parameter read in from param.in
14771485
if(myrank==0) write(16,*)'done reading param.nml'
14781486
!'
@@ -1655,7 +1663,7 @@ subroutine schism_init(indir,iths,ntime)
16551663
!'
16561664

16571665
! All other arrays
1658-
allocate(sdbt(4,nvrt,nsa), & !webt(nvrt,nea), bubt(2,nea), &
1666+
allocate(sdbt(2+ntracers,nvrt,nsa), & !webt(nvrt,nea), bubt(2,nea), &
16591667
& windx1(npa),windy1(npa),windx2(npa),windy2(npa),windx(npa),windy(npa), &
16601668
& tau(2,npa),tau_bot_node(3,npa),iadv(npa),windfactor(npa),pr1(npa),airt1(npa),shum1(npa), &
16611669
& pr2(npa),airt2(npa),shum2(npa),pr(npa),sflux(npa),srad(npa),tauxz(npa),tauyz(npa), &

src/Hydro/schism_step.F90

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ subroutine schism_step(it)
197197
&xlmax(nvrt),cpsi3(2:nvrt),cpsi2p(2:nvrt),q2ha(2:nvrt),xlha(2:nvrt), &
198198
&chi(nsa),chi2(nsa),vsource(nea),sav_c2(nsa),sav_beta(nsa)
199199
real(rkind) :: swild(max(100,nsa+nvrt+12+ntracers)),swild2(nvrt,12),swild10(max(4,nvrt),12), &
200-
&swild3(20+ntracers),swild4(2,4)
200+
&swild3(20+mntracers),swild4(2,4)
201201
!#ifdef USE_SED
202202
real(rkind) :: swild_m(6,ntracers),swild_w(3),q2fha(2:nvrt),q2fpha(2:nvrt),epsftmp(nvrt), &
203203
&Tpzzntr(nvrt),Dpzzntr(nvrt)
@@ -3137,7 +3137,7 @@ subroutine schism_step(it)
31373137
! swild96(1:2,nvrt,nsa): \epsilon (over/under-shoots in ELAD) for u,v (if ibtrack_test=1, 1->T and 2 is not used)
31383138
! swild97(1:2,nvrt,nsa): u,v in the next iteration (ELAD). If ibtrack_test=1, 1->T (2 not used)
31393139
! swild98(1:4,nvrt,nsa): 1:2 max/min for u; 3:4 for v (only 1:2 are used for T)
3140-
allocate(swild96(2,nvrt,nsa),swild97(2,nvrt,nsa),swild98(4,nvrt,nsa),stat=istat)
3140+
allocate(swild98(4,nvrt,nsa),stat=istat)
31413141
if(istat/=0) call parallel_abort('MAIN: fail to allocate swild98 (3.2)')
31423142

31433143
!' Debug: test backtracking alone
@@ -3324,6 +3324,7 @@ subroutine schism_step(it)
33243324
if(vmag<=velmin_btrack) then !No activity
33253325
sdbt(1,j,isd0)=su2(j,isd0)
33263326
sdbt(2,j,isd0)=sv2(j,isd0)
3327+
sdbt(3:2+ntracers,j,isd0)=(tr_nd(1:ntracers,j,n1)+tr_nd(1:ntracers,j,n2))*0.5d0
33273328
swild98(1:2,j,isd0)=su2(j,isd0) !max/min
33283329
swild98(3:4,j,isd0)=sv2(j,isd0)
33293330

@@ -3426,6 +3427,7 @@ subroutine schism_step(it)
34263427
swild98(2,j,isd0)=swild3(3) !min
34273428
else
34283429
swild98(1:4,j,isd0)=swild3(1:4)
3430+
sdbt(3:2+ntracers,j,isd0)=swild3(5:4+ntracers)
34293431
endif
34303432

34313433
!Check for ics=2 and zonal flow
@@ -3557,6 +3559,7 @@ subroutine schism_step(it)
35573559
swild98(2,j,isd0)=btlist(ibt)%sclr(3) !min
35583560
else
35593561
swild98(1:4,j,isd0)=btlist(ibt)%sclr(1:4)
3562+
sdbt(3:2+ntracers,j,isd0)=btlist(ibt)%sclr(5:4+ntracers)
35603563
endif
35613564

35623565
! xyzs(isd0,j,1)=btlist(ibt)%xt; xyzs(isd0,j,2)=btlist(ibt)%yt; xyzs(isd0,j,3)=btlist(ibt)%zt;
@@ -3588,9 +3591,22 @@ subroutine schism_step(it)
35883591
#ifdef INCLUDE_TIMING
35893592
cwtmp=mpi_wtime()
35903593
#endif
3591-
call exchange_s3d_4(sdbt)
3594+
! call exchange_s3d_4(sdbt)
35923595
call exchange_s3d_4(swild98)
3593-
! call exchange_e3dw(webt)
3596+
3597+
allocate(swild96(2,nvrt,nsa),stat=istat)
3598+
if(istat/=0) call parallel_abort('MAIN: fail to allocate swild96 (3.2)')
3599+
swild96=sdbt(1:2,:,:)
3600+
call exchange_s3d_2(swild96)
3601+
sdbt(1:2,:,:)=swild96
3602+
deallocate(swild96)
3603+
3604+
allocate(swild96(ntracers,nvrt,nsa),stat=istat)
3605+
if(istat/=0) call parallel_abort('MAIN: fail to allocate swild96 (3.3)')
3606+
swild96=sdbt(3:2+ntracers,:,:)
3607+
call exchange_s3d_tr2(swild96)
3608+
sdbt(3:2+ntracers,:,:)=swild96
3609+
deallocate(swild96)
35943610

35953611
if(ibtrack_test==1) call exchange_s3dw(tsd)
35963612

@@ -3600,6 +3616,9 @@ subroutine schism_step(it)
36003616

36013617
! ELAD for kriging
36023618
if(inter_mom/=0) then
3619+
allocate(swild96(2,nvrt,nsa),swild97(2,nvrt,nsa),stat=istat)
3620+
if(istat/=0) call parallel_abort('MAIN: fail to allocate swild96 (2.2)')
3621+
36033622
!$OMP parallel default(shared) private(iter,i,ie,k,suru,surv,ll,j,id,kin)
36043623
do iter=1,15 !100
36053624
!Calc epsilon
@@ -3689,6 +3708,7 @@ subroutine schism_step(it)
36893708
enddo !iter
36903709

36913710
!$OMP end parallel
3711+
deallocate(swild96,swild97)
36923712
endif !inter_mom; ELAD
36933713

36943714
! Debug
@@ -3830,7 +3850,7 @@ subroutine schism_step(it)
38303850
wtmp1=wtmp2
38313851
#endif
38323852

3833-
deallocate(swild96,swild97,swild98)
3853+
deallocate(swild98)
38343854

38353855
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38363856
else

0 commit comments

Comments
 (0)