Skip to content

Commit afa9a54

Browse files
committed
update EPA MBM model setup
1 parent 9bb27f6 commit afa9a54

3 files changed

Lines changed: 21 additions & 15 deletions

File tree

src/Utility/Pre-Processing/EPA_MBM/param/param.nml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@
157157
! For applications that include eddying regime, refer to the manual.
158158
!-----------------------------------------------------------------------
159159
ihorcon = 2
160-
hvis_coef0 = 0.008 !const. diffusion # if ihorcon/=0; <=0.025 for ihorcon=2, <=0.125 for ihorcon=1
160+
hvis_coef0 = 0.015 !const. diffusion # if ihorcon/=0; <=0.025 for ihorcon=2, <=0.125 for ihorcon=1
161161
! cdh = 0.01 !needed only if ihorcon/=0; land friction coefficient - not active yet
162162

163163
!-----------------------------------------------------------------------
@@ -606,9 +606,9 @@
606606
! stemp_stc=0 would turn off this effect.
607607
!-----------------------------------------------------------------------
608608
istemp =1
609-
#stemp_stc = 5.0 !heat transfer coefficient W.m-2.K-1
610-
#stemp_dz(1)= 2.0 !equivalent sediment buffer depth (m) for heat into sediment
611-
#stemp_dz(2)= 0.1 !equivalent sediment buffer depth (m) for heat out of sediment
609+
!stemp_stc = 5.0 !heat transfer coefficient W.m-2.K-1
610+
!stemp_dz(1)= 2.0 !equivalent sediment buffer depth (m) for heat into sediment
611+
!stemp_dz(2)= 0.1 !equivalent sediment buffer depth (m) for heat out of sediment
612612

613613
!-----------------------------------------------------------------------
614614
! Turbulence closure.
@@ -800,7 +800,7 @@
800800
! 0.0 <= vclose_surf_frac < 1.0
801801
! 1: fully from surface (i.e. no correction as before); 0: fully from bottom
802802
!-----------------------------------------------------------------------
803-
vclose_surf_frac=1.0
803+
! vclose_surf_frac=1.0
804804

805805
!-----------------------------------------------------------------------
806806
! Option to enforce strict mass conservation for each tracer model (only works with itr_met=3,4)
-31 Bytes
Binary file not shown.

src/Utility/Pre-Processing/EPA_MBM/setup.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
p.flag['diffmin.gr3'] = 0 #hydro
4545
p.flag['diffmax.gr3'] = 0 #hydro
4646
p.flag['shapiro.gr3'] = 0 #hydro
47+
p.flag['soil_*.gr3'] = 0 #hydro
4748
p.flag['tvd.prop'] = 0 #hydro
4849
p.flag['windrot_geo2proj.gr3'] = 0 #hydro
4950
p.flag['veg_*.gr3'] = 0 #hydro: veg module (SAV drag effect)
@@ -156,7 +157,7 @@ def pattr(x,a): p.flag[x]=a
156157
if p.flag['ICM_nu.nc']==1: pm['inu_tr(7)']=2; pm['vnf1']=0.01
157158
if p.flag['SED']==1 and p.flag['WWM']==1: #for offline transport mode
158159
for i in [13,21,27,29,30]: pm['iof_hydro({})'.format(i)]=1
159-
s=num2date(p.StartT); pm['start_year']=s.year; pm['start_month']=s.month; pm['start_day']=s.day; pm['rnday']=int(p.EndT-p.StartT)
160+
s=num2date(p.StartT); pm['start_year']=s.year; pm['start_month']=s.month; pm['start_day']=s.day; pm['rnday']=int(p.EndT-p.StartT-1)
160161
if p.flag['ICM'] in [10,20]: #offline ICM mode
161162
pm['nspool']=int(6*3600/p.dt_offline); pm['ihfskip']=int(720*3600/p.dt_offline)
162163
pm['nhot_write']=pm['ihfskip']; pm['dt']=p.dt_offline; pm['wtiminc']=pm['dt']
@@ -327,8 +328,7 @@ def pattr(x,a): p.flag[x]=a
327328
fname='diffmin.gr3'
328329
if p.flag[fname]==1:
329330
print('writing '+fname)
330-
vi=ones(gd.np)*1e-6; vi[read(p.region+'lowerbay.reg').inside(gd.xy)]=8e-5
331-
gd.save(fname,value=vi)
331+
gd.save(fname,value=1e-6)
332332

333333
fname='shapiro.gr3'
334334
if p.flag[fname]==1:
@@ -337,6 +337,12 @@ def pattr(x,a): p.flag[x]=a
337337
slope=gd.compute_gradient(fmt=2)[2]; vi=shapiro_max*tanh(2*slope/threshold_slope); vi[slope<0.005]=0
338338
gd.save('shapiro.gr3',value=vi)
339339

