4444p .flag ['diffmin.gr3' ] = 0 #hydro
4545p .flag ['diffmax.gr3' ] = 0 #hydro
4646p .flag ['shapiro.gr3' ] = 0 #hydro
47+ p .flag ['soil_*.gr3' ] = 0 #hydro
4748p .flag ['tvd.prop' ] = 0 #hydro
4849p .flag ['windrot_geo2proj.gr3' ] = 0 #hydro
4950p .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 )
160161if 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
327328fname = 'diffmin.gr3'
328329if 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
333333fname = 'shapiro.gr3'
334334if 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+
340346fname = 'veg_*.gr3'
341347if 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