35 tstep, tau_r, SnowDensMax, &
36 lvS_J_kg, lv_J_kg, tstep_real, RadMeltFact, TempMeltFact, SnowAlbMax, &
37 SnowDensMin, Temp_C, Precip, PrecipLimit, PrecipLimitAlb, &
38 nsh_real, sfr, Tsurf_ind, Tsurf_ind_snow, state_id, qn1_ind_snow, &
39 kup_ind_snow, SnowWater, deltaQi, alb1, &
40 SnowPack_in, SnowFrac_in, SnowAlb_in, SnowDens_in, SnowfallCum_in, &!input
41 SnowPack_out, SnowFrac_out, SnowAlb_out, SnowDens_out, SnowfallCum_out, &!output
42 mwh, Qm, QmFreez, QmRain, &! output
43 veg_fr, snowCalcSwitch, Qm_melt, Qm_freezState, Qm_rain, FreezMelt, &
44 FreezState, FreezStateVol, rainOnSnow, SnowDepth, mw_ind, &
53 REAL(KIND(1d0)),
PARAMETER::waterDens = 999.8395
56 INTEGER,
INTENT(in)::snowUse
57 INTEGER,
INTENT(in)::tstep
63 REAL(KIND(1d0)),
INTENT(in)::lvS_J_kg
64 REAL(KIND(1d0)),
INTENT(in)::lv_J_kg
65 REAL(KIND(1d0)),
INTENT(in)::tstep_real
66 REAL(KIND(1d0)),
INTENT(in)::RadMeltFact
67 REAL(KIND(1d0)),
INTENT(in)::TempMeltFact
68 REAL(KIND(1d0)),
INTENT(in)::SnowAlbMax
69 REAL(KIND(1d0)),
INTENT(in)::SnowDensMax
70 REAL(KIND(1d0)),
INTENT(in)::SnowDensMin
71 REAL(KIND(1d0)),
INTENT(in)::Temp_C
72 REAL(KIND(1d0)),
INTENT(in)::Precip
73 REAL(KIND(1d0)),
INTENT(in)::PrecipLimit
74 REAL(KIND(1d0)),
INTENT(in)::PrecipLimitAlb
75 REAL(KIND(1d0)),
INTENT(in)::nsh_real
76 REAL(KIND(1d0)),
INTENT(in)::alb1
77 REAL(KIND(1d0)),
INTENT(in)::tau_r
80 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::sfr
81 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::Tsurf_ind
82 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::Tsurf_ind_snow
83 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::state_id
84 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::qn1_ind_snow
85 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::kup_ind_snow
86 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowWater
87 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::deltaQi
90 REAL(KIND(1d0)),
INTENT(in)::SnowAlb_in
91 REAL(KIND(1d0)),
INTENT(in)::SnowfallCum_in
92 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowPack_in
93 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowFrac_in
94 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowDens_in
95 REAL(KIND(1d0)),
INTENT(out)::SnowAlb_out
96 REAL(KIND(1d0)),
INTENT(out)::SnowfallCum_out
97 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::SnowPack_out
98 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::SnowFrac_out
99 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::SnowDens_out
101 REAL(KIND(1d0))::SnowAlb
102 REAL(KIND(1d0))::SnowfallCum
103 REAL(KIND(1d0)),
DIMENSION(nsurf)::SnowPack
104 REAL(KIND(1d0)),
DIMENSION(nsurf)::SnowFrac
105 REAL(KIND(1d0)),
DIMENSION(nsurf)::SnowDens
108 REAL(KIND(1d0)),
INTENT(out)::mwh
110 REAL(KIND(1d0)),
INTENT(out)::Qm
111 REAL(KIND(1d0)),
INTENT(out)::QmFreez
112 REAL(KIND(1d0)),
INTENT(out)::QmRain
114 REAL(KIND(1d0)),
INTENT(out)::veg_fr
116 INTEGER,
DIMENSION(nsurf),
INTENT(out)::snowCalcSwitch
118 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::Qm_melt
119 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::Qm_freezState
120 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::Qm_rain
121 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::FreezMelt
122 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::FreezState
123 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::FreezStateVol
124 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::rainOnSnow
125 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::SnowDepth
126 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::mw_ind
128 REAL(KIND(1d0)),
DIMENSION(ncolumnsDataOutSnow_notime),
INTENT(out) :: dataOutLineSnow
131 snowfallcum = snowfallcum_in
132 snowpack = snowpack_in
133 snowfrac = snowfrac_in
134 snowdens = snowdens_in
136 IF (snowuse == 1)
THEN 138 tstep, snowfrac_in, snowdens_in, &
139 tau_r, snowdensmax, snowdensmin)
142 lvs_j_kg, lv_j_kg, tstep_real, radmeltfact, tempmeltfact, &
143 snowalbmax, snowdensmin, temp_c, precip, preciplimit, preciplimitalb, &
144 nsh_real, waterdens, sfr, tsurf_ind, state_id, qn1_ind_snow, &
145 snowwater, deltaqi, snowpack, snowfrac, snowalb, snowdens, snowfallcum, &
146 mwh, fwh, qm, qmfreez, qmrain, snowcalcswitch, &
147 qm_melt, qm_freezstate, qm_rain, freezmelt, freezstate, freezstatevol, &
148 rainonsnow, snowdepth, mw_ind)
176 snowalb_out = snowalb
177 snowfallcum_out = snowfallcum
178 snowpack_out = snowpack
179 snowfrac_out = snowfrac
180 snowdens_out = snowdens
183 dataoutlinesnow = [ &
185 qm_rain(1:
nsurf), qm_freezstate(1:
nsurf), snowfrac_out(1:(
nsurf - 1)), &
186 rainonsnow(1:
nsurf), &
189 snowdepth(1:
nsurf), tsurf_ind_snow(1:
nsurf), &
244 REAL(KIND(1d0)),
INTENT(in)::lvS_J_kg
245 REAL(KIND(1d0)),
INTENT(in)::lv_J_kg
246 REAL(KIND(1d0)),
INTENT(in)::tstep_real
247 REAL(KIND(1d0)),
INTENT(in)::RadMeltFact
248 REAL(KIND(1d0)),
INTENT(in)::TempMeltFact
249 REAL(KIND(1d0)),
INTENT(in)::SnowAlbMax
250 REAL(KIND(1d0)),
INTENT(in)::SnowDensMin
251 REAL(KIND(1d0)),
INTENT(in)::Temp_C
252 REAL(KIND(1d0)),
INTENT(in)::Precip
253 REAL(KIND(1d0)),
INTENT(in)::PrecipLimit
254 REAL(KIND(1d0)),
INTENT(in)::PrecipLimitAlb
255 REAL(KIND(1d0)),
INTENT(in)::nsh_real
256 REAL(KIND(1d0)),
INTENT(in)::waterdens
258 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::sfr
259 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::Tsurf_ind
260 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::state_id
261 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::qn1_ind_snow
262 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowWater
263 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::deltaQi
266 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::SnowPack
267 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::SnowFrac
268 REAL(KIND(1d0)),
INTENT(inout)::SnowAlb
269 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::SnowDens
270 REAL(KIND(1d0)),
INTENT(inout)::SnowfallCum
273 REAL(KIND(1d0)),
INTENT(out)::mwh
274 REAL(KIND(1d0)),
INTENT(out)::fwh
275 REAL(KIND(1d0)),
INTENT(out)::Qm
276 REAL(KIND(1d0)),
INTENT(out)::QmFreez
277 REAL(KIND(1d0)),
INTENT(out)::QmRain
280 INTEGER,
DIMENSION(nsurf),
INTENT(out)::snowCalcSwitch
282 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::Qm_melt
283 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::Qm_freezState
284 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::Qm_rain
285 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::FreezMelt
286 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::FreezState
287 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::FreezStateVol
288 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::rainOnSnow
289 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::SnowDepth
290 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::mw_ind
293 REAL(KIND(1d0))::AdjMeltFact
294 REAL(KIND(1d0))::Watfreeze
296 REAL(KIND(1d0)),
PARAMETER::cw = 4190
324 IF (sfr(is) /= 0)
THEN 326 IF (snowpack(is) > 0)
THEN 328 snowdepth(is) = (snowpack(is)/1000)*waterdens/snowdens(is)
333 IF (temp_c >= 0)
THEN 334 IF (qn1_ind_snow(is) < 0)
THEN 335 mw_ind(is) = tempmeltfact*temp_c
337 mw_ind(is) = radmeltfact*(qn1_ind_snow(is))
342 mw_ind(is) = tempmeltfact*temp_c*adjmeltfact
345 mw_ind(is) = mw_ind(is)/nsh_real
347 IF (mw_ind(is) > snowpack(is)) mw_ind(is) = snowpack(is)
352 qm_melt(is) = waterdens*((mw_ind(is)/tstep_real)/1000)*(lvs_j_kg - lv_j_kg)
355 IF (mw_ind(is) < 0)
THEN 357 freezmelt(is) = -mw_ind(is)
361 IF (freezmelt(is) > snowwater(is)) freezmelt(is) = snowwater(is)
364 qm_melt(is) = waterdens*((-freezmelt(is)/tstep_real)/1000)*(lvs_j_kg - lv_j_kg)
371 IF (temp_c >= preciplimit .AND. precip > 0)
THEN 372 qm_rain(is) = waterdens*cw*(temp_c - preciplimit)*(precip*0.001/tstep_real)
373 IF (qm_rain(is) < 0)
THEN 376 rainonsnow(is) = precip
385 IF (tsurf_ind(is) < 0 .AND. state_id(is) > 0)
THEN 387 snowcalcswitch(is) = 1
395 freezstate(is) = -tempmeltfact*tsurf_ind(is)/nsh_real
398 IF (freezstate(is) > state_id(is)) freezstate(is) = state_id(is)
400 IF (snowpack(is) == 0 .OR. snowfrac(is) == 0)
THEN 401 freezstatevol(is) = freezstate(is)
403 freezstatevol(is) = freezstate(is)*(1 - snowfrac(is))/snowfrac(is)
408 IF (freezstatevol(is) < 0.00000000001 .AND. freezstate(is) < state_id(is))
THEN 410 freezstatevol(is) = 0
414 qm_freezstate(is) = -waterdens*(freezstate(is)/tstep_real/1000)*(lvs_j_kg - lv_j_kg)
423 watfreeze = 100*(0 - temp_c)/(waterdens*(lvs_j_kg - lv_j_kg))
424 freezstate(is) = watfreeze
425 qm_freezstate(is) = -waterdens*(watfreeze/tstep_real/1000)*(lvs_j_kg - lv_j_kg)
434 IF (snowpack(is) > 0 .OR. (precip > 0 .AND. tsurf_ind(is) < 0))
THEN 435 snowcalcswitch(is) = 1
444 IF (precip > 0 .AND. tsurf_ind(is) < 0 .AND. snowpack(is) > 0)
THEN 445 snowdens(is) = snowdens(is)*snowpack(is)/(snowpack(is) + precip) + snowdensmin*precip/(snowpack(is) + precip)
449 mwh = mwh + mw_ind(is)*sfr(is)*snowfrac(is)
450 fwh = fwh + freezmelt(is)*sfr(is)*snowfrac(is)
451 qm = qm + qm_melt(is)*sfr(is)*snowfrac(is)
452 qmrain = qmrain + qm_rain(is)*sfr(is)*snowfrac(is)
453 qmfreez = qmfreez + deltaqi(is)*sfr(is)*snowfrac(is) + qm_freezstate(is)*sfr(is)*(1 - snowfrac(is))
459 IF (precip > 0 .AND. sum(snowpack) > 0 .AND. temp_c < 0)
THEN 461 snowfallcum = snowfallcum + precip
463 IF (snowfallcum > preciplimitalb)
THEN 478 tstep, imin, it, dectime, is, &!input
479 EvapMethod, CRWmin, CRWmax, nsh_real, lvS_J_kg, avdens, &
480 avRh, Press_hPa, Temp_C, RAsnow, psyc_hPa, avcp, sIce_hPa, &
481 PervFraction, vegfraction, addimpervious, &
482 vpd_hPa, qn_e, s_hPa, ResistSurf, RA, rb, tlv, snowdensmin, SnowProf_24hr, precip, &
483 PipeCapacity, RunoffToWater, &
484 addVeg, SnowLimPaved, SnowLimBldg, FlowChange, drain, &
485 WetThresh, stateOld, mw_ind, SoilStoreCap, rainonsnow, &
486 freezmelt, freezstate, freezstatevol, &
487 Qm_Melt, Qm_rain, Tsurf_ind, sfr, dayofWeek_id, StoreDrainPrm, SnowPackLimit, &
488 AddWater, addwaterrunoff, &
489 soilstore_id, SnowPack, SurplusEvap, &!inout
490 SnowFrac, SnowWater, iceFrac, SnowDens, &
491 runoffAGimpervious, runoffAGveg, surplusWaterBody, &
492 rss_nsurf, runoffSnow, & ! output
493 runoff, runoffSoil, chang, changSnow, SnowToSurf, state_id, ev_snow, &
494 SnowDepth, SnowRemoval, swe, ev, chSnow_tot, &
495 ev_tot, qe_tot, runoff_tot, surf_chang_tot, &
496 runoffPipes, mwstore, runoffwaterbody)
518 INTEGER,
PARAMETER::snowfractionchoice = 2
519 REAL(KIND(1d0)),
PARAMETER::waterDens = 999.8395
523 INTEGER,
INTENT(in)::tstep
524 INTEGER,
INTENT(in)::imin
525 INTEGER,
INTENT(in)::it
526 INTEGER,
INTENT(in)::is
533 INTEGER,
INTENT(in)::EvapMethod
534 INTEGER,
DIMENSION(3),
INTENT(in) ::DayofWeek_id
536 REAL(KIND(1d0)),
INTENT(in)::dectime
537 REAL(KIND(1d0)),
INTENT(in)::CRWmin
538 REAL(KIND(1d0)),
INTENT(in)::CRWmax
539 REAL(KIND(1d0)),
INTENT(in)::nsh_real
540 REAL(KIND(1d0)),
INTENT(in)::lvS_J_kg
542 REAL(KIND(1d0)),
INTENT(in)::avdens
543 REAL(KIND(1d0)),
INTENT(in)::vpd_hPa
544 REAL(KIND(1d0)),
INTENT(in)::qn_e
545 REAL(KIND(1d0)),
INTENT(in)::avRh
546 REAL(KIND(1d0)),
INTENT(in)::Press_hPa
547 REAL(KIND(1d0)),
INTENT(in)::Temp_C
548 REAL(KIND(1d0)),
INTENT(in)::RAsnow
549 REAL(KIND(1d0)),
INTENT(in)::psyc_hPa
550 REAL(KIND(1d0)),
INTENT(in)::avcp
551 REAL(KIND(1d0)),
INTENT(in)::sIce_hPa
552 REAL(KIND(1d0)),
INTENT(in)::PervFraction
553 REAL(KIND(1d0)),
INTENT(in)::vegfraction
554 REAL(KIND(1d0)),
INTENT(in)::addimpervious
556 REAL(KIND(1d0)),
INTENT(in)::s_hPa
557 REAL(KIND(1d0)),
INTENT(in)::ResistSurf
559 REAL(KIND(1d0)),
INTENT(in)::RA
560 REAL(KIND(1d0)),
INTENT(in)::rb
561 REAL(KIND(1d0)),
INTENT(in)::tlv
562 REAL(KIND(1d0)),
INTENT(in)::snowdensmin
563 REAL(KIND(1d0)),
INTENT(in)::precip
564 REAL(KIND(1d0)),
INTENT(in)::PipeCapacity
565 REAL(KIND(1d0)),
INTENT(in)::RunoffToWater
566 REAL(KIND(1d0)),
INTENT(in)::addVeg
567 REAL(KIND(1d0)),
INTENT(in)::SnowLimPaved
568 REAL(KIND(1d0)),
INTENT(in)::SnowLimBldg
569 REAL(KIND(1d0)),
INTENT(in)::FlowChange
571 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::drain
572 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::WetThresh
573 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::stateOld
574 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::mw_ind
575 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SoilStoreCap
576 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::rainonsnow
577 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::freezmelt
578 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::freezstate
579 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::freezstatevol
580 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::Qm_Melt
581 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::Qm_rain
582 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::Tsurf_ind
583 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::sfr
584 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowPackLimit
585 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::AddWater
586 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::addwaterrunoff
587 REAL(KIND(1d0)),
DIMENSION(6, nsurf),
INTENT(in)::StoreDrainPrm
588 REAL(KIND(1d0)),
DIMENSION(0:23, 2),
INTENT(in)::SnowProf_24hr
591 REAL(KIND(1d0)),
INTENT(inout)::runoffAGveg
592 REAL(KIND(1d0)),
INTENT(inout)::runoffAGimpervious
593 REAL(KIND(1d0)),
INTENT(inout)::surplusWaterBody
595 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::soilstore_id
596 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::SnowPack
597 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::SnowFrac
598 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::SnowWater
599 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::iceFrac
600 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(inout)::SnowDens
601 REAL(KIND(1d0)),
DIMENSION(2),
INTENT(inout):: SurplusEvap
603 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::rss_nsurf
604 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::runoffSnow
605 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::runoff
606 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::runoffSoil
607 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::chang
608 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::changSnow
609 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::SnowToSurf
610 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::state_id
611 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::SnowDepth
612 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::ev_snow
613 REAL(KIND(1d0)),
DIMENSION(2),
INTENT(out)::SnowRemoval
615 REAL(KIND(1d0)),
INTENT(out)::swe
616 REAL(KIND(1d0)),
INTENT(out)::ev
617 REAL(KIND(1d0)),
INTENT(out)::ev_tot
618 REAL(KIND(1d0)),
INTENT(out)::chSnow_tot
619 REAL(KIND(1d0)),
INTENT(out)::qe_tot
620 REAL(KIND(1d0)),
INTENT(out)::runoff_tot
621 REAL(KIND(1d0)),
INTENT(out)::surf_chang_tot
622 REAL(KIND(1d0)),
INTENT(out)::runoffPipes
623 REAL(KIND(1d0)),
INTENT(out)::mwstore
624 REAL(KIND(1d0)),
INTENT(out)::runoffwaterbody
629 REAL(KIND(1d0))::MeltExcess
630 REAL(KIND(1d0))::snowTotInit
631 REAL(KIND(1d0))::EvPart
632 REAL(KIND(1d0))::runoffTest
633 REAL(KIND(1d0))::snowFracFresh1
634 REAL(KIND(1d0))::snowFracFresh2
635 REAL(KIND(1d0))::snowFracOld
636 REAL(KIND(1d0))::WaterHoldCapFrac
638 REAL(KIND(1d0))::tlv_sub
642 REAL(KIND(1d0)),
PARAMETER :: IPThreshold_mmhr = 10
644 REAL(KIND(1d0)),
DIMENSION(7)::capStore
667 IF (dayofweek_id(1) == 1 .OR. dayofweek_id(1) == 7) iu = 2
684 snowtotinit = snowpack(is) + snowwater(is)
687 IF (snowdens(is) >= 200)
THEN 688 waterholdcapfrac = crwmin
690 waterholdcapfrac = crwmin + (crwmax - crwmin)*(200 - snowdens(is))/200
696 capstore(is) = storedrainprm(6, is)
697 IF (snowfrac(is) < 1)
CALL cal_evap( &
698 evapmethod, state_id(is), wetthresh(is), capstore(is), &
699 vpd_hpa, avdens, avcp, qn_e, s_hpa, psyc_hpa, resistsurf, ra, rb, tlv, &
700 rss_nsurf(is), ev, qe)
702 IF (snowfrac(is) > 0)
THEN 703 call evap_suews_snow(qm_melt(is), qm_rain(is), lvs_j_kg, avdens, avrh, press_hpa, temp_c, rasnow, &
704 psyc_hpa, tstep, avcp, sice_hpa, dectime, ev_snow(is), tlv_sub)
710 IF (pervfraction /= 0)
THEN 726 IF (snowpack(is) > 0 .AND. snowfrac(is) == 1)
THEN 728 ev_snow(is) = ev_snow(is) + evpart
731 changsnow(is) = (precip + freezmelt(is)) - (mw_ind(is) + ev_snow(is))
734 IF (rainonsnow(is) > 0)
THEN 735 changsnow(is) = changsnow(is) - precip
736 snowwater(is) = snowwater(is) + rainonsnow(is)
739 snowpack(is) = snowpack(is) + changsnow(is)
742 IF (snowpack(is) > 0)
THEN 745 snowwater(is) = snowwater(is) + mw_ind(is) - freezmelt(is)
748 fwc = waterholdcapfrac*snowpack(is)
751 IF (snowwater(is) >= fwc)
THEN 753 meltexcess = snowwater(is) - fwc
755 runoffsnow(is) = runoffsnow(is) + meltexcess
759 IF (snowprof_24hr(it, iu) == 1 .AND. is < 3 .AND. (imin == (nsh_real - 1)/nsh_real*60)) &
763 snowpack, snowremoval, &
764 snowlimpaved, snowlimbldg)
766 ELSEIF (snowpack(is) < 0)
THEN 769 snowwater(is) = snowwater(is) - freezmelt(is) + mw_ind(is) + snowpack(is)
775 IF (snowwater(is) < 0)
THEN 776 ev_snow(is) = ev_snow(is) + snowwater(is)
777 IF (ev_snow(is) < 0) ev_snow(is) = 0
778 changsnow(is) = changsnow(is) + snowwater(is)
781 chang(is) = snowwater(is)
782 state_id(is) = state_id(is) + chang(is)
789 ELSEIF (snowfrac(is) < 1)
THEN 792 IF (snowpack(is) > 0)
THEN 793 ev_snow(is) = ev_snow(is) + evpart
797 changsnow(is) = (precip + freezmelt(is) + freezstatevol(is)) - (mw_ind(is) + ev_snow(is))
800 IF (rainonsnow(is) > 0)
THEN 801 changsnow(is) = changsnow(is) - precip
802 snowwater(is) = snowwater(is) + rainonsnow(is)
804 snowpack(is) = snowpack(is) + changsnow(is)
811 IF (precip > 0 .AND. freezstate(is) == state_id(is))
THEN 813 ELSEIF (precip == 0 .AND. freezstate(is) > 0 .AND. freezstate(is) == state_id(is))
THEN 818 ELSEIF (freezstate(is) > 0 .AND. freezstate(is) < state_id(is))
THEN 819 snowfracfresh1 = 0.95
830 ELSEIF (snowpack(is) == 0 .AND. tsurf_ind(is) < 0)
THEN 835 IF ((precip > 0 .AND. state_id(is) == 0) .OR. (precip == 0 .AND. freezstate(is) == state_id(is)) .OR. &
836 (precip > 0 .AND. freezstate(is) == state_id(is)))
THEN 839 changsnow(is) = precip + freezstatevol(is)
840 snowpack(is) = snowpack(is) + changsnow(is)
843 icefrac(is) = freezstate(is)/(freezstate(is) + precip)
844 snowdens(is) = snowdensmin
847 IF (freezstate(is) > 0 .AND. freezstate(is) < state_id(is))
THEN 849 changsnow(is) = precip + freezstatevol(is)
850 snowpack(is) = snowpack(is) + changsnow(is)
851 snowfracfresh2 = 0.95
856 snowdens(is) = snowdensmin
864 IF (snowpack(is) > 0)
THEN 867 snowwater(is) = snowwater(is) + mw_ind(is) - freezmelt(is)
870 fwc = waterholdcapfrac*snowpack(is)
873 IF (snowwater(is) >= fwc)
THEN 875 meltexcess = snowwater(is) - fwc
882 runoffsnow(is) = runoffsnow(is) + meltexcess
884 snowtosurf(is) = snowtosurf(is) + meltexcess*snowfrac(is)/(1 - snowfrac(is))
889 IF (snowprof_24hr(it, iu) == 1 .AND. is < 3 .AND. (imin == (nsh_real - 1)/nsh_real*60)) &
893 snowpack, snowremoval, &
894 snowlimpaved, snowlimbldg)
897 ELSEIF (snowpack(is) < 0)
THEN 900 snowwater(is) = snowwater(is) - freezmelt(is) + mw_ind(is) + snowpack(is)
907 IF (snowwater(is) < 0)
THEN 908 ev_snow(is) = ev_snow(is) + snowwater(is)
909 IF (ev_snow(is) < 0) ev_snow(is) = 0
910 changsnow(is) = changsnow(is) + snowwater(is)
913 snowtosurf(is) = snowtosurf(is) + snowwater(is)*snowfrac(is)/(1 - snowfrac(is))
924 IF (precip > ipthreshold_mmhr/nsh_real)
THEN 926 runoff(is) = runoff(is) + (precip + snowtosurf(is) + addwater(is) - ipthreshold_mmhr/nsh_real)
927 chang(is) = ipthreshold_mmhr/nsh_real - (drain(is) + ev + freezstate(is))
930 chang(is) = precip + snowtosurf(is) + addwater(is) - (drain(is) + ev + freezstate(is))
933 state_id(is) = state_id(is) + chang(is)
939 runoff(is) = runoff(is) + drain(is)*addwaterrunoff(is)
941 IF (state_id(is) < 0.0)
THEN 942 surplusevap(is) = abs(state_id(is))
943 ev = ev - surplusevap(is)
947 ELSEIF (is >= 3 .AND. snowfrac(is) < 1)
THEN 952 IF (vegfraction > 0)
THEN 953 IF (precip + addveg*(sfr(is)/vegfraction) > (ipthreshold_mmhr/nsh_real))
THEN 954 runoff(is) = runoff(is) + (precip + addveg*(sfr(is)/vegfraction) + &
955 snowtosurf(is) + addwater(is) - (ipthreshold_mmhr/nsh_real))
956 chang(is) = (ipthreshold_mmhr/nsh_real) - (drain(is) + ev + freezstate(is))
958 chang(is) = precip + addveg*(sfr(is)/vegfraction) + snowtosurf(is) + &
959 addwater(is) - (drain(is) + ev + freezstate(is))
962 chang(is) = precip + snowtosurf(is) + addwater(is) - (drain(is) + ev + freezstate(is))
965 state_id(is) = state_id(is) + chang(is)
969 soilstore_id(is) = soilstore_id(is) + drain(is)*addwaterrunoff(is)*(1 - snowfrac(is))
971 runoff(is) = runoff(is) + drain(is)*addwaterrunoff(is)
975 IF (state_id(is) < 0.0)
THEN 977 IF ((soilstore_id(is) + state_id(is)) >= 0 .AND. temp_c > 0)
THEN 979 soilstore_id(is) = soilstore_id(is) + state_id(is)*(1 - snowfrac(is))
983 chang(is) = chang(is) + state_id(is)
984 ev = ev + state_id(is)
990 IF (soilstore_id(is) > soilstorecap(is))
THEN 991 runofftest = runofftest + (soilstore_id(is) - soilstorecap(is))
992 soilstore_id(is) = soilstorecap(is)
993 ELSEIF (soilstore_id(is) < 0)
THEN 1005 IF (snowfracfresh2 > 0)
THEN 1006 surf_chang_tot = (state_id(is) - stateold(is))*sfr(is)*(1 - snowfrac(is)) - precip*sfr(is)*(1 - snowfracfresh2)
1007 chsnow_tot = ((snowpack(is) + snowwater(is)) - snowtotinit)*sfr(is)*(1 - snowfrac(is)) - precip*sfr(is)*snowfracfresh2
1009 surf_chang_tot = (state_id(is) - stateold(is))*sfr(is)*(1 - snowfrac(is))
1010 chsnow_tot = ((snowpack(is) + snowwater(is)) - snowtotinit)*sfr(is)*max(snowfrac(is), snowfracold)
1015 ev_tot = ev*sfr(is)*(1 - snowfrac(is)) + ev_snow(is)*sfr(is)*max(snowfrac(is), snowfracold)
1016 qe_tot = ev_snow(is)*tlv_sub*sfr(is)*snowfrac(is) + ev*tlv*sfr(is)*(1 - snowfrac(is))
1018 ev_tot = ev*sfr(is)*(1 - snowfrac(is)) + ev_snow(is)*sfr(is)*max(snowfrac(is), snowfracold)
1019 qe_tot = ev_snow(is)*tlv_sub*sfr(is)*max(snowfrac(is), snowfracold) + ev*tlv*sfr(is)*(1 - snowfrac(is))
1025 runoffpipes = runoffpipes + runoffsnow(is)*sfr(is)*max(snowfrac(is), snowfracold) + runoff(is)*sfr(is)*(1 - snowfrac(is)) &
1026 + runofftest*sfr(is)
1029 sfr, pipecapacity, runofftowater, &
1030 runoffagimpervious, surpluswaterbody, runoffagveg, runoffpipes)
1032 runoff_tot = runoffsnow(is)*sfr(is)*max(snowfrac(is), snowfracold) + runoff(is)*sfr(is)*(1 - snowfrac(is)) &
1033 + runofftest*sfr(is)
1036 IF (snowdens(is) /= 0)
THEN 1037 snowdepth(is) = snowpack(is)*waterdens/snowdens(is)
1041 swe = swe + snowpack(is)*sfr(is)*max(snowfrac(is), snowfracold)
1042 mwstore = mwstore + snowwater(is)*sfr(is)*max(snowfrac(is), snowfracold)
1060 IF (snowfracfresh1 > 0) snowfrac(is) = snowfracfresh1
1061 IF (snowfracfresh2 > 0) snowfrac(is) = snowfracfresh2
1069 IF (snowfractionchoice == 2)
THEN 1070 IF (snowpack(is) > 0 .AND. mw_ind(is) > 0)
THEN 1072 IF (snowfrac(is) < 0.001) snowfrac(is) = 0.001
1073 ELSEIF (snowpack(is) == 0)
THEN 1096 fwc = waterholdcapfrac*snowpack(
watersurf)
1099 IF (snowwater(
watersurf) >= fwc .AND. temp_c >= 0)
THEN 1105 ELSEIF (snowpack(is) < 0)
THEN 1140 runoff_tot = runoff(is)
1154 SUBROUTINE evap_suews_snow(Qm, QP, lvS_J_kg, avdens, avRh, Press_hPa, Temp_C, RAsnow, psyc_hPa, &
1155 tstep, avcp, sIce_hPa, dectime, ev_snow, tlv_sub)
1162 REAL(KIND(1d0)),
INTENT(in)::Qm
1163 REAL(KIND(1d0)),
INTENT(in)::QP
1164 REAL(KIND(1d0)),
INTENT(in)::lvS_J_kg
1165 REAL(KIND(1d0)),
INTENT(in)::avdens
1166 REAL(KIND(1d0)),
INTENT(in)::avRh
1167 REAL(KIND(1d0)),
INTENT(in)::Press_hPa
1168 REAL(KIND(1d0)),
INTENT(in)::Temp_C
1169 REAL(KIND(1d0)),
INTENT(in)::RAsnow
1170 REAL(KIND(1d0)),
INTENT(in)::psyc_hPa
1171 REAL(KIND(1d0)),
INTENT(in)::avcp
1172 REAL(KIND(1d0)),
INTENT(in)::sIce_hPa
1173 REAL(KIND(1d0)),
INTENT(in)::dectime
1174 INTEGER,
INTENT(in):: tstep
1176 REAL(KIND(1d0)),
INTENT(out)::ev_snow
1177 REAL(KIND(1d0)),
INTENT(out)::tlv_sub
1180 REAL(KIND(1d0))::e_snow, &
1191 tstep_real =
REAL(tstep, kind(1d0))
1193 sae_snow = sice_hpa*(qp - qm)
1196 eaice_hpa = avrh/100*esice_hpa
1197 vdrcice = (esice_hpa - eaice_hpa)*avdens*avcp
1198 tlv_sub = lvs_j_kg/tstep_real
1199 e_snow = sae_snow + vdrcice/rasnow
1200 qe_snow = e_snow/(sice_hpa + psyc_hpa)
1201 ev_snow = qe_snow/tlv_sub
1211 is, PavSurf, BldgSurf, nsurf, &
1213 SnowPack, SnowRemoval, &
1214 SnowLimPaved, SnowLimBldg)
1217 INTEGER,
INTENT(in) :: is, PavSurf, BldgSurf, nsurf
1218 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in) :: SnowFrac, sfr
1219 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out):: SnowPack, SnowRemoval
1220 REAL(KIND(1d0)),
INTENT(in) :: SnowLimPaved, SnowLimBldg
1223 IF (is == pavsurf)
THEN 1224 IF (snowpack(pavsurf) > snowlimpaved)
THEN 1225 snowremoval(pavsurf) = (snowpack(pavsurf) - snowlimpaved)*sfr(pavsurf)*snowfrac(pavsurf)
1226 snowpack(pavsurf) = snowlimpaved
1230 IF (is == bldgsurf)
THEN 1231 IF (snowpack(bldgsurf) > snowlimbldg)
THEN 1232 snowremoval(2) = (snowpack(bldgsurf) - snowlimbldg)*sfr(bldgsurf)*snowfrac(bldgsurf)
1233 snowpack(bldgsurf) = snowlimbldg
1255 REAL(KIND(1d0))::asc, sweD, swe
1262 IF (swe <= swed)
THEN 1263 asc = ((swe/swed))**2
1271 IF (swe <= swed)
THEN 1272 IF ((swe/swed) < 0.9)
THEN 1273 asc = (swe/swed)*0.5
1281 IF (swe > 0) asc = 1
1285 IF (swe <= swed)
THEN 1287 asc = 1 - ((1/3.1416)*acos(2*(swe/swed) - 1))**1.7
1300 sfr, SnowFrac, &!input
1305 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in) :: sfr
1306 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in) :: SnowFrac
1308 REAL(KIND(1d0)),
INTENT(out) :: veg_fr
1310 veg_fr = dot_product(sfr(3:7), 1 - snowfrac(3:7))
1334 SnowPack_prev, SnowAlb_prev, SnowDens_prev, &
1335 SnowAlb_next, SnowDens_next & ! output
1341 INTEGER,
INTENT(in)::tstep
1343 REAL(KIND(1D0)),
INTENT(in)::Temp_C
1344 REAL(KIND(1D0)),
INTENT(in)::tau_a
1345 REAL(KIND(1D0)),
INTENT(in)::tau_f
1346 REAL(KIND(1D0)),
INTENT(in)::tau_r
1347 REAL(KIND(1D0)),
INTENT(in)::SnowDensMax
1348 REAL(KIND(1D0)),
INTENT(in)::SnowDensMin
1349 REAL(KIND(1D0)),
INTENT(in)::SnowAlbMax
1350 REAL(KIND(1D0)),
INTENT(in)::SnowAlbMin
1352 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowPack_prev
1354 REAL(KIND(1d0)),
INTENT(in)::SnowAlb_prev
1355 REAL(KIND(1d0)),
INTENT(out)::SnowAlb_next
1357 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowDens_prev
1358 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(out)::SnowDens_next
1361 REAL(KIND(1D0))::alb_change
1362 REAL(KIND(1D0))::dens_change
1363 REAL(KIND(1D0)),
parameter:: tau_1 = 24*60*60
1390 tstep, snowpack_prev, snowalb_prev, temp_c, &
1391 tau_a, tau_f, snowalbmax, snowalbmin)
1406 tstep, snowpack_prev, snowdens_prev, &
1407 tau_r, snowdensmax, snowdensmin)
1412 tstep, SnowPack_prev, SnowAlb_prev, Temp_C, &
1413 tau_a, tau_f, SnowAlbMax, SnowAlbMin) &
1414 result(snowalb_next)
1416 INTEGER,
INTENT(in)::tstep
1418 REAL(KIND(1d0)),
DIMENSION(7),
INTENT(in)::SnowPack_prev
1419 REAL(KIND(1D0)),
INTENT(in) ::Temp_C
1420 REAL(KIND(1d0)),
INTENT(in)::SnowAlb_prev
1421 REAL(KIND(1D0)),
INTENT(in)::tau_a
1422 REAL(KIND(1D0)),
INTENT(in)::tau_f
1423 REAL(KIND(1D0)),
INTENT(in)::SnowAlbMax
1424 REAL(KIND(1D0)),
INTENT(in)::SnowAlbMin
1426 REAL(KIND(1D0)) :: SnowAlb_next
1428 REAL(KIND(1D0))::alb_change
1429 REAL(KIND(1D0)),
parameter:: tau_1 = 24*60*60
1434 IF (sum(snowpack_prev) > 0)
THEN 1435 IF (temp_c < 0)
THEN 1437 alb_change = tau_a*(tstep)/tau_1
1438 snowalb_next = snowalb_prev - alb_change
1441 alb_change = exp(-tau_f*(tstep)/tau_1)
1442 snowalb_next = (snowalb_prev - snowalbmin)*alb_change + snowalbmin
1444 IF (snowalb_next < snowalbmin) snowalb_next = snowalbmin
1445 IF (snowalb_next > snowalbmax) snowalb_next = snowalbmax
1446 if (snowalb_next < 0) print *,
'SnowAlbMin/max in SnowUpdate', snowalbmin, snowalbmax, snowalb_next
1450 if (snowalb_next < 0) print *,
'SnowAlb in SnowUpdate', snowalb_next
1455 tstep, SnowPack_prev, SnowDens_prev, &
1456 tau_r, SnowDensMax, SnowDensMin) &
1457 result(snowdens_next)
1459 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowPack_prev
1460 REAL(KIND(1d0)),
DIMENSION(nsurf),
INTENT(in)::SnowDens_prev
1461 REAL(KIND(1D0)),
INTENT(in)::SnowDensMax
1462 REAL(KIND(1D0)),
INTENT(in)::SnowDensMin
1463 REAL(KIND(1D0)),
INTENT(in)::tau_r
1464 INTEGER,
INTENT(in)::tstep
1468 REAL(KIND(1D0)),
DIMENSION(nsurf) :: SnowDens_next
1469 REAL(KIND(1D0)) :: dens_change
1473 REAL(KIND(1D0)),
parameter:: tau_1 = 24*60*60
1480 IF (snowpack_prev(is) > 0)
THEN 1481 dens_change = exp(-tau_r*(tstep)/tau_1)
1482 IF (snowpack_prev(is) > 0) snowdens_next(is) = (snowdens_prev(is) - snowdensmax)*dens_change + snowdensmax
1483 IF (snowdens_next(is) > snowdensmax) snowdens_next(is) = snowdensmax
1485 snowdens_next(is) = snowdensmin
subroutine evap_suews_snow(Qm, QP, lvS_J_kg, avdens, avRh, Press_hPa, Temp_C, RAsnow, psyc_hPa, tstep, avcp, sIce_hPa, dectime, ev_snow, tlv_sub)
subroutine veg_fr_snow(sfr, SnowFrac, veg_fr)
integer, parameter bsoilsurf
subroutine snow_cal_meltheat(snowUse, tstep, tau_r, SnowDensMax, lvS_J_kg, lv_J_kg, tstep_real, RadMeltFact, TempMeltFact, SnowAlbMax, SnowDensMin, Temp_C, Precip, PrecipLimit, PrecipLimitAlb, nsh_real, sfr, Tsurf_ind, Tsurf_ind_snow, state_id, qn1_ind_snow, kup_ind_snow, SnowWater, deltaQi, alb1, SnowPack_in, SnowFrac_in, SnowAlb_in, SnowDens_in, SnowfallCum_in, SnowPack_out, SnowFrac_out, SnowAlb_out, SnowDens_out, SnowfallCum_out, mwh, Qm, QmFreez, QmRain, veg_fr, snowCalcSwitch, Qm_melt, Qm_freezState, Qm_rain, FreezMelt, FreezState, FreezStateVol, rainOnSnow, SnowDepth, mw_ind, dataOutLineSnow)
subroutine snowcalc(tstep, imin, it, dectime, is, EvapMethod, CRWmin, CRWmax, nsh_real, lvS_J_kg, avdens, avRh, Press_hPa, Temp_C, RAsnow, psyc_hPa, avcp, sIce_hPa, PervFraction, vegfraction, addimpervious, vpd_hPa, qn_e, s_hPa, ResistSurf, RA, rb, tlv, snowdensmin, SnowProf_24hr, precip, PipeCapacity, RunoffToWater, addVeg, SnowLimPaved, SnowLimBldg, FlowChange, drain, WetThresh, stateOld, mw_ind, SoilStoreCap, rainonsnow, freezmelt, freezstate, freezstatevol, Qm_Melt, Qm_rain, Tsurf_ind, sfr, dayofWeek_id, StoreDrainPrm, SnowPackLimit, AddWater, addwaterrunoff, soilstore_id, SnowPack, SurplusEvap, SnowFrac, SnowWater, iceFrac, SnowDens, runoffAGimpervious, runoffAGveg, surplusWaterBody, rss_nsurf, runoffSnow, runoff, runoffSoil, chang, changSnow, SnowToSurf, state_id, ev_snow, SnowDepth, SnowRemoval, swe, ev, chSnow_tot, ev_tot, qe_tot, runoff_tot, surf_chang_tot, runoffPipes, mwstore, runoffwaterbody)
subroutine snowupdate(tstep, Temp_C, tau_a, tau_f, tau_r, SnowDensMax, SnowDensMin, SnowAlbMax, SnowAlbMin, SnowPack_prev, SnowAlb_prev, SnowDens_prev, SnowAlb_next, SnowDens_next)
subroutine meltheat(lvS_J_kg, lv_J_kg, tstep_real, RadMeltFact, TempMeltFact, SnowAlbMax, SnowDensMin, Temp_C, Precip, PrecipLimit, PrecipLimitAlb, nsh_real, waterdens, sfr, Tsurf_ind, state_id, qn1_ind_snow, SnowWater, deltaQi, SnowPack, SnowFrac, SnowAlb, SnowDens, SnowfallCum, mwh, fwh, Qm, QmFreez, QmRain, snowCalcSwitch, Qm_melt, Qm_freezState, Qm_rain, FreezMelt, FreezState, FreezStateVol, rainOnSnow, SnowDepth, mw_ind)
integer, parameter conifsurf
real(kind(1d0)) function update_snow_albedo(tstep, SnowPack_prev, SnowAlb_prev, Temp_C, tau_a, tau_f, SnowAlbMax, SnowAlbMin)
subroutine updateflood(is, runoff, sfr, PipeCapacity, RunoffToWater, runoffAGimpervious, surplusWaterBody, runoffAGveg, runoffPipes)
integer, parameter ncolumnsdataoutsnow
real(kind(1d0)) function, dimension(nsurf) update_snow_dens(tstep, SnowPack_prev, SnowDens_prev, tau_r, SnowDensMax, SnowDensMin)
real(kind(1d0)) function sat_vap_pressice(Temp_c, PRESS_hPa, from, dectime)
subroutine cal_evap(EvapMethod, state_is, WetThresh_is, capStore_is, vpd_hPa, avdens, avcp, qn_e, s_hPa, psyc_hPa, ResistSurf, RA, rb, tlv, rss, ev, qe)
integer, parameter pavsurf
subroutine snowrem(is, PavSurf, BldgSurf, nsurf, SnowFrac, sfr, SnowPack, SnowRemoval, SnowLimPaved, SnowLimBldg)
real(kind(1d0)) function snowdepletioncurve(is, swe, sweD)
integer, parameter bldgsurf
integer, parameter watersurf