340+
fname='soil_*.gr3'
341+
if p.flag[fname]==1:
342+
print('writing '+fname)
343+
gd.save('soil_conductivity.gr3',value=5)
344+
vi=ones(gd.np); vi[gd.z>10]=0.1; gd.save('soil_thick.gr3',value=vi)
345+
340346
fname='veg_*.gr3'
341347
if p.flag[fname]==1:
342348
print('writing '+fname)
@@ -604,10 +610,10 @@ def pattr(x,a): p.flag[x]=a
604610
if p.flag['ICM'] in [2,20]: vnames,svars,rats=vnames[:-4],svars[:-4],rats[:-4]
605611

606612
#interp
607-
fpt=(M.CB74_time>=p.StartT)*(M.CB74_time<p.EndT+2); mti=M.CB74_time[fpt]; cz=M.CB74_depth
613+
i1=abs(M.CB74_time-p.StartT).argmin(); i1=abs(M.CB74_time-p.EndT-2).argmin(); mti=M.CB74_time[i1:i2]; cz=M.CB74_depth
608614
bind=pindex(read('ICM_nudge.gr3').z!=0); lz=abs(compute_zcor(vd.sigma[bind],gd.dp[bind])).T.clip(cz.min(),cz.max())
609615
nobn=bind.size; ntr=len(svars); nt=len(mti); nvrt=vd.nvrt
610-
mys=array([M.attr('CB74_'+svar)[:,fpt]*rat for svar, rat in zip(svars,rats)]).transpose([1,0,2]) #interp in time
616+
mys=array([M.attr('CB74_'+svar)[:,i1:i2]*rat for svar, rat in zip(svars,rats)]).transpose([1,0,2]) #interp in time
611617

612618
#interp vertically, and write ICM_nu.nc
613619
from netCDF4 import Dataset; dt=30; irec=0
@@ -642,11 +648,11 @@ def pattr(x,a): p.flag[x]=a
642648
#read data
643649
if p.flag['ICM'] in [2,20]: svars,rats=svars[:-4],srats[:-4]
644650
S=read(p.atmdep,1); S.NO3=S.wetno3+S.dryno3; S.NH4=S.wetnh3+S.drynh3; S.PO4=S.wetpo4; S.ORGN=S.wetorn; S.ORGP=S.wetorp
645-
fps=S.sind[near_pts(gd.xy,S.xy[:])]; fpt=(S.time>=p.StartT)*(S.time<=(p.EndT+2))
646-
nt=sum(fpt); ntr=len(svars); trs=zeros([ntr,gd.np,nt],'float32')
651+
fps=S.sind[near_pts(gd.xy,S.xy[:])]; i1=abs(S.time-p.StartT).argmin(); i2=abs(S.time-p.EndT-2).argmin()
652+
nt=(i2-i1); ntr=len(svars); trs=zeros([ntr,gd.np,nt],'float32')
647653
for m,[svar,srat] in enumerate(zip(svars,srats)):
648654
if srat==0: continue
649-
trs[m]=S.attr(svar)[fps][:,fpt]*srat
655+
trs[m]=S.attr(svar)[fps][:,i1:i2]*srat
650656

651657
#write netcdf
652658
C=zdata(); C.dimname=['node','time','ntr','one']; C.dims=[gd.np,nt,ntr,1]
@@ -810,7 +816,7 @@ def pattr(x,a): p.flag[x]=a
810816
#-----------------------------------
811817
#watershed loading
812818
#-----------------------------------
813-
fpn=sort(pindex((C.time>=p.StartT)*(C.time<(p.EndT+2)))); mtime=C.time[fpn]
819+
fpn=sort(pindex((C.time>=(p.StartT-1e-4))*(C.time<(p.EndT+2)))); mtime=C.time[fpn]
814820
nt,ntr,nsource=len(mtime),len(svars),len(sinde); flow=zeros([nt,nsource]); trs=zeros([nt,ntr,nsource])
815821
sflow=C.flow[C.river=='susquehanna'].sum(axis=0)[fpn] #susquehanna river flow
816822

@@ -873,7 +879,7 @@ def pattr(x,a): p.flag[x]=a
873879
#--------------------------------------------------------------------------
874880
evars0=['clay1','clay2','silt', 'sand', 'RPOC', 'SRPOC', 'RPON', 'SRPON', 'RPOP', 'SRPOP', 'PIP']
875881
evars= ['clay' ,'clay' ,'silt', 'sand', 'RPOC', 'G3OC', 'RPON', 'G3ON', 'RPOP', 'G3OP', 'PIP']
876-
fps=sort(pindex((C.sho_time>=p.StartT)*(C.sho_time<(p.EndT+2)))); fpt=near_pts(C.sho_time[fps],mtime)
882+
fps=sort(pindex((C.sho_time>=(p.StartT-1e-4))*(C.sho_time<(p.EndT+2)))); fpt=near_pts(C.sho_time[fps],mtime)
877883
for i, id in enumerate(near_pts(C.sho_sxy,gd.exy[sinde])):
878884
for evar0,evar in zip(evars0,evars):
879885
rat=0.5 if evar=='clay' else 1

0 commit comments

Comments
 (0)