use output from one loop as in put for a second loop
1 view (last 30 days)
Show older comments
I want to use the time series output from one loop (As) as time series input for a second loop. How does one do this? I've attached the code below.
Thank you.
%Degree-day method for snow melting. %Data from the Kassjöån basin in VCB, Switzerland
x=load('C:\Users\wesser\Desktop\Jan Matlab\SnowmodelTobin.dat'); %Load the file with data of precipitation, temperature and snowpack td=x(:,4); %hour of the day GlobalRad=x(:,5); %Global Radiation T=x(:,6); %Air Temperature P=x(:,7); %Precipitation Snow_obs=x(:,8); %SWE Observed SnowDepth=x(:,9); %Snow Depth Observed ts=x(:,10); %start time of daylight on day d (t0) te=x(:,11); %end time of daylight on day d (t1) dTd=x(:,12); %difference between the max and min daily temperatures on day d
snow_sim(1)=0; runoff=zeros(length(P));
%Parameters Scf=1.3; %Snowfall correction factor TT=1; %Threshold temperature C=3.5; %Degree-day factor (mm day-1 C-1)(Ac) Cfr=0.05; %Refreezing coefficient (use default value of 0.05) Cwh=0.1; %Water holding capacity (use default value of 0.1) B=0.05; % Factor to convert the temp amplitude into a degree day factor
snow_sim(1)=0; %Simulated snowpack is 0 mm for day 1 snow_sim_water(1)=0; %Liquid water in snowpack for day 1 the water is 0 mm
for t=1 : length(td); %time series loop
ln(t)=24-te(t)+ts(t); %length of the night
Z(t)=2*((te(t)-ts(t))/(3.14*ln(t))); %factor ensuring that daily mean vaules of As equals Ac
if ts(t)<=td(t)<te(t);
As(t)=C+(B*dTd(t)*(sin(3.14*((td(t)-ts(t))/(te(t)-ts(t)))))); %equation for time variant degree day factor secnario1
else As(t)=C-(B*dTd(t)*Z(t)); %equation for time variant degree day factor senario 2
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for t=2 : length(P); %time series loop if T(t)< TT; %If the temperature for day t is lower than the threshold value for melting (=below TT degrees) then refreezing of melt water will occur refreez(t)=Cfr*As*(TT-T(t)); %Equation for refreezing of meltwater if refreez(t) > snow_sim_water(t-1); %If the refreezing for day t is larger than the water in the snowpack the day before, then the refreezing is limited refreez(t)= snow_sim_water(t-1); %Can't freez more water than is accumulated in the snowpack end
snow_sim(t)=P(t)*Scf+snow_sim(t-1)+refreez(t); %The total simulated snowpack for any given day is the precipitation that day together with snow pack from day before and refreeze of that day.
snow_sim_water(t)=snow_sim_water(t-1)-refreez(t); %The total simulated amount of water in the snowpack is the water in the snowpack the day before minus the water refrozen the same day
else %T(t) > TT %temperature above threshold temperature, snowmelt will occur
Melt(t)=As*(T(t)-TT); %Equations for melting rate of existing snowpack
if Melt(t) > snow_sim(t-1); %If the melting rate for day t is larger than the snowpack the day before, then the melting is limited
Melt(t)= snow_sim(t-1); %Because it can't melt more snow than is available
end
snow_sim(t)=snow_sim(t-1)-Melt(t); %Total simulated snow is the simulated snowpack for the day before minus the melted snow
snow_sim_water(t)=snow_sim_water(t-1)+P(t)+Melt(t); %Total water amount in snow is the water amount in snow for the day before plus the precipitation and the melted snow
if Cwh*snow_sim(t) < snow_sim_water(t); %The snowpack can retain as much as 10% of its water equivalent, but not more
runoff(t)=snow_sim_water(t)-0.1*snow_sim(t); %if there is more liquid water, this goes to runoff (note:if there is no snowpack all water will go to runoff
snow_sim_water(t)=0.1*snow_sim(t);
end
end
end
snow_sim_total=snow_sim+snow_sim_water; %The total simulated snowpack is the water in snow and the simulated snowpack
daynr=1:length(P);
0 Comments
Answers (0)
See Also
Categories
Find more on Oceanography and Hydrology in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!