From ca12feb065e82c9711c24b54aee6658af55c131a Mon Sep 17 00:00:00 2001 From: SarahAlidoost Date: Mon, 13 Dec 2021 17:30:22 +0100 Subject: [PATCH 1/5] add codes of gmd paper, rename scope to stemmus_scope, remove xls files --- filenames.m | 36 + set_parameter_filenames.m | 2 + setoptions.m | 21 + src/+equations/Planck.m | 11 + src/+equations/Soil_Inertia0.m | 3 + src/+equations/Soil_Inertia1.m | 35 + src/+equations/calc_rssrbs.m | 14 + src/+equations/calczenithangle.m | 64 ++ src/+equations/fixedp_brent_ari.m | 437 +++++++++++ src/+equations/leafangles.m | 59 ++ src/+equations/meanleaf.m | 52 ++ src/+equations/satvap.m | 21 + src/+equations/soil_respiration.m | 2 + src/+equations/tav.m | 44 ++ src/+equations/zo_and_d.m | 52 ++ src/+helpers/Sint.m | 19 + src/+helpers/aggreg.m | 63 ++ src/+helpers/count.m | 20 + src/+io/assignvarnames.m | 67 ++ src/+io/create_output_files.m | 231 ++++++ src/+io/define_bands.m | 33 + src/+io/define_constants.m | 18 + src/+io/initialize_output_structures.m | 18 + src/+io/load_timeseries.m | 132 ++++ src/+io/output_data.m | 223 ++++++ src/+io/output_verification.m | 98 +++ src/+io/readStructFromExcel.m | 52 ++ src/+io/select_input.m | 104 +++ src/+plot/plots.m | 51 ++ src/+plot/vis.m | 5 + .../STEMMUS_SCOPE-checkpoint.m | 714 ++++++++++++++++++ src/AirPARM.m | 43 ++ src/Air_BC.m | 34 + src/Air_EQ.m | 61 ++ src/Air_MAT.m | 55 ++ src/Air_Solve.m | 17 + src/Air_sub.m | 21 + src/BSM.m | 117 +++ src/CnvrgnCHK.m | 82 ++ src/CondL_T.m | 16 + src/CondL_Tdisp.m | 40 + src/CondL_h.m | 52 ++ src/CondT_coeff.m | 32 + src/CondV_DE.m | 33 + src/CondV_DVg.m | 32 + src/Condg_k_g.m | 12 + src/Constants.m | 419 ++++++++++ src/Density_DA.m | 19 + src/Density_V.m | 17 + src/Dtrmn_Z.m | 90 +++ src/EfeCapCond.m | 43 ++ src/EnrgyPARM.m | 74 ++ src/Enrgy_BC.m | 39 + src/Enrgy_Bndry_Flux.m | 4 + src/Enrgy_EQ.m | 67 ++ src/Enrgy_MAT.m | 57 ++ src/Enrgy_Solve.m | 18 + src/Enrgy_sub.m | 39 + src/EvapTransp_Cal.m | 135 ++++ src/Evap_Cal.m | 276 +++++++ src/Evap_Cal02.m | 579 ++++++++++++++ src/Forcing_PARM.m | 113 +++ src/Latent.m | 5 + src/MainLoop.m | 292 +++++++ src/Max_Rootdepth.m | 46 ++ src/ObservationPoints.m | 23 + src/PHENOLOGY_STATE.m | 112 +++ src/PlotResults1.m | 48 ++ src/RTMf.m | 301 ++++++++ src/RTMo.m | 603 +++++++++++++++ src/RTMt_planck.m | 211 ++++++ src/RTMt_sb.m | 229 ++++++ src/RTMz.m | 231 ++++++ src/Root_Fraction_General.m | 190 +++++ src/Root_properties.m | 47 ++ src/SCOPE.exe | Bin 0 -> 1204165 bytes src/SOIL1.m | 49 ++ src/SOIL2.m | 78 ++ src/STEMMUS_SCOPE.m | 714 ++++++++++++++++++ src/StartInit.m | 219 ++++++ src/TimestepCHK.m | 105 +++ src/VEGETATION_DYNAMIC.m | 369 +++++++++ src/biochemical.m | 609 +++++++++++++++ src/biochemical_MD12.m | 355 +++++++++ src/calc_brdf.m | 63 ++ src/calc_root_growth.m | 16 + src/calc_rsoil.m | 36 + src/calc_sfactor.m | 13 + src/ebal.m | 525 +++++++++++++ src/fluspect_B_CX.m | 297 ++++++++ src/fluspect_B_CX_PSI_PSII_combined.m | 282 +++++++ src/hPARM.m | 57 ++ src/h_BC.m | 49 ++ src/h_Bndry_Flux.m | 5 + src/h_EQ.m | 67 ++ src/h_MAT.m | 54 ++ src/h_sub.m | 36 + src/heatfluxes.m | 47 ++ src/hh_Solve.m | 17 + src/not_used/Brightness_T.m | 8 + src/not_used/calculate_vert_profiles.m | 29 + src/not_used/e2phot.m | 9 + src/not_used/ephoton.m | 8 + .../plot_directional_figure4_function.m | 144 ++++ src/not_used/progressbar.m | 359 +++++++++ src/not_used/resizefigure.m | 19 + src/not_used/vangenuchten.m | 18 + src/resistances.m | 175 +++++ 108 files changed, 12506 insertions(+) create mode 100644 filenames.m create mode 100644 set_parameter_filenames.m create mode 100644 setoptions.m create mode 100644 src/+equations/Planck.m create mode 100644 src/+equations/Soil_Inertia0.m create mode 100644 src/+equations/Soil_Inertia1.m create mode 100644 src/+equations/calc_rssrbs.m create mode 100644 src/+equations/calczenithangle.m create mode 100644 src/+equations/fixedp_brent_ari.m create mode 100644 src/+equations/leafangles.m create mode 100644 src/+equations/meanleaf.m create mode 100644 src/+equations/satvap.m create mode 100644 src/+equations/soil_respiration.m create mode 100644 src/+equations/tav.m create mode 100644 src/+equations/zo_and_d.m create mode 100644 src/+helpers/Sint.m create mode 100644 src/+helpers/aggreg.m create mode 100644 src/+helpers/count.m create mode 100644 src/+io/assignvarnames.m create mode 100644 src/+io/create_output_files.m create mode 100644 src/+io/define_bands.m create mode 100644 src/+io/define_constants.m create mode 100644 src/+io/initialize_output_structures.m create mode 100644 src/+io/load_timeseries.m create mode 100644 src/+io/output_data.m create mode 100644 src/+io/output_verification.m create mode 100644 src/+io/readStructFromExcel.m create mode 100644 src/+io/select_input.m create mode 100644 src/+plot/plots.m create mode 100644 src/+plot/vis.m create mode 100644 src/.ipynb_checkpoints/STEMMUS_SCOPE-checkpoint.m create mode 100644 src/AirPARM.m create mode 100644 src/Air_BC.m create mode 100644 src/Air_EQ.m create mode 100644 src/Air_MAT.m create mode 100644 src/Air_Solve.m create mode 100644 src/Air_sub.m create mode 100644 src/BSM.m create mode 100644 src/CnvrgnCHK.m create mode 100644 src/CondL_T.m create mode 100644 src/CondL_Tdisp.m create mode 100644 src/CondL_h.m create mode 100644 src/CondT_coeff.m create mode 100644 src/CondV_DE.m create mode 100644 src/CondV_DVg.m create mode 100644 src/Condg_k_g.m create mode 100644 src/Constants.m create mode 100644 src/Density_DA.m create mode 100644 src/Density_V.m create mode 100644 src/Dtrmn_Z.m create mode 100644 src/EfeCapCond.m create mode 100644 src/EnrgyPARM.m create mode 100644 src/Enrgy_BC.m create mode 100644 src/Enrgy_Bndry_Flux.m create mode 100644 src/Enrgy_EQ.m create mode 100644 src/Enrgy_MAT.m create mode 100644 src/Enrgy_Solve.m create mode 100644 src/Enrgy_sub.m create mode 100644 src/EvapTransp_Cal.m create mode 100644 src/Evap_Cal.m create mode 100644 src/Evap_Cal02.m create mode 100644 src/Forcing_PARM.m create mode 100644 src/Latent.m create mode 100644 src/MainLoop.m create mode 100644 src/Max_Rootdepth.m create mode 100644 src/ObservationPoints.m create mode 100644 src/PHENOLOGY_STATE.m create mode 100644 src/PlotResults1.m create mode 100644 src/RTMf.m create mode 100644 src/RTMo.m create mode 100644 src/RTMt_planck.m create mode 100644 src/RTMt_sb.m create mode 100644 src/RTMz.m create mode 100644 src/Root_Fraction_General.m create mode 100644 src/Root_properties.m create mode 100644 src/SCOPE.exe create mode 100644 src/SOIL1.m create mode 100644 src/SOIL2.m create mode 100644 src/STEMMUS_SCOPE.m create mode 100644 src/StartInit.m create mode 100644 src/TimestepCHK.m create mode 100644 src/VEGETATION_DYNAMIC.m create mode 100644 src/biochemical.m create mode 100644 src/biochemical_MD12.m create mode 100644 src/calc_brdf.m create mode 100644 src/calc_root_growth.m create mode 100644 src/calc_rsoil.m create mode 100644 src/calc_sfactor.m create mode 100644 src/ebal.m create mode 100644 src/fluspect_B_CX.m create mode 100644 src/fluspect_B_CX_PSI_PSII_combined.m create mode 100644 src/hPARM.m create mode 100644 src/h_BC.m create mode 100644 src/h_Bndry_Flux.m create mode 100644 src/h_EQ.m create mode 100644 src/h_MAT.m create mode 100644 src/h_sub.m create mode 100644 src/heatfluxes.m create mode 100644 src/hh_Solve.m create mode 100644 src/not_used/Brightness_T.m create mode 100644 src/not_used/calculate_vert_profiles.m create mode 100644 src/not_used/e2phot.m create mode 100644 src/not_used/ephoton.m create mode 100644 src/not_used/plot_directional_figure4_function.m create mode 100644 src/not_used/progressbar.m create mode 100644 src/not_used/resizefigure.m create mode 100644 src/not_used/vangenuchten.m create mode 100644 src/resistances.m diff --git a/filenames.m b/filenames.m new file mode 100644 index 00000000..a7a1b1fd --- /dev/null +++ b/filenames.m @@ -0,0 +1,36 @@ +%The following three are always required, + +X = { +'Simulation_Name' , 'verification_run'; +'soil_file' , 'soilnew.txt'; +'leaf_file' , 'Optipar2017_ProspectD.mat'; +'atmos_file' , 'FLEX-S3_std.atm'; + +%The following are only for the time series option! +'Dataset_dir' , 'for_verification'; +'t_file' , 't_.dat'; +'year_file' , 'year_.dat'; +'Rin_file' , 'Rin_.dat'; +'Rli_file' , 'Rli_.dat'; +'p_file' , 'p_.dat'; +'Ta_file' , 'Ta_.dat'; +'ea_file' , 'ea_.dat'; +'u_file' , 'u_.dat'; + +%optional (leave empty for constant values From inputdata.TXT) +'CO2_file' , ''; +'SMC_file' , ''; + +% optional (leave empty for calculations based on t_file year timezn) +'tts_file' , ''; + +%optional two column tables (first column DOY second column value) +'z_file' , ''; +'LAI_file' , ''; +'hc_file' , ''; +'Vcmax_file' , ''; +'Cab_file' , ''; + +%optional leaf inclination distribution file with 3 headerlines (see +%example). It MUST be located in ../data/leafangles/ +'LIDF_file' , ''}; \ No newline at end of file diff --git a/set_parameter_filenames.m b/set_parameter_filenames.m new file mode 100644 index 00000000..0047c2f0 --- /dev/null +++ b/set_parameter_filenames.m @@ -0,0 +1,2 @@ +% parameter_file = { 'setoptions.m', 'filenames.m', 'inputdata.txt'}; +parameter_file = {'input_data.xlsx'}; \ No newline at end of file diff --git a/setoptions.m b/setoptions.m new file mode 100644 index 00000000..831ece79 --- /dev/null +++ b/setoptions.m @@ -0,0 +1,21 @@ +N=[ +1; %calc_ebal calculate the complete energy balance +0; %calc_vert_profiles calculate vertical profiles of fluxes and temperatures +1; %calc_fluor calculate chlorophyll fluorescence +0; %calc_planck calculate spectrum of thermal radiation with spectral emissivity instead of broadband +0; %calc_directional calculate BRDF and directional temperature for many angles specified in a file. Be patient, this takes some time +1; %calc_xanthophyllabs calculate dynamic xanthopyll absorption (zeaxanthin) +0; %calc_PSI 0 (recommended): treat the whole fluorescence spectrum as one spectrum (new calibrated optipar), 1: differentiate PSI and PSII with Franck et al. spectra (of SCOPE 1.62 and older) +0; %rt_thermal 0: provide emissivity values as input. 1: use values from fluspect and soil at 2400 nm for the TIR range +0; %calc_zo 0: use the zo and d values provided in the inputdata, 1: calculate zo and d from the LAI, canopy height, CD1, CR, CSSOIL (recommended if LAI changes in time series) +0; %0: use soil spectrum from a file, 1: simulate soil spectrum with the BSM model +0; %SoilHeatMethod 0: standard calculation of thermal inertia from soil characteristics, 1: empiricaly calibrated formula (make function), 2: as constant fraction of soil net radiation +1; %Fluorescence_model 0: empirical, with sustained NPQ (fit to Flexas' data); 1: empirical, with sigmoid for Kn; 2: Magnani 2012 model +0; %calc_rss_rbs 0: use resistance rss and rbs as provided in inputdata. 1: calculate rss from soil moisture content and correct rbs for LAI (calc_rssrbs.m) +1; %applTcorr correct Vcmax and rate constants for temperature in biochemical.m +1; %verify verifiy the results (compare to saved 'standard' output) to test the code for the firstt ime +1; %saveheaders write header lines in output files +0; %makeplots plot the results +1]; %simulation 0: individual runs. Specify one value for constant input, and an equal number (>1) of values for all input that varies between the runs. + % 1: time series (uses text files with meteo input as time series) + % 2: Lookup-Table (specify the values to be included. All possible combinations of inputs will be used) diff --git a/src/+equations/Planck.m b/src/+equations/Planck.m new file mode 100644 index 00000000..0584f4ff --- /dev/null +++ b/src/+equations/Planck.m @@ -0,0 +1,11 @@ +function Lb = Planck(wl,Tb,em) + + c1 = 1.191066e-22; + c2 = 14388.33; + if nargin<3 + em = ones(size(Tb)); + end + + Lb = em.* c1*(wl*1e-9).^(-5)./(exp(c2./(wl*1e-3*Tb))-1); + +end \ No newline at end of file diff --git a/src/+equations/Soil_Inertia0.m b/src/+equations/Soil_Inertia0.m new file mode 100644 index 00000000..6681903e --- /dev/null +++ b/src/+equations/Soil_Inertia0.m @@ -0,0 +1,3 @@ +function [GAM] = Soil_Inertia0(cs,rhos,lambdas) +% soil thermal inertia +GAM = sqrt(cs*rhos*lambdas); % soil thermal intertia \ No newline at end of file diff --git a/src/+equations/Soil_Inertia1.m b/src/+equations/Soil_Inertia1.m new file mode 100644 index 00000000..35af2e76 --- /dev/null +++ b/src/+equations/Soil_Inertia1.m @@ -0,0 +1,35 @@ +function [GAM] = Soil_Inertia1(SMC) + +%soil inertia method by Murray and Verhoef ( + +%% parameters + +theta_s = 0.42; %(saturated water content, m3/m3) +Sr = SMC/theta_s; + +%fss = 0.58; %(sand fraction) +gamma_s = 0.27; %(soil texture dependent parameter) +dels = 1.33; %(shape parameter) + + +ke = exp(gamma_s*(1- power(Sr,(gamma_s - dels)))); + +phis = 0.5; %(phis == theta_s) +lambda_d = -0.56*phis + 0.51; + +QC = 0.20; %(quartz content) +lambda_qc = 7.7; %(thermal conductivity of quartz, constant) + +lambda_s = (lambda_qc^(QC))*lambda_d^(1-QC); +lambda_wtr = 0.57; %(thermal conductivity of water, W/m.K, constant) + +lambda_w = (lambda_s^(1-phis))*lambda_wtr^(phis); + +lambdas = ke*(lambda_w - lambda_d) + lambda_d; + +Hcs = 2.0*10^6; +Hcw = 4.2*10^6; + +Hc = (Hcw * SMC)+ (1-theta_s)*Hcs; + +GAM = sqrt(lambdas.*Hc); diff --git a/src/+equations/calc_rssrbs.m b/src/+equations/calc_rssrbs.m new file mode 100644 index 00000000..288d070f --- /dev/null +++ b/src/+equations/calc_rssrbs.m @@ -0,0 +1,14 @@ +function [rss,rbs] = calc_rssrbs(SMC,LAI,rbs) + +%rss = 10*exp(35.63*(0.25-SMC)); +%if rss>1000, + %rss=1000; +%elseif rss<30, + %rss=30; +%end +rss =11.2*exp(0.3563*100.0*(0.38-SMC)); +%rss = exp(7.9-1.6*(SMC-0.0008)/(0.38-0.0008)); +%if rss<70, + % rss=70; +%end +rbs = rbs*LAI/4.3; \ No newline at end of file diff --git a/src/+equations/calczenithangle.m b/src/+equations/calczenithangle.m new file mode 100644 index 00000000..c72e064a --- /dev/null +++ b/src/+equations/calczenithangle.m @@ -0,0 +1,64 @@ +function [Fi_s,Fi_gs,Fi_g,Omega_s] = calczenithangle(Doy,t,Omega_g,Fi_gm,Long,Lat) +% +% author: Christiaan van der Tol (c.vandertol@utwente.nl) +% date: Jan 2003 +% update: Oct 2008 by Joris Timmermans (j_timmermans@itc.nl): +% - corrected equation of time +% Oct 2012 (CvdT) comment: input time is GMT, not local time! +% +% function [Fi_s,Fi_gs,Fi_g]= calczenithangle(Doy,t,Omega_g,Fi_gm,Long,Lat) +% +% calculates pi/2-the angle of the sun with the slope of the surface. +% +% input: +% Doy day of the year +% t time of the day (hours, GMT) +% Omega_g slope azimuth angle (deg) +% Fi_gm slope of the surface (deg) +% Long Longitude (decimal) +% Lat Latitude (decimal) +% +% output: +% Fi_s 'classic' zenith angle: perpendicular to horizontal plane +% Fi_gs solar angle perpendicular to surface slope +% Fi_g projected slope of the surface in the plane through the solar beam and the vertical +% + +%parameters (if not already supplied) +if nargin<6 + Long = 13.75; % longitude + Lat = 45.5; % latitude + if (nargin<4) + Omega_g = 210; % aspect + Fi_gm = 30; % slope angle + end +end + +%convert angles into radials +G = (Doy-1)/365*2*pi; % converts day of year to radials +Omega_g = Omega_g/180*pi; % converts direction of slope to radials +Fi_gm = Fi_gm/180*pi; % converts maximum slope to radials +Lat = Lat/180*pi; % converts latitude to radials + +%computes the declination of the sun +d = 0.006918-0.399912*cos(G )+ 0.070247*sin(G )- ... + 0.006758*cos(2*G)+ 0.000907*sin(2*G)- ... + 0.002697*cos(3*G)+ 0.00148*sin(3*G); + +%Equation of time +Et = 0.017 + .4281 * cos(G) - 7.351 * sin(G) - 3.349 * cos(2*G) - 9.731 * sin(2*G); + +%computes the time of the day when the sun reaches its highest angle +tm = 12+(4*(-Long)-Et)/60; % de Pury and Farquhar (1997), Iqbal (1983) + +%computes the hour angle of the sun +Omega_s = (t-tm)/12*pi; + +%computes the zenithangle (equation 3.28 in De Bruin) +Fi_s = acos(sin(d)*sin(Lat)+cos(d)*cos(Lat).*cos(Omega_s)); + +%computes the slope of the surface Fi_g in the same plane as the solar beam +Fi_g = atan(tan(Fi_gm).*cos(Omega_s-Omega_g)); + +%computes the angle of the sun with the vector perpendicular to the surface +Fi_gs = Fi_s + Fi_g; \ No newline at end of file diff --git a/src/+equations/fixedp_brent_ari.m b/src/+equations/fixedp_brent_ari.m new file mode 100644 index 00000000..8f7891bb --- /dev/null +++ b/src/+equations/fixedp_brent_ari.m @@ -0,0 +1,437 @@ +function [b, err2, fcounter] = fixedp_brent_ari(func, x0, corner, tolFn, verbose) +% Find a fixed point of func(x) using Brent's method, as described by Brent 1971 +% func is a single-argument function, f(x) that returns a value the same size as x: +% The goal is to find f(x) = x (or for Brent, f(x) - x = 0). +% x0 is the initial guess (or 2 x n matrix if we want to generalize) +% tol is the tolerance in x (or if two-valued, x, f(x)? ) +% corner (optional) is a known "edge" in the function that could slow down the algorithm +% if specified and the first two points include the corner, the corner will be substituted as a starting point. +% +% Written by: Ari Kornfeld, 2016-10 + +tolx_1 = 0; % we don't want to converge in x +subsetLimit = 0; % never use subsets of x +accelBisection = false; % should we divide the interval by ever-increasing fractions (1/2, 1/3, 1/4) when consecutive calls make no improvement? +accelLimit = 3; % but reset if more than accelLimit bisections don't help. +rotatePrev = true; % do we use Brent's original method of wiping out "xprev" in certain instances (forcing secant) or alway preserve a third value (allowing more inverse-quad). +iter_limit = 100; + +if nargin < 5 + verbose = false; +end + +if nargin < 4 + tolFn = eps; % default to FP precision: 2^-52 = 2.2204e-16 +end +if nargin < 3 + corner = []; % default, no corners +end +track_fcount = (nargout > 2) || verbose; + +recompute_b = false; % ensure that we return after a call on func(s); this allows us to skip the re-call in the main body (since func sets globals) + +% We keep track of the best value of x (b), the past two iterations (c, d), +% and one contrapoint (a), i.e. a point that stradles the fixed point (i.e. err1 has the opposite sign of err2) +% err1, err2, ... are the corresponding "y" values for y = f(x) - x (i.e. distance from the fixed point) +% We start by finding bracketing points a, b +a = x0; +[err1, b] = func(a); % guess the second point by computing x_1 = f(x_0) + +% special case: func may return a vector even though 'a' was scalar (because other variables not visible here were nonscalar). +% If so, expand a: +if length(a) == 1 && length(b) > 1 % anything else is an error + a = repmat(a, size(b)); % or a * ones(size(b))? +end + +err2 = func(b); +err2(isnan(err2)) = 0; % if isnan, we're done, i.e. we shouldn't try +if track_fcount + % count each item separately: count only the "necessary" iterations + fcounter = 2*ones(size(b)); +end + +err_outside_tol = abs(err2) > tolFn; +if ~any(err_outside_tol) + return % we're done! +end +% ELSE +recompute_b = true; % we'll be messing with it + +% Now confirm that the two first guesses bracket zero. +% NOTE: the algorithm may still succeed w/o bracketting, though it's not guaranteed. +not_bracketting_zero = (sign(err1) == sign(err2)) & err_outside_tol; +if any(not_bracketting_zero) + %warning( 'Not all initial guesses bracket zero. Will fix it now.' ); + + % first try a simple secant extrapolation + x1 = b - err2.*(b - a)./(err2 - err1); + err_x1 = func(x1); + if track_fcount + fcounter = fcounter + not_bracketting_zero; % count only the ones that needed this fcall + end + + % since sign(err1) == sign(err2), compare the new value to either of those + use_x1 = (sign(err_x1) ~= sign(err1)) & not_bracketting_zero; + if any(use_x1) + % save the better of the two original points into 'a' + swap_to_a = (abs(err2) < abs(err1) & use_x1); + a(swap_to_a) = b(swap_to_a); err1(swap_to_a) = err2(swap_to_a); + % then put the new contrapoint into 'b' + b(use_x1) = x1(use_x1); err2(use_x1) = err_x1(use_x1); + end + + % recompute a_too_high and iterate if necessary + err_outside_tol = min(abs(err1), abs(err2)) > tolFn; + not_bracketting_zero = (sign(err1) == sign(err2)) & err_outside_tol; + % make 'a' the lower value, to make the rest simpler + if any(not_bracketting_zero) + swap_to_a = (err2 < err1 & not_bracketting_zero); + [a(swap_to_a), b(swap_to_a)] = deal(b(swap_to_a), a(swap_to_a)); + [err1(swap_to_a), err2(swap_to_a)] = deal( err2(swap_to_a), err1(swap_to_a) ); + end + % if both values > 0, need to find a negative value: + both_positive = err1 > 0 & not_bracketting_zero; + ntries=1; % up to 10 tries + while any(both_positive) + % err1 < err2, so assuming a monotonic fn, we can decrease err1 by increasing distance from 'b' + diffab = b(both_positive) - a(both_positive); + a(both_positive) = a(both_positive) - diffab; % walk out in steps that double with each iteration + % recompute the new a values (note, it might be smarter to shift a[n-1] into b when we're done + err1 = func(a); + if track_fcount + fcounter = fcounter + both_positive; + end + + % for a severely ill-behaved function err1 can go in the wrong direction as we move apart, so fix it now + swap_to_a = (err2 < err1 & not_bracketting_zero); + [a(swap_to_a), b(swap_to_a)] = deal(b(swap_to_a), a(swap_to_a)); + [err1(swap_to_a), err2(swap_to_a)] = deal( err2(swap_to_a), err1(swap_to_a) ); + err_outside_tol = min(abs(err1), abs(err2)) > tolFn; + not_bracketting_zero = (sign(err1) == sign(err2) & err_outside_tol); + both_positive = not_bracketting_zero; + if any(both_positive) && ntries > 10 + error('Couldn''t find contrapoint in 10 tries!') + end + ntries = ntries + 1; + end + +% ntries=1; % if using while loop for b + both_negative = err2 < 0 & not_bracketting_zero; + if any(both_negative) + % for Ci, A(0) -> Ci >= 0 so f(0) - 0 >= 0 + b(both_negative) = 0; % just go to zero and be done NOT GENERAL!!!! + err2 = func(b); % for now don't calculate on subsets + if track_fcount + fcounter = fcounter + both_negative; + end + end + + recompute_b = true; % we can no longer be certain that s (b) is the best) +end + +if ~isempty(corner) + % special case: guesses that bracket a "corner" may result in very slow convergence + % if we replace an endpoint with corner, the remaining iterations should be much simplified + bracket_corner = sign(corner - a) ~= sign(corner - b); %( a < corner & b > corner) | ( a > corner & b < corner); + if any(bracket_corner) + % replace one endpoint with corner: + x1 = b; % initialize it for the function call; we'll only use the bracket_corner elements + if length(corner) == 1 % as above, make sure value is same size as x + corner = repmat(corner, size(b)); + end + x1(bracket_corner) = corner(bracket_corner); + + errCorner = func(x1); + if track_fcount + fcounter = fcounter + bracket_corner; + end + + % sort the result into a b so that the sign is preserved + save_into_b = bracket_corner & (sign(errCorner) == sign(err2)); % error on corner and b have same sign + save_into_a = bracket_corner & ~save_into_b; + [a(save_into_a),b(save_into_b)] = deal(x1(save_into_a), x1(save_into_b)); + [err1(save_into_a),err2(save_into_b)] = deal(errCorner(save_into_a), errCorner(save_into_b)); + + recompute_b = true; % we can no longer be certain that s (i.e. matches the last call to computeA) + end +end + + +% Brent tolerance: +% BRENT: 2 * eps * abs(b)+ toler %NUMERICAL RECIPES: 2 * eps * abs(b)+ 0.5*toler +tolx = 2* max(1, abs(b)).*tolx_1; % MATLAB's criterea (and also Wilkins 2013, except for the factor of 4) +err_outside_tol = 0.5 .* abs(a - b) > tolx & min(abs(err1), abs(err2)) > tolFn ; + + +% make sure that 'b' is the best +err1_is_best = abs(err2) > abs(err1); % and therefore needs to be swapped +if any(err1_is_best) + [a(err1_is_best), b(err1_is_best)] = deal(b(err1_is_best), a(err1_is_best)); + [err1(err1_is_best), err2(err1_is_best)] = deal(err2(err1_is_best), err1(err1_is_best)); + recompute_b = true; +end + +% initialize the search array with the current best guess +%[s, err_s] = deal(b, err2); +ab_gap = (a - b); % do this only after we've sorted a and b + +% since b is the current best guess, 'a' therefore stands in as the "previous best" +[c, err3] = deal(a, err1); % the "previous" value of b +best_is_unchanged = abs(err2) == abs(err1); + +% initialize additional vectors to nan +%[p, q] = deal(nan(size(b))); % components of the new increment +[xstep, xstep1] = deal(3*ab_gap); % the step_size of one- or two-steps ago; initialize to prevent triggering on the first round +q = ones(size(b)); % needed for first iteration; don't use nan: we need p/q to be a valid number +p = 0 .* q; +%-------------------------------------------------------- +% MAIN LOOP +% note: Stage 2013 says we should add abs(a - b)<= 0.5(a+b)*eps as a stopping condition +% to avoid machine accuracy issues when abs(x_root) >> 1. +% fzero.m uses: 0.5*abs(a-b) <= 2.0*tol*max(abs(b),1.0) [adjusting for the fact that c in fzero is our a] +%used_bisection = true(size(b)); % 'mflag': did we use bisection on the previous round (starts true) +counter = 0; +accel_bi = zeros(size(b)); +if verbose + fprintf('init''l ') + fprintf('%d: a: %9.5g (%9.3g), b: %9.5g (%9.3g),c: %9.5g (%9.3g), s: %9.3g\n', fcounter, a, err1, b, err2, c, err3, err2); % a, b, c, s); +end +while any( err_outside_tol ) + % 0. Setup + %*** NOTE: See 2013 Wilkins about an objection to the magnitude of tol in these tests + xstep2 = xstep1; % Advance the record of previous step-sizes; Brent calls this "e" + xstep1 = xstep; + + %ab_gap = (a - b); % done at end of loop since it's needed for the exit test + p = 0.*p; % clear p, xstep (this is a bit faster than zeros() or even p(:)=0 in R2015b ) + xstep = 0.*xstep; +% [p, xstep] = deal(zeros(size(b))); % don't use nan, so p/q is a valid number + %q = ones(size(b)); % don't worry about q: if not used, p/q = 0 + + %use_bisection = (abs(xstep2) < tol) | (abs_err_s >= abs_err_s1); % if the latest err is larger than the previous iteration give up on interpolation + %abs_err_s1 = abs_err_s; + use_bisection = (abs(xstep2) < tolx) | best_is_unchanged ; % if the latest err is larger than the previous iteration give up on interpolation + + r2 = err2 ./ err1; % f(b)/f(c) in Brent - see my comments in secant + + % the new guess will be stored in 's' using either secant, inverse quadratic, or bisection: + try_interp = ~use_bisection & err_outside_tol; + %err3_close_enough = abs(ab_gap)*20 >= abs(err3 - err1); % if 3rd best is too far, just use two + quad_is_safe = (err1 ~= err3 & err2 ~= err3); % (note err1 never equals err2 -- since they have opp. signs -- unless they're zero, in which case try_interp is false) + + %----- + % 1. Inverse quadratic Method + % when three values are available, use inverse quadratic method (note: fzero has a more clever algorithm?) + use_quad = try_interp & quad_is_safe; % see prev note about (err1 ~= err2) + if any(use_quad) + % this way is 3x faster than with subsetting! + % (defining intermediate difference variables doesn't make much if any speed difference.) +% s1 = a .* err2 .* err3 ./ ((err1 - err2).*(err1 - err3)) ... +% + b .* err1 .* err3 ./ ((err2 - err1).*(err2 - err3)) ... +% + c .* err1 .* err2 ./ ((err3 - err1).*(err3 - err2)); +% s(use_quad) = s1(use_quad); + r1 = err3 ./ err1; % Brent Section 4, not ALGOL, notation, swapping a/c from Brent's notation + r3 = err2 ./ err3; + p = r3 .* ( ab_gap .* r1 .* (r1 - r2) - (b - c).*(r2 - 1) ); + q = (r1 - 1) .* (r2 - 1) .* (r3 - 1); +% p(~use_quad) = 0; % so xstep = 0 +% q(~use_quad) = 1; % so xstep is not nan +% p(use_quad) = p1(use_quad); % don't bother; we'll overwrite what needs overwriting +% q(use_quad) = q1(use_quad); + if verbose, fprintf('**quad '), end + end + + %----- + % 2. Secant method + % I've found no case in which doing secant helps when inv. quad failed (it actually makes things worse) + %s_test = (quad_is_safe & abs(pq1) >= abs(ab_gap) ) ; % if inverse-quad went too far + use_secant = try_interp & ~quad_is_safe; + % secant: b - f(b) * (b - a) / ( f(b) - (fa) ): derivation: using point-slope of a line solve for y=0: + % (y - y1) = m(x - x1): m = (y2-y1)/(x2-x1); b = y1 - m x1 = y2 - m x2; + % y = 0 => -y1 = m x - m x1 => -mx = y1 - m x1 => x = -y1/m + x1 + % 0 = mx + b => x = -b/m = -(y1 - m x1)/m = -y1/m + x1 OR -(y2 - m x2)/m = x2 - y2/m + % x = x1 - y1 (x2 - x1)/(y2 - y1); OR x2 - y2 (x2 - x1)/(y2 - y1) + %s(use_secant) = b(use_secant) - err2(use_secant) .* (b(use_secant) - a(use_secant)) ./ (err2(use_secant) - err1(use_secant)); + if any(use_secant) + % NOTE: We only take a secant when a = c, + % so it doesn't matter whether we use err2/err1 or err2/err3 + % p /q = ((a - b) * err2/err1) / ((err1 - err2)/err1) + % = err2 (a - b) / (err1 - err2) -- compare to secant formula + p1 = ab_gap .* r2; + p(use_secant) = p1(use_secant); + q(use_secant) = 1 - r2(use_secant); + if verbose, fprintf('secant '), end + end + + if any(try_interp) + %pq1 = p ./ q; % divide now (before subsetting, since it's faster); + %xstep(try_interp) = pq1(try_interp); % though only for the interpolated points, so far. + % note: this does not need subsetting because all(p(~try_interp)) = 0; + % (it should be impossible for q=0 since that would imply err1 = err2, but then err isn't out of tolerance + xstep = p ./ q; % divide now (before subsetting, since it's faster); + xstep(~try_interp) = 0; % to clear nan's + end + + %----- + % 3. Override any of the above with bisection , depending on values of s + % 3a: s is NOT between (3 * a + b)/4 and b + % Brent says: new point should be up to 3/4 way between b and a + %bi_test1a = sign(s - a) == sign(s - b); % s is outside (a ... b); i.e. just a safety-check (and Dekker's test) + bi_test1 = ( abs(p) >= 0.75 .* abs(ab_gap .* q) - 0.5*abs(tolx.*q) ) ; % i.e, toler + + % second test done previously + % third test: |the current xstep| > 1/2 |xstep[n-2]|, i.e. we're moving too far away from the best. but here it's different + %bi_test3 = abs(xstep) >= 0.5 * abs(xstep2); % or the "safer": + bi_test3 = abs(p) >= 0.5 * abs(xstep2 .* q); % need to think about p and q here + + % update the use_bisection flag with the (p/q)-dependent criteria + use_bisection = ( use_bisection | bi_test1 | bi_test3) & err_outside_tol; % + + % now accept any qualifying interpolated point: + + if any(use_bisection) % it's a pretty rare event + % s(use_bisection) = (a(use_bisection) + b(use_bisection))*0.5; + m = -ab_gap./(2 + accel_bi); %(1+ 2.^conseqs); + %s(use_bisection) = b(use_bisection) - m; % b + (a-b)/2 = (b + a)/2 + % set xstep1 so it makes its way into xstep2 (as per Brent 1971) + [xstep(use_bisection), xstep1(use_bisection)] = deal(m(use_bisection)); + if verbose, fprintf('bisect '), end + end + + % xstep (d in Brent) is fully updated, now compute the new guess (note xstep=0 if err is within tol) + s = b - xstep; + xstep_too_small = abs(xstep) < tolx & err_outside_tol; % prevent underflow, but it converges faster if we test against tol rather than eps + if any(xstep_too_small) + s2 = b + sign(ab_gap) .* tolx; + s(xstep_too_small) = s2(xstep_too_small); + end + %s(err_outside_tol) = s1(err_outside_tol); % preserve values that have already converged + + % Quick sanity check + if ~all(use_secant | use_quad | use_bisection | ~err_outside_tol) + error('Somehow, we didn''t update idx: %d\n', find(~(use_secant | use_quad | use_bisection | ~err_outside_tol))); + end + + %----- + % compute error-value for s (how far from the fixed point) + % this values should always be "better" than either a or b (but not necessarily better than both) + if subsetLimit <= 0 || mean(err_outside_tol(:)) > subsetLimit + err_s = func(s); + else + err_s(err_outside_tol) = func(s(err_outside_tol)); + end + if track_fcount + fcounter = fcounter + err_outside_tol; + end + + + %fprintf('Laggards: %d\n', sum(err_outside_tol)); + counter = counter + 1; + if (counter > iter_limit) + error('iteration limit exceeded'); + end + %----------------- + % Now reorganize a, b, c so b is in best + % Also: set conseqs, err_increased, ab_gap for next round + if all(abs(err_s) < tolFn) + % converged in y; s hold the full answer; no need to sort, etc. + b = s; + err2 = err_s; + err_outside_tol=false; % we're done! + recompute_b = false; + else + % first, test that our new guess was an improvement + % if the new guess is larger than the old guess then most likely b is close to zero + % and we're just whittling away at a. (Alternatively, the function is not monotonic on [a b]) + % Either way, we will try bisecting on the next round. + best_is_unchanged = abs(err_s) > abs(err2); % strictly-greater performs what we really mean and in one extreme case (Heaviside) saves us from incorrect behavior + if accelBisection + % Furthermore, if we're just chipping away at the far side, let "bisection" divide by increasing integers. + accel_bi = accel_bi + best_is_unchanged; + accel_bi(~best_is_unchanged | (accel_bi >= accelLimit)) = 0; % reset anything that behaved properly; or after 3 tries + % limit the number of consecutive forced-bisections (3 may be best for well-behaved fns (but may prevent convergence in singularities); + % Inf is probably safest, though with the current method, it's never needed) + best_is_unchanged = accel_bi > 0; %best_is_unchanged & ; + end + + % update previous states: (Brent's, a, fa) + % first store prev. round's best in c: (prev round's result is in s right now) +% d= c; err4 = err3; + c = b; err3 = err2; + + %swap a,b as needed so that all b matches the sign of s +% s_a_sign_match = (sign(err_s) == sign(err1) ) & err_outside_tol; +% if any(s_a_sign_match) +% % s belong in a, so move b into its place. but if we moved b in, b is now in a and c, +% % so lets swap 'a' into 'c' to retain three points +% c(s_a_sign_match) = a(s_a_sign_match); err3(s_a_sign_match)= err1(s_a_sign_match); +% a(s_a_sign_match) = b(s_a_sign_match); err1(s_a_sign_match)= err2(s_a_sign_match); +% xstep1(s_a_sign_match) = xstep(s_a_sign_match); % makes a very tiny improvement in some cases +% end +% +% % and now we can just copy all of s into b +% b = s; err2 = err_s; +% +% % finally swap a, b if necessary, so that b is the best answer +% err1_is_best = (abs(err2) > abs(err1)) & err_outside_tol; +% if any(err1_is_best) +% [a(err1_is_best), b(err1_is_best)] = deal(b(err1_is_best), a(err1_is_best)); +% [err1(err1_is_best), err2(err1_is_best)] = deal(err2(err1_is_best), err1(err1_is_best)); +% % Adding this makes it much closer to Brent's (i.e. erasing the improvement) +% % err_increased = ( abs(err2) >= abs(err1) ); +% end +% +% % very slight improvement, though makes Stage's hyperbolic case (singularity at 0) worse +% d_closer_than_c = abs(c - b) > abs(d - b) & err_outside_tol; +% if (d_closer_than_c) +% c(d_closer_than_c) = d(d_closer_than_c); err3(d_closer_than_c)= err4(d_closer_than_c); +% end + + s_b_sign_match = (sign(err_s) == sign(err2) ); + err_s_is_best = ( abs(err_s) <= abs(err2) ) & err_outside_tol; + a_into_b = (s_b_sign_match & ~err_s_is_best) & err_outside_tol; + if any(a_into_b) + % move a into b, because we're going to move s into a (note, b has already been moved into c + b(a_into_b) = a(a_into_b); err2(a_into_b)= err1(a_into_b); + end + + b_into_a = (~s_b_sign_match & err_s_is_best); % & err_outside_tol is redundant + if any(b_into_a) + % move b into a because we're going to move s into b; we need to save a into c (since prev-b isn't being lost, but a will) + c(b_into_a) = a(b_into_a); err3(b_into_a)= err1(b_into_a); + a(b_into_a) = b(b_into_a); err1(b_into_a)= err2(b_into_a); + end + % now copy s into a or b + if any(err_s_is_best) + b(err_s_is_best) = s(err_s_is_best); err2(err_s_is_best)= err_s(err_s_is_best); + end + err_s_not_best = ~err_s_is_best & err_outside_tol; + if any(err_s_not_best) + a(err_s_not_best) = s(err_s_not_best); err1(err_s_not_best)= err_s(err_s_not_best); + xstep1(err_s_not_best) = xstep(err_s_not_best); % As per Brent; makes a very tiny improvement in some cases (& a bit worse in others?) + end + + %----- + % 0. Test if it's time to exit + ab_gap = (a - b); % i.e. 2 * m in Brent ( m = 0.5*(a - b) translating his paralance ) + %clear xstep so it can be partially filled w/o carryover of previous step + + %tol = eps(b) + 0.5*toler; % BRENT: 2 * eps * abs(b)+ toler + tolx = 2*max(1,abs(b)).*tolx_1; % w/o max(abs(b),1.0) it fails on test f2_2 + err_outside_tol = (0.5 .* abs(ab_gap) > tolx & abs(err2) > tolFn) ; + recompute_b = true; + end + + if verbose + fprintf('%d: a: %9.5g (%9.3g), b: %9.5g (%9.3g),c: %9.5g (%9.3g), s: %9.3g\n', fcounter, a, err1, b, err2, c, err3, err_s); % a, b, c, s); + end +end +if recompute_b + % should never be needed if TolX = 0 and TolFn > 0 (and at least one iter) + err2 = func(b); + if track_fcount + fcounter = fcounter + 1; + end +end +if verbose, fprintf('Brent p/q preserving C. iterations: %d; fcalls: %d; xval: %0.5g\n', counter, fcounter, b), end + diff --git a/src/+equations/leafangles.m b/src/+equations/leafangles.m new file mode 100644 index 00000000..2b2658c0 --- /dev/null +++ b/src/+equations/leafangles.m @@ -0,0 +1,59 @@ +function [lidf]= leafangles(a,b) +% Subroutine FluorSail_dladgen +% Version 2.3 +% For more information look to page 128 of "theory of radiative transfer models applied in optical remote sensing of +% vegetation canopies" +% +% FluorSail for Matlab +% FluorSail is created by Wout Verhoef, +% National Aerospace Laboratory (NLR) +% Present e-mail: w.verhoef@utwente.nl +% +% This code was created by Joris Timmermans, +% International institute for Geo-Information Science and Earth Observation. (ITC) +% Email: j.timmermans@utwente.nl +% +%% main function +F = zeros(1,13); +for i=1:8 + theta = i*10; % theta_l = 10:80 + F(i) = dcum(a,b,theta); % F(theta) +end + +for i=9:12 + theta = 80 + (i-8)*2; % theta_l = 82:88 + F(i) = dcum(a,b,theta); % F(theta) +end + +for i=13:13 % theta_l = 90:90 + F(i) = 1; % F(theta) +end + +lidf = zeros(13,1); +for i=13:-1:2 + lidf(i) = F(i) - F(i-1); % lidf = dF/dtheta; +end +lidf(1) = F(1); % Boundary condition + +%% SubRoutines +function [F] = dcum(a,b,theta) +rd = pi/180; % Geometrical constant +if a>1 + F = 1 - cos(theta*rd); +else + eps = 1e-8; + delx = 1; + + x = 2*rd *theta; + theta2 = x; + % + while max(delx > eps) + y = a*sin(x) + 0.5*b*sin(2*x); + dx = 0.5*(y - x + theta2); + x = x + dx; + delx= abs(dx); + end + F = (2*y + theta2)/pi; % Cumulative leaf inclination density function + %pag 139 thesis says: F = 2*(y+p)/pi. + %Since theta2=theta*2 (in rad), this makes F=(2*y + 2*theta)/pi +end \ No newline at end of file diff --git a/src/+equations/meanleaf.m b/src/+equations/meanleaf.m new file mode 100644 index 00000000..cbbb290b --- /dev/null +++ b/src/+equations/meanleaf.m @@ -0,0 +1,52 @@ +function Fout = meanleaf(canopy,F,choice,Ps) + +nl = canopy.nlayers; +nli = canopy.nlincl; +nlazi = canopy.nlazi; +lidf = canopy.lidf; + +% author: Dr. ir. Christiaan van der Tol (tol@itc.nl) +% date: 7 December 2007 +% update: 11 February 2008 made modular (Joris Timmermans) + +% update: 25 Feb 2013 Wout Verhoef : Propose name change, remove globals +% and use canopy-structure for input +% +% function [F2,F3] = F1tot(F,choice,Ps) +% calculates the layer average and the canopy average of leaf properties +% per layer, per leaf angle and per leaf azimuth (36) +% +% Input: +% F input matrix (3D) [nli, nlazi,nl] +% choice integration method 'angles' : integration over leaf angles +% 'angles_and_layers' : integration over leaf layers and leaf angles +% Ps fraction sunlit per layer [nl] +% +% Output: +% Fout in case of choice = 'angles': [nl] +% in case of choice = 'angles_and_layers': [1] +Fout = zeros(nli, nlazi,nl); +switch choice +%% integration over leaf angles + case 'angles' + + for j = 1:nli + Fout(j,:,:) = F(j,:,:)*lidf(j); % [nli, nlazi,nl] + end + Fout = sum(sum(Fout))/nlazi; % [1,1,nl] + Fout = permute(Fout,[3 1 2]); % [nl] + +%% integration over layers only + case 'layers' + %not implemented +%% integration over both leaf angles and layers + case 'angles_and_layers' + for j = 1:nli + Fout(j,:,:) = F(j,:,:)*lidf(j); + end + + for j = 1:nl + Fout(:,:,j) = Fout(:,:,j)*Ps(j); + end + Fout = sum(sum(sum(Fout)))/nlazi/nl; +end \ No newline at end of file diff --git a/src/+equations/satvap.m b/src/+equations/satvap.m new file mode 100644 index 00000000..7a8c8a7e --- /dev/null +++ b/src/+equations/satvap.m @@ -0,0 +1,21 @@ +function [es,s] = satvap(T) + +%% function [es,s]= satvap(T) +% Author: Dr. ir. Christiaan van der Tol +% Date: 2003 +% +% calculates the saturated vapour pressure at +% temperature T (degrees C) +% and the derivative of es to temperature s (kPa/C) +% the output is in mbar or hPa. The approximation formula that is used is: +% es(T) = es(0)*10^(aT/(b+T)); +% where es(0) = 6.107 mb, a = 7.5 and b = 237.3 degrees C +% and s(T) = es(T)*ln(10)*a*b/(b+T)^2 + +%% constants +a = 7.5; +b = 237.3; %degrees C + +%% calculations +es = 6.107*10.^(7.5.*T./(b+T)); +s = es*log(10)*a*b./(b+T).^2; \ No newline at end of file diff --git a/src/+equations/soil_respiration.m b/src/+equations/soil_respiration.m new file mode 100644 index 00000000..4dc759cc --- /dev/null +++ b/src/+equations/soil_respiration.m @@ -0,0 +1,2 @@ +function [R] = soil_respiration(Ts) +R = 0.5+0.14375*Ts; %umol m-2 s-1 \ No newline at end of file diff --git a/src/+equations/tav.m b/src/+equations/tav.m new file mode 100644 index 00000000..c2c26760 --- /dev/null +++ b/src/+equations/tav.m @@ -0,0 +1,44 @@ +function Tav = tav(alfa,nr) +n2 = nr.^2; +np = n2 + 1; +nm = n2 - 1; + +% Stern's formula in Lekner & Dorf (1988) gives reflectance for alfa = 90 degrees + +% y1 = (3*n2+2*nr+1)./(3*(nr+1).^2); +% y2 = 2*nr.^3.*(nr.^2+2*nr-1)./(np.^2.*nm); +% y3 = n2.*np.*log(nr)./nm.^2; +% y4 = n2.*nm.^2./np.^3.*log((nr.*(nr+1)./(nr-1))); + +% st = y1-y2+y3-y4; + +a = +((nr+1).^2)/2; +k = -((n2-1).^2)/4; +sin_a = sind(alfa); +% +if alfa~=0 + B2 = sin_a^2 - np/2; + B1 = (alfa~=90) * sqrt( B2.^2 + k ); + + b = B1 - B2; + b3 = b.^3; + a3 = a.^3; + + ts = (k.^2./(6*b3) + k./b - b./2) - ... + (k.^2./(6*a3) + k./a - a./2); + + tp1 = -2*n2.* ( b - a ) ./ (np.^2); + tp2 = -2*n2.*np.*( log(b./a) ) ./ (nm.^2); + tp3 = n2.* ( 1./b - 1./a ) ./ 2; + +% tp4 = 16*n2.^2.* (n2.^2+1) .* ( log(2*np.*b - nm.^2) - log(2*np.*a - nm.^2) ) ./ (np.^3.*nm.^2); +% tp5 = 16*n2.^2.* (n2 ) .* ( 1./(2*np.*b - nm.^2) - 1./(2*np.*a - nm.^2)) ./ (np.^3 ); + + tp4 = 16*n2.^2.* (n2.^2+1) .* ( log((2*np.*b - nm.^2)./(2*np.*a - nm.^2)) ) ./(np.^3.*nm.^2); + tp5 = 16*n2.^2.* (n2 ) .* ( 1./(2*np.*b - nm.^2) - 1./(2*np.*a - nm.^2)) ./(np.^3); + tp = tp1 + tp2 + tp3 + tp4 + tp5; + Tav = (ts + tp) ./ (2*sin_a.^2); +else + Tav = 4 *nr/((nr+1)*(nr+1)); +end +return \ No newline at end of file diff --git a/src/+equations/zo_and_d.m b/src/+equations/zo_and_d.m new file mode 100644 index 00000000..3a2b99ea --- /dev/null +++ b/src/+equations/zo_and_d.m @@ -0,0 +1,52 @@ +function [zom,d] = zo_and_d(soil,canopy) + +% function zom_and_d calculates roughness length for momentum and zero +% plane displacement from vegetation height and LAI +% +% Date: 17 November 2008 +% 17 April 2013 (structures) +% +% Author: A. Verhoef +% implemented into Matlab by C. van der Tol (c.vandertol@utwente.nl) +% +% Source: Verhoef, McNaughton & Jacobs (1997), HESS 1, 81-91 +% +% usage: +% zo_and_d (soil,canopy) +% +% canopy fields used as inpuyt: +% LAI one sided leaf area index +% hc vegetation height (m) +% +% soil fields used: +% Cd Averaged drag coefficient for the vegetation +% CR Drag coefficient for isolated tree +% CSSOIL Drag coefficient for soil +% CD1 Fitting parameter +% Psicor Roughness layer correction +% +% constants used (as global) +% kappa Von Karman's constant +% +% output: +% zom roughness lenght for momentum (m) +% d zero plane displacement (m) +% + +%% constants +global constants +kappa = constants.kappa; + +%% parameters +CR = canopy.CR; +CSSOIL = soil.CSSOIL; +CD1 = canopy.CD1; +Psicor = canopy.Psicor; +LAI = canopy.LAI; +h = canopy.hc; + +%% calculations +sq = sqrt(CD1*LAI/2); +G1 = max(3.3, (CSSOIL + CR*LAI/2).^(-0.5)); +d = (LAI>1E-7 & h>1E-7).*h.*(1-(1-exp(-sq))./sq); % Eq 12 in Verhoef et al (1997) +zom = (h-d).*exp(-kappa*G1 + Psicor); \ No newline at end of file diff --git a/src/+helpers/Sint.m b/src/+helpers/Sint.m new file mode 100644 index 00000000..4a6db3a0 --- /dev/null +++ b/src/+helpers/Sint.m @@ -0,0 +1,19 @@ +function int = Sint(y,x) + + % Simpson integration + % x and y must be any vectors (rows, columns), but of the same length + % x must be a monotonically increasing series + + % WV Jan. 2013, for SCOPE 1.40 + + nx = length(x); + if size(x,1) == 1 + x = x'; + end + if size(y,1) ~= 1 + y = y'; + end + step = x(2:nx) - x(1:nx-1); + mean = .5 * (y(1:nx-1) + y(2:nx)); + int = mean * step; +end \ No newline at end of file diff --git a/src/+helpers/aggreg.m b/src/+helpers/aggreg.m new file mode 100644 index 00000000..825ebaad --- /dev/null +++ b/src/+helpers/aggreg.m @@ -0,0 +1,63 @@ +function [M] = aggreg(atmfile,SCOPEspec) + +% Aggregate MODTRAN data over SCOPE bands by averaging (over rectangular band +% passes) + +% Read .atm file with MODTRAN data +s = importdata(atmfile); +wlM = s.data(:,2); +T = s.data(:,3:20); + +% Extract 6 relevant columns from T + +% 1: +% 3: +% 4: +% 5: +% 12: +% 16: + +U = [T(:,1) T(:,3) T(:,4) T(:,5) T(:,12) T(:,16)]; + +nwM = length(wlM); + +nreg = SCOPEspec.nreg; +streg = SCOPEspec.start; +enreg = SCOPEspec.end; +width = SCOPEspec.res; + +% Nr. of bands in each region + +nwreg = int32((enreg-streg)./width)+1; + +off = int32(zeros(nreg,1)); + +for i=2:nreg + off(i) = off(i-1)+nwreg(i-1); +end + +nwS = sum(nwreg); +n = zeros(nwS,1); % Count of MODTRAN data contributing to a band +S = zeros(nwS,6); % Intialize sums + +%k = int32(0); +j = int32(zeros(nreg,1)); % Band index within regions + +for iwl = 1:nwM + w = wlM(iwl); % MODTRAN wavelength + for r = 1:nreg + j(r) = int32(round(w-streg(r))./(width(r)))+1; + if j(r)>0 && j(r)<=nwreg(r) % test if index is in valid range + k = j(r)+off(r); % SCOPE band index + S(k,:) = S(k,:)+U(iwl,:); % Accumulate from contributing MODTRAN data + n(k) = n(k)+1; % Increment count + end + end +end + +M = zeros(size(S,1),6); +for i = 1:6 + M(:,i) = S(:,i)./n; % Calculate averages per SCOPE band +end + +end diff --git a/src/+helpers/count.m b/src/+helpers/count.m new file mode 100644 index 00000000..6fa9606b --- /dev/null +++ b/src/+helpers/count.m @@ -0,0 +1,20 @@ +function [vnew]=count(nvars,v,vmax,id) + +% nvars = number of digits +% v = current vector of digits +% vmax = maximum values of digits +% id = starting digit +% vnew = new vector of digits + +i=id; + +% starting at id, set digits which are at its maximum equal to 1 +% first digit that is not at its maximum is incremented + +while v(i)==vmax(i) + v(i)=1; + i=rem(i,nvars)+1; +end +v(i)=rem(v(i),vmax(i))+1; +vnew=v; +end \ No newline at end of file diff --git a/src/+io/assignvarnames.m b/src/+io/assignvarnames.m new file mode 100644 index 00000000..dcf7b0b8 --- /dev/null +++ b/src/+io/assignvarnames.m @@ -0,0 +1,67 @@ +function V = assignvarnames() +V = struct('Name','','Val', zeros(64,1)); +V(1).Name = 'Cab'; +V(2).Name = 'Cca'; +V(3).Name = 'Cdm'; +V(4).Name = 'Cw'; +V(5).Name = 'Cs'; +V(6).Name = 'N'; +V(7).Name = 'rho_thermal'; +V(8).Name = 'tau_thermal'; +V(9).Name = 'Vcmo'; +V(10).Name = 'm'; % see # 64, below for intercept: 'BallBerry0' +V(11).Name = 'Type'; +V(12).Name = 'kV'; +V(13).Name = 'Rdparam'; +V(14).Name = 'Tparam'; +V(15).Name = 'fqe'; +V(16).Name = 'spectrum'; +V(17).Name = 'rss'; +V(18).Name = 'rs_thermal'; +V(19).Name = 'cs'; +V(20).Name = 'rhos'; +V(21).Name = 'lambdas'; +V(22).Name = 'LAI'; +V(23).Name = 'hc'; +V(24).Name = 'zo'; +V(25).Name = 'd'; +V(26).Name = 'LIDFa'; +V(27).Name = 'LIDFb'; +V(28).Name = 'leafwidth'; +V(29).Name = 'z'; +V(30).Name = 'Rin'; +V(31).Name = 'Ta'; +V(32).Name = 'Rli'; +V(33).Name = 'p'; +V(34).Name = 'ea'; +V(35).Name = 'u'; +V(36).Name = 'Ca'; +V(37).Name = 'Oa'; +V(38).Name = 'rb'; +V(39).Name = 'Cd'; +V(40).Name = 'CR'; +V(41).Name = 'CD1'; +V(42).Name = 'Psicor'; +V(43).Name = 'CSSOIL'; +V(44).Name = 'rbs'; +V(45).Name = 'rwc'; +V(46).Name = 'startDOY'; +V(47).Name = 'endDOY'; +V(48).Name = 'LAT'; +V(49).Name = 'LON'; +V(50).Name = 'timezn'; +V(51).Name = 'tts'; +V(52).Name = 'tto'; +V(53).Name = 'psi'; +V(54).Name = 'SMC'; +V(55).Name = 'Tyear'; +V(56).Name = 'beta'; +V(57).Name = 'kNPQs'; +V(58).Name = 'qLs'; +V(59).Name = 'stressfactor'; +V(60).Name = 'Cant'; %Added March 2017 +V(61).Name = 'BSMBrightness'; +V(62).Name = 'BSMlat'; +V(63).Name = 'BSMlon'; +V(64).Name = 'BallBerry0'; % acccidentally left out of v1.7 +end diff --git a/src/+io/create_output_files.m b/src/+io/create_output_files.m new file mode 100644 index 00000000..f0b3b004 --- /dev/null +++ b/src/+io/create_output_files.m @@ -0,0 +1,231 @@ +function Output_dir = create_output_files(parameter_file, F, path_of_code, options, V, vmax, spectral) +%% Create DATA files +% author J.timmermans +% last modified 4 Aug 2008: Added the creation of log file (file with input parameters) +% 4 Aug 2008: j.timmermans: included variable output directories +% 31 Jul 2008: (CvdT) added layer_pn.dat +% 19 Sep 2008: (CvdT) added spectrum.dat +% 16 Apr 2009: (CvdT) added layer_rn.dat +% 18 Nov 2013: (CvdT) several updates. + +%% Create Output dir + +% a=mfilename('fullpath'); +% c=strfind(a,filesep); +% pathsalida=a(1:c(end-1)-1); +% string = datestr(now,30); +% +% Outdir_Name = char(F(1).FileName); +% Output_dir = fullfile(pathsalida,'output',string); + +string = clock; + +Outdir_Name = char(F(1).FileName); +Output_dir = sprintf(['../output/',Outdir_Name,'_%4.0f-%02.0f-%02.0f-%02.0f%02.0f/'],[string(1) string(2) string(3) string(4) string(5)]); +warning('off','MATLAB:DELETE:FileNotFound') +if any(~exist(Output_dir,'dir')) + mkdir(Output_dir) + mkdir([Output_dir,'Parameters/']) + mkdir([Output_dir,'Directional/']) + mkdir([Output_dir,'figures/']) +end + + +%% Log File +for i = 1:length(parameter_file) + copyfile(['../' parameter_file{i}],[Output_dir,'Parameters/', parameter_file{i}],'f') +end +fidpath = fopen([Output_dir,'Parameters/SCOPEversion.txt'],'w'); % complete path of the SCOPE code +fprintf(fidpath,'%s', path_of_code); +%copyfile(['../' parameter_file],[Output_dir,'Parameters/', parameter_file ],'f') + +%% Normal Output +fidf = fopen([Output_dir,'fluxes.dat'],'w'); % fluxes +fidt = fopen([Output_dir,'surftemp.dat'],'w'); % surftemp +fidra = fopen([Output_dir,'aerodyn.dat'],'w'); % aerodyn +fidr = fopen([Output_dir,'radiation.dat'],'w'); % radiation +fidwl = fopen([Output_dir,'wl.dat'],'w'); % wavelength +fidsi = fopen([Output_dir,'irradiance_spectra.dat'],'w'); % Fluorescence +fidfho = fopen([Output_dir,'spectrum_hemis_optical.dat'],'w'); % spectrum hemispherical +fidfoo = fopen([Output_dir,'spectrum_obsdir_optical.dat'],'w'); % spectrum observation direction +fidref = fopen([Output_dir,'reflectance.dat'],'w'); % reflectance spectrum +fidp = fopen([Output_dir,'BOC_irradiance.dat'],'w'); + +if options.calc_ebal + fidto = fopen([Output_dir,'spectrum_obsdir_BlackBody.dat'],'w'); % spectrum observation direction +end + +%if ~(options.simulation==1) +fidv = fopen([Output_dir,'pars_and_input.dat'],'w'); % wavelength +for j = 1:length(V) + fprintf(fidv,'%s\t',V(j).Name); +end +fprintf(fidv,'\r'); +%end + +%if ~(options.simulation==1) +fidvs = fopen([Output_dir,'pars_and_input_short.dat'],'a'); +for j = find(vmax>1) + fprintf(fidvs,'%s\t',V(vmax>1).Name); +end +fprintf(fidvs,' \r'); +% +%% Optional Output +if options.calc_vert_profiles + fidgp = fopen([Output_dir,'gap.dat'],'w'); % gap + fidtc = fopen([Output_dir,'leaftemp.dat'],'w'); % leaftemp + fidhl = fopen([Output_dir,'layer_H.dat'],'w'); % vertical profile + fidlel = fopen([Output_dir,'layer_lE.dat'],'w'); % latent heat + fidal = fopen([Output_dir,'layer_A.dat'],'w'); % + fidpl = fopen([Output_dir,'layer_aPAR.dat'],'w'); % + fidplC = fopen([Output_dir,'layer_aPAR_Cab.dat'],'w'); % + fidrn = fopen([Output_dir,'layer_Rn.dat'],'w'); % + if options.calc_fluor + fidfll = fopen([Output_dir,'layer_fluorescence.dat'],'w'); + fidfllem = fopen([Output_dir,'layer_fluorescenceEm.dat'],'w'); + fidNPQ = fopen([Output_dir,'layer_NPQ.dat'],'w'); + end + +else + delete([Output_dir,'../output/leaftemp.dat']) + delete([Output_dir,'../output/layer_H.dat']) + delete([Output_dir,'../output/layer_lE.dat']) + delete([Output_dir,'../output/layer_A.dat']) + delete([Output_dir,'../output/layer_aPAR.dat']) + delete([Output_dir,'../output/layer_Rn.dat']) +end + +if options.calc_fluor + fidfl = fopen([Output_dir,'fluorescence.dat'],'w'); % Fluorescence + if options.calc_PSI + fidfl1 = fopen([Output_dir,'fluorescencePSI.dat'],'w'); % Fluorescence + fidfl2 = fopen([Output_dir,'fluorescencePSII.dat'],'w'); % Fluorescence + end + fidflh = fopen([Output_dir,'fluorescence_hemis.dat'],'w'); % Fluorescence + fidfle = fopen([Output_dir,'fluorescence_emitted_by_all_leaves.dat'],'w'); + fidfrc = fopen([Output_dir,'fluorescence_emitted_by_all_photosystems.dat'],'w'); + fidflsu = fopen([Output_dir,'fluorescence_sunlit.dat'],'w'); % Fluorescence + fidflsh = fopen([Output_dir,'fluorescence_shaded.dat'],'w'); % Fluorescence + fidflsc = fopen([Output_dir,'fluorescence_scattered.dat'],'w'); % Fluorescence +else + delete([Output_dir,'fluorescence.dat']) +end + +if options.calc_directional + delete([Output_dir,'BRDF/*.dat']) +end + +if options.calc_planck && options.calc_ebal + fidplancko = fopen([Output_dir,'spectrum_obsdir_thermal.dat'],'w'); % spectrum observation direction + fidplanckh = fopen([Output_dir,'spectrum_hemis_thermal.dat'],'w'); % spectrum hemispherically integrated +end + +%% write headers +if options.save_headers + fprintf(fidf,'timestep counter year t Rntot lEtot Htot Rnctot lEctot Hctot Actot Rnstot lEstot Hstot Gtot Resp aPAR aPAR_Cab faPAR aPAR_energyunits iPAR'); + if options.calc_fluor + fprintf(fidf,' fluortot fluor_yield'); + end + fprintf(fidf,'\r'); + fprintf(fidf,'"" "" "" JulianDay Wm-2 Wm-2 Wm-2 Wm-2 Wm-2 Wm-2 umolm-2s-1 Wm-2 Wm-2 Wm-2 Wm-2 umolm-2s-1 umolm-2s-1 umolumol-1 Wm-2 umolm-2s-1'); + if options.calc_fluor + fprintf(fidf,' W m-2 WW^{-1}'); + end + fprintf(fidf,'\r'); + + fprintf(fidt,'timestep year t Ta Tss(1) Tss(2) Tcave Tsave \r'); + fprintf(fidt,'"" "" JulianDay ^oC ^oC ^oC ^oC ^oC \r'); + + fprintf(fidra, 'raa rawc raws ustar \r'); + fprintf(fidra, 'sm-1 sm-1 sm-1 ms-1 \r'); + + fprintf(fidr, 'timestep year t ShortIn LongIn HemisOutShort HemisOutLong HemisOutTot Net \r'); + fprintf(fidr, '"" "" JulianDay Wm-2 Wm-2 Wm-2 Wm-2 Wm-2 Wm-2\r'); + + fprintf(fidfho, 'hemispherically integrated radiation spectrum \r'); + fprintf(fidfho, 'W m-2 um-1 \r'); + + fprintf(fidfoo, 'radiance spectrum in observation direction \r'); + fprintf(fidfoo, 'W m-2 sr-1 um-1 \r'); + + if options.calc_ebal + fprintf(fidto, 'thermal BlackBody emission spectrum in observation direction \r'); + fprintf(fidto, 'W m-2 sr-1 um-1 \r'); + if options.calc_planck + fprintf(fidplancko, 'thermal emission spectrum in observation direction \r'); + fprintf(fidplancko, 'W m-2 sr-1 um-1 \r'); + + fprintf(fidplanckh, 'thermal emission spectrum in hemispherical direction \r'); + fprintf(fidplanckh, 'W m-2 sr-1 um-1 \r'); + end + end + + fprintf(fidwl, 'wavelengths of the spectral output files \r'); + fprintf(fidwl, 'um \r'); + + fprintf(fidsi, 'irradiance \r'); + fprintf(fidsi, 'W m-2 um-1\r'); + + fprintf(fidref, 'reflectance \r'); + fprintf(fidref, 'fraction of radiation in observation direction *pi / irradiance \r'); + + fprintf(fidp, 'Bottom of canopy irradiance in the shaded fraction, and average BOC irradiance \r'); + fprintf(fidp, 'First 2162 columns: shaded fraction. Last 2162 columns: average BOC irradiance. Unit: Wm-2 um-1 \r'); + + % fprintf(fidref2, 'reflectance including dynamic Xanthophyll effects \r'); + % fprintf(fidref2, 'fraction of radiation in observation direction *pi / irradiance \r'); + + if options.calc_fluor + fprintf(fidfl, 'fluorescence per simulation for wavelengths of 640 to 850 nm, with 1 nm resolution \r'); + fprintf(fidfl, 'W m-2 um-1 sr-1\r'); + if options.calc_PSI + fprintf(fidfl1, 'fluorescence per simulation for wavelengths of 640 to 850 nm, with 1 nm resolution, for PSI only \r'); + fprintf(fidfl1, 'W m-2 um-1 sr-1\r'); + fprintf(fidfl2, 'fluorescence per simulation for wavelengths of 640 to 850 nm, with 1 nm resolution, for PSII only \r'); + fprintf(fidfl2, 'W m-2 um-1 sr-1\r'); + end + fprintf(fidflh, 'hemispherically integrated fluorescence per simulation for wavelengths of 640 to 850 nm, with 1 nm resolution \r'); + fprintf(fidflh, 'W m-2 um-1 \r'); + fprintf(fidfle, 'total emitted fluorescence by all leaves for wavelengths of 640 to 850 nm, with 1 nm resolution \r'); + fprintf(fidfle, 'W m-2 um-1 \r'); + fprintf(fidfrc, 'total emitted fluorescence by all photosystems for wavelengths of 640 to 850 nm, with 1 nm resolution \r'); + fprintf(fidfrc, 'W m-2 um-1 \r'); + fprintf(fidflsu, 'TOC fluorescence contribution from sunlit leaves for wavelengths of 640 to 850 nm, with 1 nm resolution \r'); + fprintf(fidflsu, 'W m-2 um-1 sr^{-1} \r'); + fprintf(fidflsh, 'TOC fluorescence contribution from shaded leaves for wavelengths of 640 to 850 nm, with 1 nm resolution \r'); + fprintf(fidflsh, 'W m-2 um-1 sr^{-1} \r'); + fprintf(fidflsc, 'TOC fluorescence contribution from from leaves and soil after scattering for wavelenghts of 640 to 850 nm, with 1 nm resolution \r'); + fprintf(fidflsc, 'W m-2 um-1 sr^{-1} \r'); + + end + if options.calc_vert_profiles + fprintf(fidgp, 'Fraction leaves in the sun, fraction of observed, fraction of observed&visible per layer \r'); + fprintf(fidgp, ' rows: simulations or time steps, columns: layer numbers \r'); + fprintf(fidtc, 'leaf temperature of sunlit leaves, shaded leaves, and weighted average leaf temperature per layer \r'); + fprintf(fidtc, '^oC ^oC ^oC \r'); + fprintf(fidhl, 'sensible heat flux per layer \r'); + fprintf(fidhl, 'Wm-2\r'); + fprintf(fidlel, 'latent heat flux per layer \r'); + fprintf(fidlel, 'Wm-2\r'); + fprintf(fidal, 'photosynthesis per layer\r'); + fprintf(fidal, 'umol-2s-1\r'); + fprintf(fidpl, 'aPAR per leaf layer \r'); + fprintf(fidpl, 'umol-2s-1 \r'); + fprintf(fidplC, 'aPAR by Cab per leaf layer \r'); + fprintf(fidplC, 'umol-2s-1 \r'); + fprintf(fidrn,'net radiation per leaf layer \r'); + fprintf(fidrn,'Wm-2\r'); + if options.calc_fluor + fprintf(fidfll, 'upward fluorescence per layer\r'); + fprintf(fidfll, 'W m^{-2}\r'); + + fprintf(fidNPQ, 'average NPQ = 1-(fm-fo)/(fm0-fo0), per layer \r'); + fprintf(fidNPQ, '\r'); + end + end +end +%% +fprintf(fidwl,'%9.5f ',spectral.wlS); +warning('on','MATLAB:DELETE:FileNotFound') +fclose all; +end \ No newline at end of file diff --git a/src/+io/define_bands.m b/src/+io/define_bands.m new file mode 100644 index 00000000..d4c77e38 --- /dev/null +++ b/src/+io/define_bands.m @@ -0,0 +1,33 @@ +function [spectral] = define_bands() + + % Define spectral regions for SCOPE v_1.40 + % All spectral regions are defined here as row vectors + % WV Jan. 2013 + + % 3 spectral regions for SCOPE + + reg1 = 400 : 1 : 2400; + reg2 = 2500 : 100 : 15000; + reg3 = 16000 : 1000 : 50000; + + spectral.wlS = [reg1 reg2 reg3]; + + % Other spectral (sub)regions + + spectral.wlP = reg1; % PROSPECT data range + spectral.wlE = 400:1:750; % excitation in E-F matrix + spectral.wlF = 640:1:850; % chlorophyll fluorescence in E-F matrix + spectral.wlO = reg1; % optical part + spectral.wlT = [reg2 reg3]; % thermal part + spectral.wlZ = 500:1:600; % xanthophyll region + wlS = spectral.wlS; + spectral.wlPAR = wlS(wlS>=400 & wlS<=700); % PAR range + + % Data used by aggreg routine to read in MODTRAN data + + spectral.SCOPEspec.nreg = 3; + spectral.SCOPEspec.start = [ 400 2500 16000]; + spectral.SCOPEspec.end = [2400 15000 50000]; + spectral.SCOPEspec.res = [ 1 100 1000]; + +end diff --git a/src/+io/define_constants.m b/src/+io/define_constants.m new file mode 100644 index 00000000..db3d475f --- /dev/null +++ b/src/+io/define_constants.m @@ -0,0 +1,18 @@ +function [const]=define_constants() + + const.A = 6.02214E23; % [mol-1] Constant of Avogadro + const.h = 6.6262E-34; % [J s] Planck's constant + const.c = 299792458; % [m s-1] Speed of light + const.cp = 1004; % [J kg-1 K-1] Specific heat of dry air + const.R = 8.314; % [J mol-1K-1] Molar gas constant + const.rhoa = 1.2047; % [kg m-3] Specific mass of air + const.g = 9.81; % [m s-2] Gravity acceleration + const.kappa = 0.4; % [] Von Karman constant + const.MH2O = 18; % [g mol-1] Molecular mass of water + const.Mair = 28.96; % [g mol-1] Molecular mass of dry air + const.MCO2 = 44; % [g mol-1] Molecular mass of carbon dioxide + const.sigmaSB = 5.67E-8; % [W m-2 K-4] Stefan Boltzman constant + const.deg2rad = pi/180; % [rad] Conversion from deg to rad + const.C2K = 273.15; % [K] Melting point of water + +end \ No newline at end of file diff --git a/src/+io/initialize_output_structures.m b/src/+io/initialize_output_structures.m new file mode 100644 index 00000000..6b0c495c --- /dev/null +++ b/src/+io/initialize_output_structures.m @@ -0,0 +1,18 @@ +function [rad,thermal,fluxes] = initialize_output_structures(spectral) + +[iter.counter ,... + fluxes.Rntot, fluxes.lEtot, fluxes.Htot, fluxes.Atot ,... + fluxes.Rnctot, fluxes.lEctot, fluxes.Hctot, fluxes.Actot ,... + fluxes.Rnstot, fluxes.lEstot, fluxes.Hstot, fluxes.Gtot, fluxes.Resp ,... + thermal.Tcave, thermal.Tsave ,... + thermal.raa, thermal.rawc, thermal.raws, thermal.ustar ,... + rad.Lout, rad.Loutt , rad.Eoutte, rad.PAR ] = deal(NaN); +thermal.Ts = NaN(2,1); +%Fc = deal(NaN(nl,1)); + +[rad.LoF_ ,... + rad.Fhem_] = deal(NaN(size(spectral.wlF,1),1)); + +[rad.Eouto, rad.Eout ] = deal(NaN); +[rad.Lout_,rad.Lo_] = deal(NaN(size(spectral.wlS,1)),1); +thermal.Ta = NaN; \ No newline at end of file diff --git a/src/+io/load_timeseries.m b/src/+io/load_timeseries.m new file mode 100644 index 00000000..a9251d94 --- /dev/null +++ b/src/+io/load_timeseries.m @@ -0,0 +1,132 @@ +function [V,xyt,canopy] = load_timeseries(V,leafbio,soil,canopy,meteo,constants,F,xyt,path_input,options) + +Dataset_dir = ['dataset ' char(F(5).FileName)]; +t_file = char(F(6).FileName); +year_file = char(F(7).FileName); +Rin_file = char(F(8).FileName); +Rli_file = char(F(9).FileName); +p_file = char(F(10).FileName); +Ta_file = char(F(11).FileName); +ea_file = char(F(12).FileName); +u_file = char(F(13).FileName); +CO2_file = char(F(14).FileName); +z_file = char(F(15).FileName); +tts_file = char(F(16).FileName); +LAI_file = char(F(17).FileName); +hc_file = char(F(18).FileName); +SMC_file = char(F(19).FileName); +Vcmax_file = char(F(20).FileName); +Cab_file = char(F(21).FileName); + +%% 1. Time and zenith angle +xyt.t = load([path_input,Dataset_dir,'/' ,t_file] ); +xyt.year = load([path_input,Dataset_dir,'/',year_file]); +t_ = xyt.t; + +DOY_ = floor(t_); +time_ = 24*(t_-DOY_); + +if ~isempty(tts_file) + V(51).Val = load([path_input,Dataset_dir,'/',tts_file]); +else + ttsR = equations.calczenithangle(DOY_,time_ - xyt.timezn ,0,0,xyt.LON,xyt.LAT); %sun zenith angle in rad + V(51).Val = min(85,ttsR/constants.deg2rad); %sun zenith angle in deg +end +%% 2. Radiation +if ~isempty(Rin_file) + V(30).Val = load([path_input,Dataset_dir,'/',Rin_file]); +else + V(30).Val = V(30).Val*ones(size(t_)); +end +if ~isempty(Rli_file) + V(32).Val = load([path_input,Dataset_dir,'/',Rli_file]); +else + V(32).Val = V(32).Val*ones(size(t_)); +end + +%% 3. Windspeed, air temperature, humidity and air pressure +if ~isempty(u_file)% wind speed + V(35).Val = load([path_input,Dataset_dir,'/',u_file]); +else + V(35).Val = V(35).Val*ones(size(t_)); +end + +if ~isempty(Ta_file)%air temperature + V(31).Val = load([path_input,Dataset_dir,'/',Ta_file]); +else + V(31).Val = V(31).Val*ones(size(t_)); +end + +if ~isempty(ea_file)%air temperature + V(34).Val = load([path_input,Dataset_dir,'/',ea_file]); +else + V(34).Val = V(34).Val*ones(size(t_)); +end + +if ~isempty(p_file) + V(33).Val = load([path_input,Dataset_dir,'/',p_file]); +else + V(33).Val = V(33).Val*ones(size(t_)); +end + +%% 4. Vegetation structure (measurement height, vegetation height and LAI) +if ~isempty(z_file) + ztable = load([path_input,Dataset_dir,'/',z_file]); + V(29).Val = interp1(ztable(:,1),ztable(:,2),t_); +else + V(29).Val = meteo.z*ones(size(t_)); +end +if ~isempty(LAI_file) + LAItable = load([path_input,Dataset_dir,'/',LAI_file]); + V(22).Val = interp1(LAItable(:,1),LAItable(:,2),t_); +else + V(22).Val = canopy.LAI*ones(size(time_)); +end +if ~isempty(hc_file) + hctable = load([path_input,Dataset_dir,'/',hc_file]); + V(23).Val = interp1(hctable(:,1),hctable(:,2),t_); + canopy.hc = V(23).Val; + if options.calc_zo + [V(24).Val ,V(25).Val ] = equations.zo_and_d(soil,canopy); + else + V(24).Val = ones(size(t_))*V(24).Val; + V(25).Val = ones(size(t_))*V(25).Val; + end + +else + V(23).Val = canopy.hc*ones(size(t_)); + V(24).Val = canopy.zo*ones(size(t_)); + V(25).Val = canopy.d*ones(size(t_)); +end + + +%% 5. Gas concentrations +if ~isempty(CO2_file) + Ca_ = load([path_input,Dataset_dir,'/',CO2_file])*constants.Mair/constants.MCO2/constants.rhoa; % conversion from mg m-3 to ppm + % mg(CO2)/m-3 * g(air)/mol(air) * mol(CO2)/g(CO2) * m3(air)/kg(air) * 10^-3 g(CO2)/mg(CO2) * 10^-3 kg(air)/g(air) * 10^6 ppm + jj = isnan(Ca_); %find data with good quality Ca data + Ca_(jj) = 380; +else + Ca_ = ones(length(t_),1)* 380; +end +V(36).Val = Ca_; + +%% 6. Soil Moisture Content +if ~isempty(SMC_file) + V(54).Val = load([path_input,Dataset_dir,'/',SMC_file]); +end + +%% 7. Leaf biochemical parameters +if ~isempty(Vcmax_file) + Vcmaxtable = load([path_input,Dataset_dir,'/',Vcmax_file]); + V(9).Val = interp1(Vcmaxtable(:,1),Vcmaxtable(:,2),t_); +else + V(9).Val = leafbio.Vcmo*ones(size(t_)); +end + +if ~isempty(Cab_file) + Cabtable = load([path_input,Dataset_dir,'/',Cab_file]); + V(1).Val = interp1(Cabtable(:,1),Cabtable(:,2),t_); +else + V(1).Val = leafbio.Cab*ones(size(t_)); +end diff --git a/src/+io/output_data.m b/src/+io/output_data.m new file mode 100644 index 00000000..003cdf5f --- /dev/null +++ b/src/+io/output_data.m @@ -0,0 +1,223 @@ +function output_data(Output_dir, options, k, iter, xyt, fluxes, rad, thermal, gap, meteo, spectral, V, vi, vmax, profiles, directional, angles) +%% OUTPUT DATA +% author C. Van der Tol +% modified: 31 Jun 2008: (CvdT) included Pntot in output fluxes.dat +% last modified: 04 Aug 2008: (JT) included variable output directories +% 31 Jul 2008: (CvdT) added layer_pn.dat +% 19 Sep 2008: (CvdT) spectrum of outgoing radiation +% 19 Sep 2008: (CvdT) Pntot added to fluxes.dat +% 15 Apr 2009: (CvdT) Rn added to vertical profiles +% 03 Oct 2012: (CvdT) included boolean variabel calcebal +% 04 Oct 2012: (CvdT) included reflectance and fPAR +% 10 Mar 2013: (CvdT) major revision: introduced structures +% 22 Nov 2013: (CvdT) added additional outputs +%% Standard output + +% fluxes +fidf = fopen([Output_dir,'fluxes.dat'],'a'); +fprintf(fidf,'%9.0f %9.0f %9.0f %9.4f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f',... + [k iter.counter xyt.year(k) xyt.t(k) fluxes.Rntot fluxes.lEtot fluxes.Htot fluxes.Rnctot fluxes.lEctot, ... + fluxes.Hctot fluxes.Actot fluxes.Rnstot fluxes.lEstot fluxes.Hstot fluxes.Gtot fluxes.Resp 1E6*fluxes.aPAR 1E6*fluxes.aPAR_Cab fluxes.aPAR/rad.PAR fluxes.aPAR_Wm2 1E6*rad.PAR]); +if options.calc_fluor + fprintf(fidf,'%9.4f %9.6f', rad.Eoutf, rad.Eoutf./fluxes.aPAR_Wm2); +end +fprintf(fidf,'\r'); + +% surftemp +fidt = fopen([Output_dir,'surftemp.dat'],'a'); +fprintf(fidt,'%9.0f %9.0f %9.4f % 9.2f %9.2f %9.2f %9.2f %9.2f',... + [k xyt.year(k) xyt.t(k) thermal.Ta thermal.Ts(1) thermal.Ts(2) thermal.Tcave thermal.Tsave]); +fprintf(fidt,'\r'); + +% aerodyn +fidra = fopen([Output_dir,'aerodyn.dat'],'a'); +fprintf(fidra,'%15.4f %15.4f %15.4f %15.4f',[thermal.raa, thermal.rawc, thermal.raws, thermal.ustar]); +fprintf(fidra,'\r'); + +% radiation +fidr = fopen([Output_dir,'radiation.dat'],'a'); +fprintf(fidr,'%9.0f %9.0f %9.4f %9.2f %9.2f %9.2f %9.2f %9.2f %9.2f',[k xyt.year(k) xyt.t(k) meteo.Rin meteo.Rli rad.Eouto rad.Eoutt + rad.Eoutte rad.Eouto+rad.Eoutt + rad.Eoutte fluxes.Rntot]); +fprintf(fidr,'\r'); + +% spectrum (added on 19 September 2008) +fidfho = fopen([Output_dir,'spectrum_hemis_optical.dat'],'a'); +fprintf(fidfho,'%9.5f ',rad.Eout_'); +fprintf(fidfho,'\r'); + +fidfoo = fopen([Output_dir,'spectrum_obsdir_optical.dat'],'a'); +fprintf(fidfoo,'%9.5f ',rad.Lo_'); +fprintf(fidfoo,'\r'); + +if options.calc_ebal + fidto = fopen([Output_dir,'spectrum_obsdir_BlackBody.dat'],'a'); + fprintf(fidto,'%9.2f', rad.LotBB_'); + fprintf(fidto,'\r'); + + if options.calc_planck + fidplanckh = fopen([Output_dir,'spectrum_hemis_thermal.dat'],'a'); + fprintf(fidplanckh,'%9.2f', rad.Eoutte_'); + fprintf(fidplanckh,'\r'); + + fidplancko = fopen([Output_dir,'spectrum_obsdir_thermal.dat'],'a'); + fprintf(fidplancko,'%9.2f', rad.Lot_'); + fprintf(fidplancko,'\r'); + end +end + +fidsi = fopen([Output_dir,'irradiance_spectra.dat'],'a'); +fprintf(fidsi,'%10.2f',meteo.Rin*(rad.fEsuno+rad.fEskyo)'); +fprintf(fidsi,'\r'); + +fidref = fopen([Output_dir,'reflectance.dat'],'a'); +reflectance = pi*rad.Lo_./(rad.Esun_+rad.Esky_); +reflectance(spectral.wlS>3000) = NaN; +fprintf(fidref,'%9.5f',reflectance'); +fprintf(fidref,'\r'); + +% input and parameter values (added June 2012) +fidv = fopen([Output_dir,'pars_and_input.dat'],'a'); +for i = 1:length(V) + fprintf(fidv,'%12.3f',V(i).Val(vi(i))); +end +fprintf(fidv,'\r'); + +fidvs = fopen([Output_dir,'pars_and_input_short.dat'],'a'); +k2 = find(vmax>1); +for i = 1:length(k2) + fprintf(fidvs,'%9.5f ',V(k2(i)).Val(vi(k2(i)))); +end +fprintf(fidvs,' \r'); + +%% Optional Output + +if options.calc_vert_profiles + + % gap + fidgp = fopen([Output_dir,'gap.dat'],'a'); + fprintf(fidgp,'%9.2f %9.2f %9.2f',[gap.Ps gap.Po gap.Pso]); + fprintf(fidgp,'\r'); + + fidpl = fopen([Output_dir,'layer_aPAR.dat'],'a'); + fprintf(fidpl,'%9.2f',[1E6*profiles.Pn1d' 0]); + fprintf(fidpl,'\r'); + + fidplC = fopen([Output_dir,'layer_aPAR_Cab.dat'],'a'); + fprintf(fidplC,'%9.2f',[1E6*profiles.Pn1d_Cab' 0]); + fprintf(fidplC,'\r'); + + if options.calc_ebal + + % leaftemp + fidtc = fopen([Output_dir,'leaftemp.dat'],'a'); + fprintf(fidtc,'%9.2f',[profiles.Tcu1d' profiles.Tch' profiles.Tc1d']); + fprintf(fidtc,'\r'); + + fidhl = fopen([Output_dir,'layer_h.dat'],'a'); + fprintf(fidhl,'%9.2f',[profiles.Hc1d' fluxes.Hstot]); + fprintf(fidhl,'\r'); + + fidlel = fopen([Output_dir,'layer_le.dat'],'a'); + fprintf(fidlel,'%9.2f',[profiles.lEc1d' fluxes.lEstot]); + fprintf(fidlel,'\r'); + + fidal = fopen([Output_dir,'layer_a.dat'],'a'); + fprintf(fidal,'%9.2f',[profiles.A1d' fluxes.Resp]); + fprintf(fidal,'\r'); + + fidNPQ = fopen([Output_dir,'layer_NPQ.dat'],'a'); + fprintf(fidNPQ,'%9.2f',[profiles.qE' 0]); + fprintf(fidNPQ,'\r'); + + fidrn = fopen([Output_dir,'layer_rn.dat'],'a'); + fprintf(fidrn,'%9.2f',[profiles.Rn1d' fluxes.Rnstot]); + fprintf(fidrn,'\r'); + end + if options.calc_fluor + fidfll = fopen([Output_dir,'layer_fluorescence.dat'],'a'); + fprintf(fidfll,'%9.2f',profiles.fluorescence'); + fprintf(fidfll,'\r'); + end +end + +if options.calc_fluor% && options.calc_ebal + fidfl = fopen([Output_dir,'fluorescence.dat'],'a'); + if options.calc_PSI + fidfl1 = fopen([Output_dir,'fluorescencePSI.dat'],'a'); + fidfl2 = fopen([Output_dir,'fluorescencePSII.dat'],'a'); + end + fidflh = fopen([Output_dir,'fluorescence_hemis.dat'],'a'); + fidfle = fopen([Output_dir,'fluorescence_emitted_by_all_leaves.dat'],'a'); + fidfrc = fopen([Output_dir,'fluorescence_emitted_by_all_photosystems.dat'],'a'); + fidflsu = fopen([Output_dir,'fluorescence_sunlit.dat'],'a'); + fidflsh = fopen([Output_dir,'fluorescence_shaded.dat'],'a'); + fidflsc = fopen([Output_dir,'fluorescence_scattered.dat'],'a'); + + for j=1:size(spectral.wlF,1) + fprintf(fidfl,'%10.4f ',rad.LoF_); + if options.calc_PSI + fprintf(fidfl1,'%10.4f ',rad.LoF1_); + fprintf(fidfl2,'%10.4f ',rad.LoF2_); + end + fprintf(fidflh,'%10.4f ',rad.Fhem_); + fprintf(fidfle,'%10.4f ',rad.Fem_); + fprintf(fidfrc,'%10.4f ',rad.Femtot); + fprintf(fidflsu,'%10.4f ',sum(rad.LoF_sunlit,2)); + fprintf(fidflsh,'%10.4f ',sum(rad.LoF_shaded,2)); + fprintf(fidflsc,'%10.4f ',sum(rad.LoF_scattered,2)+sum(rad.LoF_soil,2)); + end + fprintf(fidfl,' \r'); + if options.calc_PSI + fprintf(fidfl1,' \r'); + fprintf(fidfl2,' \r'); + end + fprintf(fidflh,' \r'); + fprintf(fidfle,' \r'); + fprintf(fidfrc,' \r'); + fprintf(fidflsu,' \r'); + fprintf(fidflsh,' \r'); + fprintf(fidflsc,' \r'); +end + +fidp = fopen([Output_dir,'BOC_irradiance.dat'],'a'); +fprintf(fidp,'%9.0f %9.0f', rad.Emin_(61,:),rad.Emin_(61,:)+(rad.Esun_*gap.Ps(61)')'); +fprintf(fidp,'\r'); + +%% +if options.calc_directional && options.calc_ebal + Output_angle = [directional.tto'; directional.psi'; angles.tts*ones(size(directional.psi'))]; + Output_brdf = [spectral.wlS' directional.brdf_]; + if options.calc_planck + Output_temp = [spectral.wlT' directional.Lot_]; + else + Output_temp = [directional.BrightnessT]; + end + if options.calc_fluor + Output_fluor = [spectral.wlF' directional.LoF_]; + end + + save([Output_dir,'Directional/',sprintf('BRDF (SunAngle %2.2f degrees).dat',angles.tts)],'Output_brdf' ,'-ASCII','-TABS') + save([Output_dir,'Directional/',sprintf('Angles (SunAngle %2.2f degrees).dat',angles.tts)],'Output_angle','-ASCII','-TABS') + save([Output_dir,'Directional/',sprintf('Temperatures (SunAngle %2.2f degrees).dat',angles.tts)],'Output_temp','-ASCII','-TABS') + + if options.calc_fluor + save([Output_dir,'Directional/',sprintf('Fluorescence (SunAngle %2.2f degrees).dat',angles.tts)],'Output_fluor','-ASCII','-TABS') + end + + fiddirtir = fopen([Output_dir,'Directional/','read me.txt'],'w'); + fprintf(fiddirtir,'The Directional data is written in three files: \r\n'); + fprintf(fiddirtir,'\r\n- Angles: contains the directions. \r\n'); + fprintf(fiddirtir,' * The 1st row gives the observation zenith angles\r\n'); + fprintf(fiddirtir,' * The 2nd row gives the observation azimuth angles\r\n'); + fprintf(fiddirtir,' * The 3rd row gives the solar zenith angles\r\n'); + fprintf(fiddirtir,'\r\n- Temperatures: contains the directional brightness temperature. \r\n'); + fprintf(fiddirtir,' * The 1st column gives the wl values corresponding to the brightness temperature values (except for broadband)\r\n'); + fprintf(fiddirtir,' * The 2nd column gives the Tb values corresponding to the directions given by first column in the Angles file\r\n'); + fprintf(fiddirtir,'\r\n- BRDF: contains the bidirectional distribution functions values. \r\n'); + fprintf(fiddirtir,' * The 1st column gives the wl values corresponding to the BRDF values\r\n'); + fprintf(fiddirtir,' * The 2nd column gives the BRDF values corresponding to the directions given by first column in the Angles file\r\n'); + fclose(fiddirtir); +end + +%% +fclose all; +end \ No newline at end of file diff --git a/src/+io/output_verification.m b/src/+io/output_verification.m new file mode 100644 index 00000000..4359accc --- /dev/null +++ b/src/+io/output_verification.m @@ -0,0 +1,98 @@ +function output_verification(Output_dir) +% Date: 07 August 2012 +% Author: Christiaan van der Tol (tol@itc.nl) +% output_verification.m (script) checks if the output of the latest run +% with SCOPE_v1.51 matches with a 'standard' output located in a directory +% called 'verificationdata'. If it does not, warnings will appear in the +% Matlab command window. +% The following is tested: +% - does the number of output files match? +% - does the size of the files match (number of bytes)? +% - are all files that are in the verification dataset present with the +% same file names? +% - is the content of the files exactly the same? +% If the output is different, for example because different parameter +% values have been used in the simulations, then the variables that are +% different will be plotted: the verification data in blue, and the latest +% run in red. In this way the differences can be visually inspected. + +% clc, close all +% +% directories = dir(['..' filesep 'output' filesep '*']); +% [time_value_s,I] = sort([directories(3:end).datenum]); +% Directory = directories(2+I(end)).name; +% +% Directory = Output_dir + +%% load verification data +path0_ = ['..' filesep 'output' filesep 'verificationdata' filesep]; +path1_ = ['..' filesep 'output' filesep Output_dir filesep]; + +info0 = dir([path0_ filesep '*.dat']); %'standard' validation data (to compare with) +info1 = dir([path1_ filesep '*.dat']); %the most recent output + +[differentsize,differentcontent,differentnumberoffiles] = deal(0); + +if ~(length(info0)==length(info1)) + fprintf(['\nWarning: in the output file, ' num2str(length(info1)) ' files were stored, \r']) + fprintf(['whereas there should be ' num2str(length(info0)) ' files in this directory \r ']) + fprintf('check the simulation options that are specified the options tab of the input spreadsheet \r') + differentnumberoffiles = 1; +end + +L = length(info0); +for i = 1:L + s0 = info0(i).bytes; + n0 = info0(i).name; + for j = 1:length(info1) + k = strcmp(info1(j).name,n0); + if k, break, end + end + if k + s1 = info1(j).bytes; + if ~(s0==s1) + fprintf(['\n Warning: the file size of ' info0(i).name ' is different from the verification output \r']) + fprintf(['(' num2str(s1) ' instead of ' num2str(s0) ' bytes) \r']) + differentsize = 1; + else + if (~strcmp(info0(i).name,'pars_and_input.dat') && ~strcmp(info0(i).name,'pars_and_input_short.dat')) + D0 = dlmread([path0_ info0(i).name],'',2,0); + D1 = dlmread([path1_ info1(j).name],'',2,0); + else + D0 = dlmread([path0_ info0(i).name],'',1,0); + D1 = dlmread([path1_ info1(j).name],'',1,0); + end + if (nansum(nansum(D0-D1).^2))>1E-9 + fprintf(['\nWarning: data in the output file ' info0(i).name ' are different from the verification output \r ']) + h0 = textread([path0_ info0(i).name],'%s'); + spn = ceil(sqrt(size(D0,2))); + figure(i) + if spn>7 + nl = length(D0); + for z = 1:min(47,nl) + plot(D0(z,:)'), hold on, plot(D1(z,:)','r') + end + title(info0(i).name) + else + for m = 1:size(D0,2) + subplot(spn,spn,m) + plot(D0(:,m)), hold on, plot(D1(:,m),'r') + title([info0(i).name h0(m)]) + end + end + differentcontent = 1; + end + end + else + fprintf(['\nWarning: the file ' info0(i).name ' was not found in the output\r']) + end +end +if differentsize + fprintf('\nWarning The size of some of the output files is different from the verification data \r') + fprintf('Check if the startdate and enddate in the spreadsheet\r') + fprintf('and the verification data in are specified in "Dataset_Dir" in the Filenames tab of the input data spreadsheet \r') +end +if ~(differentsize || differentcontent || differentnumberoffiles) + fprintf('All right, the output is the same as in the verification data set \r') +end +end \ No newline at end of file diff --git a/src/+io/readStructFromExcel.m b/src/+io/readStructFromExcel.m new file mode 100644 index 00000000..30e0ff2a --- /dev/null +++ b/src/+io/readStructFromExcel.m @@ -0,0 +1,52 @@ +function data = readStructFromExcel(filename, sheetName, headerIdx, dataIdx, data_is_char, data_in_rows) +% Read data into a struct with names matching those found in the first column/row +% default is for data to be in columns (A and B); if data_in_rows = true, data are in rows 1 & 2 +% example: +% readStructFromExcel('../input_data.xlsx', 'options', 3, 1) +% readStructFromExcel('../input_data.xlsx', 'filenames', 1, 2, true) + +% default values: +if nargin < 3 + headerIdx = 1; +end +if nargin < 4 + dataIdx = 2; +end +if nargin < 5 + data_is_char = false; +end +if nargin < 6 + data_in_rows = false; +end + +% read in the spreadsheet +% general note: work with all_as_cell to keep rows & columns in sync; MATLAB does NOT keep data and texts aligned +% (readtable only slightly better - it works but will convert mixed columns to string) +if data_in_rows + %NOTE: 'basic' is compatible with Mac but MATLAB (2013b) complains it can't read Unicode '.xls' in basic mode + % Solution: save as xlsx ?! + [~, ~, allCells] = xlsread(filename, sheetName, ''); % = [data, texts, allCells] +else + [~, ~, allCells] = xlsread(filename, sheetName, ''); % = [data, texts, allCells] + allCells = allCells'; % transpose so data are in the same column as headers +end +% data are now in columns + +% delete empty columns + % define two "helper functions" for eliminating null entries +isNotNumeric = @(x) cellfun(@(y) ischar(y) | any(isnan(y)), x); % any is needed because matlab treats string as char array +isCharCell = @(x) cellfun(@(y) ischar(y), x); + +validHeaders = arrayfun(isCharCell, allCells(headerIdx, :)); +if data_is_char + validData = arrayfun(isCharCell, allCells(dataIdx, :)); % , 'UniformOutput', true +else % numeric data: + validData = ~arrayfun(isNotNumeric, allCells(dataIdx, :)); % , 'UniformOutput', true +end + +dataCells = allCells([headerIdx, dataIdx], validHeaders & validData); + +for idx = 1:size(dataCells,2) + varName = strrep(dataCells{1, idx}, ' ', ''); + data.(varName) = dataCells{2, idx}; +end \ No newline at end of file diff --git a/src/+io/select_input.m b/src/+io/select_input.m new file mode 100644 index 00000000..689ce7f6 --- /dev/null +++ b/src/+io/select_input.m @@ -0,0 +1,104 @@ +function [soil,leafbio,canopy,meteo,angles,xyt] = select_input(V,vi,canopy,options,xyt,soil) +global Theta_LL +soil.spectrum = V(16).Val(vi(16)); +soil.rss = V(17).Val(vi(17)); +soil.rs_thermal = V(18).Val(vi(18)); +soil.cs = V(19).Val(vi(19)); +soil.rhos = V(20).Val(vi(20)); +soil.CSSOIL = V(43).Val(vi(43)); +soil.lambdas = V(21).Val(vi(21)); +soil.rbs = V(44).Val(vi(44)); +soil.SMC = Theta_LL(45,1); %%%%%%% soil.SMC = flipŁ¨Theta_LLŁ©Ł¨:,1Ł© +soil.BSMBrightness = V(61).Val(vi(61)); +soil.BSMlat = V(62).Val(vi(62)); +soil.BSMlon = V(63).Val(vi(63)); + +leafbio.Cab = V(1).Val(vi(1)); +leafbio.Cca = V(2).Val(vi(2)); +if options.Cca_function_of_Cab + leafbio.Cca = 0.25*V(1).Val(vi(1)); +end +leafbio.Cdm = V(3).Val(vi(3)); +leafbio.Cw = V(4).Val(vi(4)); +leafbio.Cs = V(5).Val(vi(5)); +leafbio.Cant = V(60).Val(vi(60)); +leafbio.N = V(6).Val(vi(6)); +leafbio.Vcmo = V(9).Val(vi(9)); +leafbio.m = V(10).Val(vi(10)); +leafbio.BallBerry0 = V(64).Val(vi(64)); % JAK 2016-10. Accidentally left out of v1.70 +leafbio.Type = V(11).Val(vi(11)); +leafbio.Tparam = V(14).Val(:); % this is correct (: instead of 14) +fqe = V(15).Val(vi(15)); +leafbio.Rdparam = V(13).Val(vi(13)); + +leafbio.rho_thermal = V(7).Val(vi(7)); +leafbio.tau_thermal = V(8).Val(vi(8)); + +leafbio.Tyear = V(55).Val(vi(55)); +leafbio.beta = V(56).Val(vi(56)); +leafbio.kNPQs = V(57).Val(vi(57)); +leafbio.qLs = V(58).Val(vi(58)); +leafbio.stressfactor = V(59).Val(vi(59)); + +canopy.LAI = V(22).Val(vi(22)); +canopy.hc = V(23).Val(vi(23)); +canopy.LIDFa = V(26).Val(vi(26)); +canopy.LIDFb = V(27).Val(vi(26)); % this is correct (26 instead of 27) +canopy.leafwidth = V(28).Val(vi(28)); +canopy.rb = V(38).Val(vi(38)); +canopy.Cd = V(39).Val(vi(39)); +canopy.CR = V(40).Val(vi(40)); +canopy.CD1 = V(41).Val(vi(41)); +canopy.Psicor = V(42).Val(vi(42)); +canopy.rwc = V(45).Val(vi(45)); +canopy.kV = V(12).Val(vi(12)); +canopy.zo = V(24).Val(vi(24)); +canopy.d = V(25).Val(vi(25)); + +meteo.z = V(29).Val(vi(29)); +meteo.Rin = V(30).Val(vi(30)); +meteo.Ta = V(31).Val(vi(31)); +meteo.Rli = V(32).Val(vi(32)); +meteo.p = V(33).Val(vi(33)); +meteo.ea = V(34).Val(vi(34)); +meteo.u = V(35).Val(vi(35)); +meteo.Ca = V(36).Val(vi(36)); +meteo.Oa = V(37).Val(vi(37)); + +xyt.startDOY = V(46).Val(vi(46)); +xyt.endDOY = V(47).Val(vi(47)); +xyt.LAT = V(48).Val(vi(48)); +xyt.LON = V(49).Val(vi(49)); +xyt.timezn = V(50).Val(vi(50)); + +angles.tts = V(51).Val(vi(51)); +angles.tto = V(52).Val(vi(52)); +angles.psi = V(53).Val(vi(53)); + +%% derived input +if options.soil_heat_method ==1 + soil.GAM = equations.Soil_Inertia1(soil.SMC); +else + soil.GAM = equations.Soil_Inertia0(soil.cs,soil.rhos,soil.lambdas); +end +if options.calc_rss_rbs + [soil.rss,soil.rbs] = equations.calc_rssrbs(soil.SMC,canopy.LAI,soil.rbs); +end + +if leafbio.Type + leafbio.Type = 'C4'; +else + leafbio.Type = 'C3'; +end +canopy.hot = canopy.leafwidth/canopy.hc; +if options.calc_zo + [canopy.zo,canopy.d ] = equations.zo_and_d(soil,canopy); +end + +if options.calc_PSI == 1 + leafbio.fqe(1) = fqe/5; + leafbio.fqe(2) = fqe; +else + leafbio.fqe = fqe; +end + diff --git a/src/+plot/plots.m b/src/+plot/plots.m new file mode 100644 index 00000000..a2b564e8 --- /dev/null +++ b/src/+plot/plots.m @@ -0,0 +1,51 @@ +function plots(Output_dir) +% plots.m (script) makes plots the output of SCOPE_v1.51 of the latest run. + +% clc, clear all, close all +% +% directories = dir('..\output\*'); +% [time_value_s,I] = sort([directories(3:end).datenum]); +% Directory = directories(2+I(end)).name; + +%% load verification data +path1_ = ['..\output\' Output_dir ,'\']; +info1 = dir([path1_ '\*.dat']); %the most recent output + +L = length(info1); +wl = dlmread([path1_ 'wl.dat'],'',2,0); + +for i = 1:L-1 + s1 = info1(1).bytes; + n1 = info1(1).name; + if (strcmp(info1(i).name,'pars_and_input.dat') || ... + strcmp(info1(i).name,'pars_and_input_short.dat')) + differentcontent = 1; + continue + end + D1 = dlmread([path1_ info1(i).name],'',2,0); + + spn = ceil(sqrt(size(D1,2))); + h1 = textread([path1_ info1(i).name],'%s'); + figure(i) + if spn>7 + nl = length(D1); + for z = 1:min(47,nl) + if size(D1,1)-1==length(wl) + plot(wl,D1(z,1:end-1)'), hold on + set(gca,'xlim',[.4 2.5]) + else + if z. +%% +% try % for Compiler .exe +% clc +% clear all + +%% 0. globals +global constants +global RWU +global HR U Precip G Rn LAI Ta1 Ts1 h_v rl_min HR_a Ts Ta Tss Taa Tcc bbx RWUtot Rls frac Tsss sfactortot sfactor +run Constants +Mdata=xlsread('E:\grassland\SCOPE-master\SCOPE_v1.73\src\Meterology data','sheet1','B5:AD17572'); +Ta1=Mdata(:,1); % air temperature +HR=Mdata(:,2)./100; % relative humidity +U=Mdata(:,3); % wind speed at 2m +Precip=Mdata(:,4)./10; % precipitation +Ts1=Mdata(:,5); % soil temperature at 20cm +Ts2=Mdata(:,6); % soil temperature at 40cm +Ts3=Mdata(:,7); % soil temperature at 60cm +SMC1=Mdata(:,8); % soil moisture content at 20cm +SMC2=Mdata(:,9); % soil moisture content at 40cm +SMC3=Mdata(:,10); % soil moisture content at 60cm +G1=Mdata(:,11:13); % soil heat flux +Rn=Mdata(:,14); % net rediation +LAI=Mdata(:,26); % leaf area index +h_v=Mdata(:,27); % canopy height +rl_min=Mdata(:,28); % minimum soil resistance +%Precip=Precipi./18000; +G=ones(17568,1); +G=nanmean(G1')'; +Tsss=Mdata(:,29); +HR_a=HR; +Ta=Ta1; +Ts=Ts1; +%P_Va(KT)=0.611*exp(17.27*Ta(KT)/(Ta(KT)+237.3))*HR_a(KT); +%% 1. define constants +[constants] = io.define_constants(); + +%% 2. simulation options +path_of_code = cd; +run ../set_parameter_filenames; +% parameter_file = {'input_data.xlsx'}; % for Compiler .exe + +if length(parameter_file)>1, useXLSX = 0; else useXLSX = 1; end + +if ~useXLSX + run(['../' parameter_file{1}]) + + options.calc_ebal = N(1); % calculate the energy balance (default). If 0, then only SAIL is executed! + options.calc_vert_profiles = N(2); % calculate vertical profiles of fluxes + options.calc_fluor = N(3); % calculate chlorophyll fluorescence in observation direction + options.calc_planck = N(4); % calculate spectrum of thermal radiation + options.calc_directional = N(5); % calculate BRDF and directional temperature + options.calc_xanthophyllabs = N(6); % include simulation of reflectance dependence on de-epoxydation state + options.calc_PSI = N(7); % 0: optipar 2017 file with only one fluorescence spectrum vs 1: Franck et al spectra for PSI and PSII + options.rt_thermal = N(8); % 1: use given values under 10 (default). 2: use values from fluspect and soil at 2400 nm for the TIR range + options.calc_zo = N(9); + options.soilspectrum = N(10); %0: use soil spectrum from a file, 1: simulate soil spectrum with the BSM model + options.soil_heat_method = N(11); % 0: calculated from specific heat and conductivity (default), 1: empiricaly calibrated, 2: G as constant fraction of soil net radiation + options.Fluorescence_model = N(12); %0: empirical, with sustained NPQ (fit to Flexas' data); 1: empirical, with sigmoid for Kn; 2: Magnani 2012 model + options.calc_rss_rbs = N(13); % 0: calculated from specific heat and conductivity (default), 1: empiricaly calibrated, 2: G as constant fraction of soil net radiation + options.apply_T_corr = N(14); % correct Vcmax and rate constants for temperature in biochemical.m + options.verify = N(15); + options.save_headers = N(16); % write headers in output files + options.makeplots = N(17); + options.simulation = N(18); % 0: individual runs (specify all input in a this file) + % 1: time series (uses text files with meteo input as time series) + % 2: Lookup-Table (specify the values to be included) + % 3: Lookup-Table with random input (specify the ranges of values) +else + options = io.readStructFromExcel(['../' char(parameter_file)], 'options', 3, 1); +end + +if options.simulation>2 || options.simulation<0, fprintf('\n simulation option should be between 0 and 2 \r'); return, end + +%% 3. file names +if ~useXLSX + run(['../' parameter_file{2}]) +else + [dummy,X] = xlsread(['../' char(parameter_file)],'filenames'); + j = find(~strcmp(X(:,2),{''})); + X = X(j,(1:end)); +end + +F = struct('FileID',{'Simulation_Name','soil_file','leaf_file','atmos_file'... + 'Dataset_dir','t_file','year_file','Rin_file','Rli_file'... + ,'p_file','Ta_file','ea_file','u_file','CO2_file','z_file','tts_file'... + ,'LAI_file','hc_file','SMC_file','Vcmax_file','Cab_file','LIDF_file'}); +for i = 1:length(F) + k = find(strcmp(F(i).FileID,strtok(X(:,1)))); + if ~isempty(k) + F(i).FileName = strtok(X(k,2)); + %if i==4, F(i).FileName = strtok(X(k,2:end)); end + end +end + +%% 4. input data + +if ~useXLSX + X = textread(['../' parameter_file{3}],'%s'); %#ok + N = str2double(X); +else + [N,X] = xlsread(['../' char(parameter_file)],'inputdata', ''); + X = X(9:end,1); +end +V = io.assignvarnames(); +options.Cca_function_of_Cab = 0; + +for i = 1:length(V) + j = find(strcmp(strtok(X(:,1)),V(i).Name)); + if ~useXLSX, cond = isnan(N(j+1)); else cond = sum(~isnan(N(j,:)))<1; end + if isempty(j) || cond + if i==2 + fprintf(1,'%s %s %s \n','warning: input "', V(i).Name, '" not provided in input spreadsheet...'); + fprintf(1,'%s %s %s\n', 'I will use 0.25*Cab instead'); + options.Cca_function_of_Cab = 1; + else + + if ~(options.simulation==1) && (i==30 || i==32) + fprintf(1,'%s %s %s \n','warning: input "', V(i).Name, '" not provided in input spreadsheet...'); + fprintf(1,'%s %s %s\n', 'I will use the MODTRAN spectrum as it is'); + else + if (options.simulation == 1 || (options.simulation~=1 && (i<46 || i>50))) + fprintf(1,'%s %s %s \n','warning: input "', V(i).Name, '" not provided in input spreadsheet'); + if (options.simulation ==1 && (i==1 ||i==9||i==22||i==23||i==54 || (i>29 && i<37))) + fprintf(1,'%s %s %s\n', 'I will look for the values in Dataset Directory "',char(F(5).FileName),'"'); + else + if (i== 24 || i==25) + fprintf(1,'%s %s %s\n', 'will estimate it from LAI, CR, CD1, Psicor, and CSSOIL'); + options.calc_zo = 1; + else + if (i>38 && i<44) + fprintf(1,'%s %s %s\n', 'will use the provided zo and d'); + options.calc_zo = 0; + else + if ~(options.simulation ==1 && (i==30 ||i==32)) + fprintf(1,'%s \n', 'this input is required: SCOPE ends'); + return + else + fprintf(1,'%s %s %s\n', '... no problem, I will find it in Dataset Directory "',char(F(5).FileName), '"'); + end + end + end + end + end + end + end + end + + if ~useXLSX + j2 = []; j1 = j+1; + while 1 + if isnan(N(j1)), break, end + j2 = [j2; j1]; %#ok + j1 = j1+1; + end + if isempty(j2) + V(i).Val = -999; + else + V(i).Val = N(j2); + end + + + else + if sum(~isnan(N(j,:)))<1 + V(i).Val = -999; + else + V(i).Val = N(j,~isnan(N(j,:))); + end + end +end + +%% 5. Declare paths +path_input = '../../data/input/'; % path of all inputs + +%% 6. Numerical parameters (iteration stops etc) +iter.maxit = 600; % maximum number of iterations +iter.maxEBer = 1; %[W m-2] maximum accepted error in energy bal. +iter.Wc = 1; % Weight coefficient for iterative calculation of Tc + +%% 7. Load spectral data for leaf and soil +%opticoef = xlsread([path_input,'fluspect_parameters/',char(F(3).FileName)]); % file with leaf spectral parameters +%xlsread([path_input,'fluspect_parameters/',char(F(3).FileName)]); % file with leaf spectral parameters +load([path_input,'fluspect_parameters/',char(F(3).FileName)]); +rsfile = load([path_input,'soil_spectrum/',char(F(2).FileName)]); % file with soil reflectance spectra +% Optical coefficient data used by fluspect +% optipar.nr = opticoef(:,2); +% optipar.Kab = opticoef(:,3); +% optipar.Kca = opticoef(:,4); +% optipar.Ks = opticoef(:,5); +% optipar.Kw = opticoef(:,6); +% optipar.Kdm = opticoef(:,7); +% optipar.nw = opticoef(:,8); +% optipar.phiI = opticoef(:,9); +% optipar.phiII = opticoef(:,10); +% optipar.GSV1 = opticoef(:,11); +% optipar.GSV2 = opticoef(:,12); +% optipar.GSV3 = opticoef(:,13); +% optipar.KcaV = opticoef(:,14); +% optipar.KcaZ = opticoef(:,15); + +%% 8. Load directional data from a file +directional = struct; +if options.calc_directional + anglesfile = load([path_input,'directional/brdf_angles2.dat']); % Multiple observation angles in case of BRDF calculation + directional.tto = anglesfile(:,1); % [deg] Observation zenith Angles for calcbrdf + directional.psi = anglesfile(:,2); % [deg] Observation zenith Angles for calcbrdf + directional.noa = length(directional.tto); % Number of Observation Angles +end + +%% 9. Define canopy structure +canopy.nlayers = 60; +nl = canopy.nlayers; +canopy.x = (-1/nl : -1/nl : -1)'; % a column vector +canopy.xl = [0; canopy.x]; % add top level +canopy.nlincl = 13; +canopy.nlazi = 36; +canopy.litab = [ 5:10:75 81:2:89 ]'; % a column, never change the angles unless 'ladgen' is also adapted +canopy.lazitab = ( 5:10:355 ); % a row + +%% 10. Define spectral regions +[spectral] = io.define_bands(); + +wlS = spectral.wlS; % SCOPE 1.40 definition +wlP = spectral.wlP; % PROSPECT (fluspect) range +wlT = spectral.wlT; % Thermal range +wlF = spectral.wlF; % Fluorescence range + +I01 = find(wlSmax(wlF)); +N01 = length(I01); +N02 = length(I02); + +nwlP = length(wlP); +nwlT = length(wlT); + +nwlS = length(wlS); + +spectral.IwlP = 1 : nwlP; +spectral.IwlT = nwlP+1 : nwlP+nwlT; +spectral.IwlF = (640:850)-399; + +[rho,tau,rs] = deal(zeros(nwlP + nwlT,1)); + +%% 11. load time series data +if options.simulation == 1 + vi = ones(length(V),1); + [soil,leafbio,canopy,meteo,angles,xyt] = io.select_input(V,vi,canopy,options); + [V,xyt,canopy] = io.load_timeseries(V,leafbio,soil,canopy,meteo,constants,F,xyt,path_input,options); +else + soil = struct; +end + +%% 12. preparations +if options.simulation==1 + diff_tmin = abs(xyt.t-xyt.startDOY); + diff_tmax = abs(xyt.t-xyt.endDOY); + I_tmin = find(min(diff_tmin)==diff_tmin); + I_tmax = find(min(diff_tmax)==diff_tmax); + if options.soil_heat_method<2 + if (isempty(meteo.Ta) || meteo.Ta<-273), meteo.Ta = 20; end + soil.Tsold = meteo.Ta*ones(12,2); + end +end + +nvars = length(V); +vmax = ones(nvars,1); +for i = 1:nvars + vmax(i) = length(V(i).Val); +end +vmax([14,27],1) = 1; % these are Tparam and LIDFb +vi = ones(nvars,1); +switch options.simulation + case 0, telmax = max(vmax); [xyt.t,xyt.year]= deal(zeros(telmax,1)); + case 1, telmax = size(xyt.t,1); + case 2, telmax = prod(double(vmax)); [xyt.t,xyt.year]= deal(zeros(telmax,1)); +end +[rad,thermal,fluxes] = io.initialize_output_structures(spectral); +atmfile = [path_input 'radiationdata/' char(F(4).FileName(1))]; +atmo.M = helpers.aggreg(atmfile,spectral.SCOPEspec); + +%% 13. create output files +Output_dir = io.create_output_files(parameter_file, F, path_of_code, options, V, vmax, spectral); +%15 function MainLoop +global KT Delt_t TEND TIME MN NN NL ML ND hOLD TOLD h hh T TT P_gOLD P_g P_gg Delt_t0 +global KIT NIT TimeStep Processing +global SUMTIME hhh TTT P_ggg Theta_LLL DSTOR Thmrlefc CHK Theta_LL Theta_L +global NBCh AVAIL Evap DSTOR0 EXCESS QMT RS BCh hN hSAVE NBChh DSTMAX Soilairefc Trap sumTRAP_dir sumEVAP_dir +global TSAVE IRPT1 IRPT2 AVAIL0 TIMEOLD TIMELAST SRT ALPHA BX alpha_h bx Srt L +global QL QL_h QL_T QV Qa KL_h Chh ChT Khh KhT +global D_Vg Theta_g Sa V_A k_g MU_a DeltZ Alpha_Lg +global J Beta_g KaT_Switch Theta_s +global D_V D_A fc Eta nD POR Se +global ThmrlCondCap ZETA XK DVT_Switch +global m g MU_W Ks RHOL +global Lambda1 Lambda2 Lambda3 c_unsat Lambda_eff RHO_bulk +global RHODA RHOV c_a c_V c_L +global ETCON EHCAP +global Xaa XaT Xah RDA Rv KL_T +global DRHOVT DRHOVh DRHODAt DRHODAz +global hThmrl Tr COR IS Hystrs XWRE +global Theta_V DTheta_LLh IH +global W WW D_Ta SSUR +global W_Chg +global KLT_Switch Theta_r Alpha n CKTN trap Evapo SMC lEstot lEctot Ztot Rl +%%%%%%%%%%%%%%%%%%%%%%% Main Processing part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +run StartInit; % Initialize Temperature, Matric potential and soil air pressure. + + +%% 14. Run the model +fprintf('\n The calculations start now \r') +calculate = 1; + +for k = 1:telmax + %SMC=Theta_LL(:,1); + TIMEOLD=0; + TIMELAST=0; + KT=KT+1 % Counting Number of timesteps + if KT>1 && Delt_t>(TEND-TIME) + Delt_t=TEND-TIME; % If Delt_t is changed due to excessive change of state variables, the judgement of the last time step is excuted. + end + TIME=TIME+Delt_t; % The time elapsed since start of simulation + TimeStep(KT,1)=Delt_t; + SUMTIME(KT,1)=TIME; + Processing=TIME/TEND + %%i%%%% Updating the state variables. %%%%%%%%%%%%%%%%%%%%%%%%%%%% + if Precip(KT)>0.0005 + %7-13 9-10 p=52mm + NBChh=1; + else + NBChh=2; + end + if IRPT1==0 && IRPT2==0 + for MN=1:NN + hOLD(MN)=h(MN); + h(MN)=hh(MN); + hhh(MN,KT)=hh(MN); +% KL_h(MN,KT)=KL_h(MN,2); +% Chh(MN,KT)=Chh(MN,2); +% ChT(MN,KT)=ChT(MN,2); +% Khh(MN,KT)=Khh(MN,2); +% KhT(MN,KT)=KhT(MN,2); + + if Thmrlefc==1 + TOLD(MN)=T(MN); + T(MN)=TT(MN); + TTT(MN,KT)=TT(MN); + end + if Soilairefc==1 + P_gOLD(MN)=P_g(MN); + P_g(MN)=P_gg(MN); + P_ggg(MN,KT)=P_gg(MN); + end + if rwuef==1 + SRT(MN,KT)=Srt(MN,1); + ALPHA(MN,KT)=alpha_h(MN,1); + BX(MN,KT)=bx(MN,1); + end + end + DSTOR0=DSTOR; + if KT>1 + run SOIL1 + end + end + if options.simulation == 1, vi(vmax>1) = k; end + if options.simulation == 0, vi(vmax==telmax) = k; end + [soil,leafbio,canopy,meteo,angles,xyt] = io.select_input(V,vi,canopy,options,xyt,soil); + if options.simulation ~=1 + fprintf('simulation %i ', k ); + fprintf('of %i \n', telmax); + else + calculate = 0; + if k>=I_tmin && k<=I_tmax + quality_is_ok = ~isnan(meteo.p*meteo.Ta*meteo.ea*meteo.u.*meteo.Rin.*meteo.Rli); + fprintf('time = %4.2f \n', xyt.t(k)); + if quality_is_ok + calculate = 1; + end + end + end + + if calculate + + iter.counter = 0; + + LIDF_file = char(F(22).FileName); + if ~isempty(LIDF_file) + canopy.lidf = dlmread([path_input,'leafangles/',LIDF_file],'',3,0); + else + canopy.lidf = equations.leafangles(canopy.LIDFa,canopy.LIDFb); % This is 'ladgen' in the original SAIL model, + end + + if options.calc_PSI + fversion = @fluspect_B_CX; + else + fversion = @fluspect_B_CX_PSI_PSII_combined; + end + leafbio.V2Z = 0; + leafopt = fversion(spectral,leafbio,optipar); + leafbio.V2Z = 1; + leafoptZ = fversion(spectral,leafbio,optipar); + + IwlP = spectral.IwlP; + IwlT = spectral.IwlT; + + rho(IwlP) = leafopt.refl; + tau(IwlP) = leafopt.tran; + rlast = rho(nwlP); + tlast = tau(nwlP); + + if options.soilspectrum == 0 + rs(IwlP) = rsfile(:,soil.spectrum+1); + else + soilemp.SMC = 25; % empirical parameter (fixed) + soilemp.film = 0.015; % empirical parameter (fixed) + rs(IwlP) = BSM(soil,optipar,soilemp); + end + rslast = rs(nwlP); + + switch options.rt_thermal + case 0 + rho(IwlT) = ones(nwlT,1) * leafbio.rho_thermal; + tau(IwlT) = ones(nwlT,1) * leafbio.tau_thermal; + rs(IwlT) = ones(nwlT,1) * soil.rs_thermal; + case 1 + rho(IwlT) = ones(nwlT,1) * rlast; + tau(IwlT) = ones(nwlT,1) * tlast; + rs(IwlT) = ones(nwlT,1) * rslast; + end + leafopt.refl = rho; % extended wavelength ranges are stored in structures + leafopt.tran = tau; + + reflZ = leafopt.refl; + tranZ = leafopt.tran; + reflZ(1:300) = leafoptZ.refl(1:300); + tranZ(1:300) = leafoptZ.tran(1:300); + leafopt.reflZ = reflZ; + leafopt.tranZ = tranZ; + + soil.refl = rs; + + soil.Ts = meteo.Ta * ones(2,1); % initial soil surface temperature + + if length(F(4).FileName)>1 && options.simulation==0 + atmfile = [path_input 'radiationdata/' char(F(4).FileName(k))]; + atmo.M = helpers.aggreg(atmfile,spectral.SCOPEspec); + end + atmo.Ta = meteo.Ta; + + [rad,gap,profiles] = RTMo(spectral,atmo,soil,leafopt,canopy,angles,meteo,rad,options); + + switch options.calc_ebal + case 1 + [iter,fluxes,rad,thermal,profiles,soil,RWU,frac] ... + = ebal(iter,options,spectral,rad,gap, ... + leafopt,angles,meteo,soil,canopy,leafbio,xyt,k,profiles,LR); + + if options.calc_fluor + if options.calc_vert_profiles + [rad,profiles] = RTMf(spectral,rad,soil,leafopt,canopy,gap,angles,profiles); + else + [rad] = RTMf(spectral,rad,soil,leafopt,canopy,gap,angles,profiles); + end + end + if options.calc_xanthophyllabs + [rad] = RTMz(spectral,rad,soil,leafopt,canopy,gap,angles,profiles); + end + + if options.calc_planck + rad = RTMt_planck(spectral,rad,soil,leafopt,canopy,gap,angles,thermal.Tcu,thermal.Tch,thermal.Ts(2),thermal.Ts(1),1); + end + + if options.calc_directional + directional = calc_brdf(options,directional,spectral,angles,rad,atmo,soil,leafopt,canopy,meteo,profiles,thermal); + end + + otherwise + Fc = (1-gap.Ps(1:end-1))'/nl; % Matrix containing values for Ps of canopy + fluxes.aPAR = canopy.LAI*(Fc*rad.Pnh + equations.meanleaf(canopy,rad.Pnu , 'angles_and_layers',gap.Ps));% net PAR leaves + fluxes.aPAR_Cab = canopy.LAI*(Fc*rad.Pnh_Cab + equations.meanleaf(canopy,rad.Pnu_Cab, 'angles_and_layers',gap.Ps));% net PAR leaves + [fluxes.aPAR_Wm2,fluxes.aPAR_Cab_eta] = deal(canopy.LAI*(Fc*rad.Rnh_PAR + equations.meanleaf(canopy,rad.Rnu_PAR, 'angles_and_layers',gap.Ps)));% net PAR leaves + if options.calc_fluor + profiles.etah = ones(60,1); + profiles.etau = ones(13,36,60); + if options.calc_vert_profiles + [rad,profiles] = RTMf(spectral,rad,soil,leafopt,canopy,gap,angles,profiles); + else + [rad] = RTMf(spectral,rad,soil,leafopt,canopy,gap,angles,profiles); + end + end + end + if options.calc_fluor % total emitted fluorescence irradiance (excluding leaf and canopy re-absorption and scattering) + if options.calc_PSI + rad.Femtot = 1E3*(leafbio.fqe(2)* optipar.phiII(spectral.IwlF) * fluxes.aPAR_Cab_eta +leafbio.fqe(1)* optipar.phiI(spectral.IwlF) * fluxes.aPAR_Cab); + else + rad.Femtot = 1E3*leafbio.fqe* optipar.phi(spectral.IwlF) * fluxes.aPAR_Cab_eta; + end + end + io.output_data(Output_dir, options, k, iter, xyt, fluxes, rad, thermal, gap, meteo, spectral, V, vi, vmax, profiles, directional, angles) + end + if options.simulation==2 && telmax>1, vi = helpers.count(nvars,vi,vmax,1); end + Ac=fluxes.Actot; + lEstot =fluxes.lEstot; + lEctot =fluxes.lEctot; + % if KT>=1933 && KT<=1991 + % Taa=20; + % Tss=20; + % else + Tss=thermal.Tsave; + Tcc=thermal.Ts(1); + Taa=thermal.Ta; + % end + + %if KT<2880 + [Rl]=Root_properties(Rl,Ac,rroot,frac,bbx,KT); + % else + %Rl=Rl; + %end + Ts(KT)=Ta1(KT); + if Delt_t~=Delt_t0 + for MN=1:NN + hh(MN)=h(MN)+(h(MN)-hOLD(MN))*Delt_t/Delt_t0; + TT(MN)=T(MN)+(T(MN)-TOLD(MN))*Delt_t/Delt_t0; + end + end + hSAVE=hh(NN); + TSAVE=TT(NN); + if NBCh==1 + hN=BCh; + hh(NN)=hN; + hSAVE=hN; + elseif NBCh==2 + if NBChh~=2 + if BCh<0 + hN=DSTOR0; + hh(NN)=hN; + hSAVE=hN; + else + hN=-1e6; + hh(NN)=hN; + hSAVE=hN; + end + end + else + if NBChh~=2 + hN=DSTOR0; + hh(NN)=hN; + hSAVE=hN; + end + end + % run Forcing_PARM +%Ts(KT)=Ts1(KT); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + for KIT=1:NIT % Start the iteration procedure in a time step. + [hh,COR,J,Theta_V,Theta_g,Se,KL_h,Theta_LL,DTheta_LLh]=SOIL2(hh,COR,hThmrl,NN,NL,TT,Tr,IS,Hystrs,XWRE,Theta_s,IH,KIT,Theta_r,Alpha,n,m,Ks,Theta_L,h,Thmrlefc,CKTN,POR,J); + [KL_T]=CondL_T(NL); + [RHOV,DRHOVh,DRHOVT]=Density_V(TT,hh,g,Rv,NN); + [W,WW,MU_W,D_Ta]=CondL_Tdisp(POR,Theta_LL,Theta_L,SSUR,RHO_bulk,RHOL,TT,Theta_s,h,hh,W_Chg,NL,nD,J,Delt_t,Theta_g,KLT_Switch); + [L]=Latent(TT,NN); + [Xaa,XaT,Xah,DRHODAt,DRHODAz,RHODA]=Density_DA(T,RDA,P_g,Rv,DeltZ,h,hh,TT,P_gg,Delt_t,NL,NN,DRHOVT,DRHOVh,RHOV); + [c_unsat,Lambda_eff]=CondT_coeff(Theta_LL,Lambda1,Lambda2,Lambda3,RHO_bulk,Theta_g,RHODA,RHOV,c_a,c_V,c_L,NL,nD,ThmrlCondCap,ETCON,EHCAP); + [k_g]=Condg_k_g(POR,NL,J,m,Theta_g,g,MU_W,Ks,RHOL); + [D_V,Eta,D_A]=CondV_DE(Theta_LL,TT,fc,Theta_s,NL,nD,J,Theta_g,POR,ThmrlCondCap,ZETA,XK,DVT_Switch); + [D_Vg,V_A,Beta_g]=CondV_DVg(P_gg,Theta_g,Sa,V_A,k_g,MU_a,DeltZ,Alpha_Lg,KaT_Switch,Theta_s,Se,NL,J); + run h_sub; + + if NBCh==1 + DSTOR=0; + RS=0; + elseif NBCh==2 + AVAIL=-BCh; + EXCESS=(AVAIL+QMT(KT))*Delt_t; + if abs(EXCESS/Delt_t)<=1e-10,EXCESS=0;end + DSTOR=min(EXCESS,DSTMAX); + RS=(EXCESS-DSTOR)/Delt_t; + else + AVAIL=AVAIL0-Evap(KT); + EXCESS=(AVAIL+QMT(KT))*Delt_t; + if abs(EXCESS/Delt_t)<=1e-10,EXCESS=0;end + DSTOR=0; + RS=0; + end + + if Soilairefc==1 + run Air_sub; + end + + if Thmrlefc==1 + run Enrgy_sub; + end + + if max(CHK)<0.001 + break + end + hSAVE=hh(NN); + TSAVE=TT(NN); + %max(CHK) + end + TIMEOLD=KT; + %sum(sum(CHK)) + KIT + KIT=0; + [hh,COR,J,Theta_V,Theta_g,Se,KL_h,Theta_LL,DTheta_LLh]=SOIL2(hh,COR,hThmrl,NN,NL,TT,Tr,IS,Hystrs,XWRE,Theta_s,IH,KIT,Theta_r,Alpha,n,m,Ks,Theta_L,h,Thmrlefc,CKTN,POR,J); + + if IRPT1==0 && IRPT2==0 + if KT % In case last time step is not convergent and needs to be repeated. + MN=0; + + for ML=1:NL + for ND=1:2 + MN=ML+ND-1; + Theta_LLL(ML,ND,KT)=Theta_LL(ML,ND); + Theta_L(ML,ND)=Theta_LL(ML,ND); + + end + end + + %SMC = Theta_LL(:,1); + run ObservationPoints + end + if (TEND-TIME)<1E-3 + for MN=1:NN + hOLD(MN)=h(MN); + h(MN)=hh(MN); + hhh(MN,KT)=hh(MN); + if Thmrlefc==1 + TOLD(MN)=T(MN); + T(MN)=TT(MN); + TTT(MN,KT)=TT(MN); + end + if Soilairefc==1 + P_gOLD(MN)=P_g(MN); + P_g(MN)=P_gg(MN); + P_ggg(MN,KT)=P_gg(MN); + end + end + break + end + end + for MN=1:NN + QL(MN,KT)=QL(MN); + QL_h(MN,KT)=QL_h(MN); + QL_T(MN,KT)=QL_T(MN); + Qa(MN,KT)=Qa(MN); + QV(MN,KT)=QV(MN); + end + RWUtot(:,KT)=RWU; + Rls(:,KT)=Rl; + sfactortot(KT)=sfactor; + +end +% run PlotResults +%%%%%%%%%%%%%%%%%%%% postprocessing part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% plot the figures of simulation output soil moisture/temperature, +%%%% soil evaporation, plant transpiration simulated with two different +%%%% ET method (indirect ET method & direct ET method) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if Evaptranp_Cal==1 % save the variables for ETind scenario + Sim_Theta_ind=Sim_Theta; + Sim_Temp_ind=Sim_Temp; + TRAP=36000.*trap; + TRAP_ind=TRAP'; + EVAP=36000.*Evapo; + EVAP_ind=EVAP'; + disp ('Convergence Achieved for ETind scenario. Please switch to ETdir scenario and run again.') +else + TRAP=18000.*trap; + TRAP_dir=TRAP'; + EVAP=18000.*Evapo; + EVAP_dir=EVAP'; + for i=1:KT/48 + sumTRAP_ind(i)=0; %#ok<*SAGROW> + sumEVAP_ind(i)=0; + sumTRAP_dir(i)=0; + sumEVAP_dir(i)=0; + for j=(i-1)*48+1:i*48 + sumTRAP_ind(i)=TRAP_ind(j)+sumTRAP_ind(i); + sumEVAP_ind(i)=EVAP_ind(j)+sumEVAP_ind(i); + sumTRAP_dir(i)=TRAP(j)+sumTRAP_dir(i); + sumEVAP_dir(i)=EVAP(j)+sumEVAP_dir(i); + end + end +end +if options.verify + io.output_verification(Output_dir) +end + +if options.makeplots + plot.plots(Output_dir) +end + +%% for Compiler +% catch ME +% disp(['ERROR: ' ME.message]) +% end +% fprintf('\nThe run is finished. Press any key to close the window') +% fprintf('\nIf no error message was produced navigate to ./SCOPE_v1.70/output to see the results') +% pause diff --git a/src/AirPARM.m b/src/AirPARM.m new file mode 100644 index 00000000..ed5b8109 --- /dev/null +++ b/src/AirPARM.m @@ -0,0 +1,43 @@ +function [Cah,CaT,Caa,Kah,KaT,Kaa,Vah,VaT,Vaa,Cag,QL,QL_h,QL_T,KLhBAR,KLTBAR,DhDZ,DTDZ,DPgDZ,DTDBAR]=AirPARM(NL,hh,TT,Theta_LL,DeltZ,DTheta_LLh,DTheta_LLT,POR,RHOL,V_A,KL_h,D_Ta,KL_T,D_V,D_Vg,P_gg,Beta_g,J,Gamma_w,KLa_Switch,Xah,XaT,Xaa,RHODA,Hc,KLhBAR,KLTBAR,DhDZ,DTDZ,DPgDZ,DTDBAR) + +for ML=1:NL + KLhBAR(ML)=(KL_h(ML,1)+KL_h(ML,2))/2; + KLTBAR(ML)=(KL_T(ML,1)+KL_T(ML,2))/2; + DhDZ(ML)=(hh(ML+1)-hh(ML))/DeltZ(ML); + DTDZ(ML)=(TT(ML+1)-TT(ML))/DeltZ(ML); + DPgDZ(ML)=(P_gg(ML+1)-P_gg(ML))/DeltZ(ML); + DTDBAR(ML)=(D_Ta(ML,1)+D_Ta(ML,2))/2; +end + +MN=0; +for ML=1:NL + for ND=1:2 + MN=ML+ND-1; + + if KLa_Switch==1 + QL(ML)=-(KLhBAR(ML)*(DhDZ(ML)+DPgDZ(ML)/Gamma_w)+(KLTBAR(ML)+DTDBAR(ML))*DTDZ(ML)+KLhBAR(ML)); + QL_h(ML)=-(KLhBAR(ML)*(DhDZ(ML)+DPgDZ(ML)/Gamma_w)+KLhBAR(ML)); + QL_T(ML)=-((KLTBAR(ML)+DTDBAR(ML))*DTDZ(ML)); + else + QL(ML)=-(KLhBAR(ML)*DhDZ(ML)+(KLTBAR(ML)+DTDBAR(ML))*DTDZ(ML)+KLhBAR(ML)); + QL_h(ML)=-(KLhBAR(ML)*DhDZ(ML)+KLhBAR(ML)); + QL_T(ML)=-((KLTBAR(ML)+DTDBAR(ML))*DTDZ(ML)); + + end + + Cah(ML,ND)=Xah(MN)*(POR(J)+(Hc-1)*Theta_LL(ML,ND))+(Hc-1)*RHODA(MN)*DTheta_LLh(ML,ND); + CaT(ML,ND)=XaT(MN)*(POR(J)+(Hc-1)*Theta_LL(ML,ND))+(Hc-1)*RHODA(MN)*DTheta_LLT(ML,ND); + Caa(ML,ND)=Xaa(MN)*(POR(J)+(Hc-1)*Theta_LL(ML,ND)); + + Kah(ML,ND)=Xah(MN)*(D_V(ML,ND)+D_Vg(ML))+Hc*RHODA(MN)*KL_h(ML,ND); + KaT(ML,ND)=XaT(MN)*(D_V(ML,ND)+D_Vg(ML))+Hc*RHODA(MN)*(KL_T(ML,ND)+D_Ta(ML,ND)); + Kaa(ML,ND)=Xaa(MN)*(D_V(ML,ND)+D_Vg(ML))+RHODA(MN)*(Beta_g(ML,ND)+Hc*KL_h(ML,ND)/Gamma_w);% + + Cag(ML,ND)=Hc*RHODA(MN)*KL_h(ML,ND); + + Vah(ML,ND)=-(V_A(ML)+Hc*QL(ML)/RHOL)*Xah(MN); %0;% + VaT(ML,ND)=-(V_A(ML)+Hc*QL(ML)/RHOL)*XaT(MN); %0;% + Vaa(ML,ND)=-(V_A(ML)+Hc*QL(ML)/RHOL)*Xaa(MN); %0;% + end +end + diff --git a/src/Air_BC.m b/src/Air_BC.m new file mode 100644 index 00000000..4b04fdb9 --- /dev/null +++ b/src/Air_BC.m @@ -0,0 +1,34 @@ +function [RHS,C6,C6_a]=Air_BC(RHS,KT,NN,BtmPg,TopPg,NBCPB,BCPB,NBCP,BCP,C6,C6_a) +%%%%%%%%% Apply the bottom boundary condition called for by NBCPB %%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if NBCPB==1 %---------------------> Bounded bottom with the water table; + RHS(1)=BtmPg; + C6(1,1)=1; + RHS(2)=RHS(2)-C6(1,2)*RHS(1); + C6(1,2)=0; + C6_a(1)=0; +elseif NBCPB==2 %------------------> The soil air is allowed to escape from the bottom; + RHS(1)=RHS(1)+BCPB; +end + +%%%%%%%%%% Apply the surface boundary condition called by NBCP %%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if NBCP==1 %----------> Ponded infiltration with Bonded bottom, + RHS(NN)=BtmPg; + C6(NN,1)=1; + RHS(NN-1)=RHS(NN-1)-C6(NN-1,2)*RHS(NN); + C6(NN-1,2)=0; + C6_a(NN-1)=0; +elseif NBCP==2 %----------> Specified flux on the surface; + RHS(NN)=RHS(NN)-BCP; +else + RHS(NN)=TopPg(KT); + C6(NN,1)=1; + RHS(NN-1)=RHS(NN-1)-C6(NN-1,2)*RHS(NN); + C6(NN-1,2)=0; + C6_a(NN-1)=0; +end + + + + diff --git a/src/Air_EQ.m b/src/Air_EQ.m new file mode 100644 index 00000000..1143ce9f --- /dev/null +++ b/src/Air_EQ.m @@ -0,0 +1,61 @@ +function [RHS,C6,SAVE]=Air_EQ(C1,C2,C3,C4,C4_a,C5,C5_a,C6,C7,NL,NN,Delt_t,T,TT,h,hh,P_g,Thmrlefc) + +if Thmrlefc + RHS(1)=-C7(1)+(C3(1,1)*P_g(1)+C3(1,2)*P_g(2))/Delt_t ... + -(C2(1,1)/Delt_t+C5(1,1))*TT(1)-(C2(1,2)/Delt_t+C5(1,2))*TT(2) ... + -(C1(1,1)/Delt_t+C4(1,1))*hh(1)-(C1(1,2)/Delt_t+C4(1,2))*hh(2) ... + +(C2(1,1)/Delt_t)*T(1)+(C2(1,2)/Delt_t)*T(2) ... + +(C1(1,1)/Delt_t)*h(1)+(C1(1,2)/Delt_t)*h(2); + + for ML=2:NL + ARG1=C2(ML-1,2)/Delt_t; + ARG2=C2(ML,1)/Delt_t; + ARG3=C2(ML,2)/Delt_t; + + ARG4=C1(ML-1,2)/Delt_t; + ARG5=C1(ML,1)/Delt_t; + ARG6=C1(ML,2)/Delt_t; + + RHS(ML)=-C7(ML)+(C3(ML-1,2)*P_g(ML-1)+C3(ML,1)*P_g(ML)+C3(ML,2)*P_g(ML+1))/Delt_t ... + -(ARG1+C5_a(ML-1))*TT(ML-1)-(ARG2+C5(ML,1))*TT(ML)-(ARG3+C5(ML,2))*TT(ML+1) ... + -(ARG4+C4_a(ML-1))*hh(ML-1)-(ARG5+C4(ML,1))*hh(ML)-(ARG6+C4(ML,2))*hh(ML+1) ... + +ARG1*T(ML-1)+ARG2*T(ML)+ARG3*T(ML+1) ... + +ARG4*h(ML-1)+ARG5*h(ML)+ARG6*h(ML+1); + end + + RHS(NN)=-C7(NN)+(C3(NN-1,2)*P_g(NN-1)+C3(NN,1)*P_g(NN))/Delt_t ... + -(C2(NN-1,2)/Delt_t+C5_a(NN-1))*TT(NN-1)-(C2(NN,1)/Delt_t+C5(NN,1))*TT(NN) ... + -(C1(NN-1,2)/Delt_t+C4_a(NN-1))*hh(NN-1)-(C1(NN,1)/Delt_t+C4(NN,1))*hh(NN) ... + +(C2(NN-1,2)/Delt_t)*T(NN-1)+(C2(NN,1)/Delt_t)*T(NN) ... + +(C1(NN-1,2)/Delt_t)*h(NN-1)+(C1(NN,1)/Delt_t)*h(NN); +else + ARG4=C1(ML-1,2)/Delt_t; + ARG5=C1(ML,1)/Delt_t; + ARG6=C1(ML,2)/Delt_t; + + RHS(1)=-C7(1)+(C3(1,1)*P_g(1)+C3(1,2)*P_g(2))/Delt_t ... + -(C1(1,1)/Delt_t+C4(1,1))*hh(1)-(C1(1,2)/Delt_t+C4(1,2))*hh(2) ... + +(C1(1,1)/Delt_t)*h(1)+(C1(1,2)/Delt_t)*h(2); + for ML=2:NL + RHS(ML)=-C7(ML)+(C3(ML-1,2)*P_g(ML-1)+C3(ML,1)*P_g(ML)+C3(ML,2)*P_g(ML+1))/Delt_t... + -(ARG4+C4(ML-1,2))*hh(ML-1)-(ARG5+C4(ML,1))*hh(ML)-(ARG6+C4(ML,2))*hh(ML+1) ... + +ARG4*h(ML-1)+ARG5*h(ML)+ARG6*h(ML+1); + end + RHS(NN)=-C7(NN)+(C3(NN-1,2)*P_g(NN-1)+C3(NN,1)*P_g(NN))/Delt_t... + -(C1(NN-1,2)/Delt_t+C4(NN-1,2))*hh(NN-1)-(C1(NN,1)/Delt_t+C4(NN,1))*hh(NN) ... + +(C1(NN-1,2)/Delt_t)*h(NN-1)+(C1(NN,1)/Delt_t)*h(NN); +end + +for MN=1:NN + for ND=1:2 + C6(MN,ND)=C3(MN,ND)/Delt_t+C6(MN,ND); + end +end + +SAVE(1,1,3)=RHS(1); +SAVE(1,2,3)=C6(1,1); +SAVE(1,3,3)=C6(1,2); +SAVE(2,1,3)=RHS(NN); +SAVE(2,2,3)=C6(NN-1,2); +SAVE(2,3,3)=C6(NN,1); + diff --git a/src/Air_MAT.m b/src/Air_MAT.m new file mode 100644 index 00000000..83462997 --- /dev/null +++ b/src/Air_MAT.m @@ -0,0 +1,55 @@ +function [C1,C2,C3,C4,C4_a,C5,C5_a,C6,C6_a,C7]=Air_MAT(Cah,CaT,Caa,Kah,KaT,Kaa,Vah,VaT,Vaa,Cag,DeltZ,NL,NN) + +for MN=1:NN % Clean the space in C1-7 every iteration,otherwise, in *.PARM files, + for ND=1:2 % C1-7 will be mixed up with pre-storaged data, which will cause extremly crazy for computation, which exactly results in NAN. + C1(MN,ND)=0; + C7(MN)=0; + C4(MN,ND)=0; + C4_a(MN)=0; + C5_a(MN)=0; + C6_a(MN)=0; + C2(MN,ND)=0; + C3(MN,ND)=0; + C5(MN,ND)=0; + C6(MN,ND)=0; + end +end + +for ML=1:NL + C1(ML,1)=C1(ML,1)+Cah(ML,1)*DeltZ(ML)/2; + C1(ML+1,1)=C1(ML+1,1)+Cah(ML,2)*DeltZ(ML)/2; + + C2(ML,1)=C2(ML,1)+CaT(ML,1)*DeltZ(ML)/2; + C2(ML+1,1)=C2(ML+1,1)+CaT(ML,2)*DeltZ(ML)/2; + + C3(ML,1)=C3(ML,1)+Caa(ML,1)*DeltZ(ML)/2; + C3(ML+1,1)=C3(ML+1,1)+Caa(ML,2)*DeltZ(ML)/2; + + C4ARG1=(Kah(ML,1)+Kah(ML,2))/(2*DeltZ(ML)); + C4ARG2_1=Vah(ML,1)/3+Vah(ML,2)/6; + C4ARG2_2=Vah(ML,1)/6+Vah(ML,2)/3; + C4(ML,1)=C4(ML,1)+C4ARG1-C4ARG2_1; + C4(ML,2)=C4(ML,2)-C4ARG1-C4ARG2_2; + C4(ML+1,1)=C4(ML+1,1)+C4ARG1+C4ARG2_2; + C4_a(ML)=-C4ARG1+C4ARG2_1; + + C5ARG1=(KaT(ML,1)+KaT(ML,2))/(2*DeltZ(ML)); + C5ARG2_1=VaT(ML,1)/3+VaT(ML,2)/6; + C5ARG2_2=VaT(ML,1)/6+VaT(ML,2)/3; + C5(ML,1)=C5(ML,1)+C5ARG1-C5ARG2_1; + C5(ML,2)=C5(ML,2)-C5ARG1-C5ARG2_2; + C5(ML+1,1)=C5(ML+1,1)+C5ARG1+C5ARG2_2; + C5_a(ML)=-C5ARG1+C5ARG2_1; + + C6ARG1=(Kaa(ML,1)+Kaa(ML,2))/(2*DeltZ(ML)); + C6ARG2_1=Vaa(ML,1)/3+Vaa(ML,2)/6; + C6ARG2_2=Vaa(ML,1)/6+Vaa(ML,2)/3; + C6(ML,1)=C6(ML,1)+C6ARG1-C6ARG2_1; + C6(ML,2)=C6(ML,2)-C6ARG1-C6ARG2_2; + C6(ML+1,1)=C6(ML+1,1)+C6ARG1+C6ARG2_2; + C6_a(ML)=-C6ARG1+C6ARG2_1; + + C7ARG=(Cag(ML,1)+Cag(ML,2))/2; + C7(ML)=C7(ML)-C7ARG; + C7(ML+1)=C7(ML+1)+C7ARG; +end \ No newline at end of file diff --git a/src/Air_Solve.m b/src/Air_Solve.m new file mode 100644 index 00000000..a6ce4c9e --- /dev/null +++ b/src/Air_Solve.m @@ -0,0 +1,17 @@ +function [C6,P_gg,RHS]=Air_Solve(C6,NN,NL,C6_a,RHS) + + +RHS(1)=RHS(1)/C6(1,1); + +for ML=2:NN + C6(ML,1)=C6(ML,1)-C6_a(ML-1)*C6(ML-1,2)/C6(ML-1,1); + RHS(ML)=(RHS(ML)-C6_a(ML-1)*RHS(ML-1))/C6(ML,1); +end + +for ML=NL:-1:1 + RHS(ML)=RHS(ML)-C6(ML,2)*RHS(ML+1)/C6(ML,1); +end + +for MN=1:NN + P_gg(MN)=RHS(MN); +end \ No newline at end of file diff --git a/src/Air_sub.m b/src/Air_sub.m new file mode 100644 index 00000000..79b01f32 --- /dev/null +++ b/src/Air_sub.m @@ -0,0 +1,21 @@ +function Air_sub +global Cah CaT Caa Kah KaT Kaa Vah VaT Vaa Cag Xah XaT Xaa RHODA Hc +global POR D_V D_Ta D_Vg KL_T KL_h Gamma_w V_A RHOL +global QL Theta_LL hh TT DeltZ DTheta_LLT QL_h QL_T +global NL DTheta_LLh P_gg Beta_g J +global KLhBAR KLTBAR DhDZ DTDZ DPgDZ DTDBAR KLa_Switch +global C1 C2 C3 C4 C5 C6 C7 C4_a C5_a C6_a NN +global Delt_t RHS T h P_g SAVE Thmrlefc +global BtmPg TopPg KT +global NBCPB BCPB NBCP BCP + + +[Cah,CaT,Caa,Kah,KaT,Kaa,Vah,VaT,Vaa,Cag,QL,QL_h,QL_T,KLhBAR,KLTBAR,DhDZ,DTDZ,DPgDZ,DTDBAR]=AirPARM(NL,hh,TT,Theta_LL,DeltZ,DTheta_LLh,DTheta_LLT,POR,RHOL,V_A,KL_h,D_Ta,KL_T,D_V,D_Vg,P_gg,Beta_g,J,Gamma_w,KLa_Switch,Xah,XaT,Xaa,RHODA,Hc,KLhBAR,KLTBAR,DhDZ,DTDZ,DPgDZ,DTDBAR); + +[C1,C2,C3,C4,C4_a,C5,C5_a,C6,C6_a,C7]=Air_MAT(Cah,CaT,Caa,Kah,KaT,Kaa,Vah,VaT,Vaa,Cag,DeltZ,NL,NN); + +[RHS,C6,SAVE]=Air_EQ(C1,C2,C3,C4,C4_a,C5,C5_a,C6,C7,NL,NN,Delt_t,T,TT,h,hh,P_g,Thmrlefc); + +[RHS,C6,C6_a]=Air_BC(RHS,KT,NN,BtmPg,TopPg,NBCPB,BCPB,NBCP,BCP,C6,C6_a); + +[C6,P_gg,RHS]=Air_Solve(C6,NN,NL,C6_a,RHS); \ No newline at end of file diff --git a/src/BSM.m b/src/BSM.m new file mode 100644 index 00000000..452a26b8 --- /dev/null +++ b/src/BSM.m @@ -0,0 +1,117 @@ +function rwet = BSM(soilpar,spec,emp) + +% Spectral parameters + +%wl = spec.wl; % wavelengths +GSV = spec.GSV; % Global Soil Vectors spectra (nwl * 3) +kw = spec.Kw; % water absorption spectrum +nw = spec.nw; % water refraction index spectrum + +% Soil parameters + +B = soilpar.BSMBrightness; % soil brightness (range = 0 - 0.9) +lat = soilpar.BSMlat; % spectral shape latitude (range = 20 - 40 deg) +lon = soilpar.BSMlon; % spectral shape longitude (range = 45 - 65 deg) +SMp = soilpar.SMC * 100; % soil moisture volume percentage (5 - 55) + +% Empirical parameters + +SMC = emp.SMC; % soil moisture capacity parameter +film = emp.film; % single water film optical thickness + +f1 = B * sind(lat); +f2 = B * cosd(lat) * sind(lon); +f3 = B * cosd(lat) * cosd(lon); + +rdry = f1 * GSV(:,1) + f2 * GSV(:,2) + f3 * GSV(:,3); + +% Soil moisture effect + +rwet = soilwat(rdry,nw,kw,SMp,SMC,film); + + +function rwet = soilwat(rdry,nw,kw,SMp,SMC,deleff) + + % In this model it is assumed that the water film area is built up + % according to a Poisson process. The fractional areas are as follows: + + % P(0) = dry soil area + % P(1) = single water film area + % P(2) = double water film area + % ... + % et cetera + + % The fractional areas are given by P(k) = mu^k * exp(-mu) / k! + + % For water films of multiple thickness only the transmission loss due + % to water absorption is modified, since surface reflectance effects + % are not influenced by the thickness of the film + + % Input parameters: + + % rdry = dry soil reflectance [NW,1] + % nw = refraction index of water [NW,1] + % kw = absorption coefficient of water [NW,1] + % SMp = soil moisture volume percentage [1,NS] + % SMC = soil moisture capacity (recommended 0.25) [1,1] + % deleff = effective optical thickness of single water film [1,1] + % (recommended 0.015) + + % Output + + % rwet = wet soil spectra [NW,NS] + + % If SMp is given as a row-vector and rdry, nw, kw as column vectors + % of the same size (NW, # of wavelengths), then the output is a matrix + % of spectra for the different SMp, where each column is a spectrum + + % Wout Verhoef + % Version 1.0 + % September 2012 + + %---------------------------------------------------------------------% + + % two-way transmittance of elementary water film + + tw = exp(-kw * deleff); + + % Lekner & Dorf (1988) modified soil background reflectance + % for soil refraction index = 2.0; uses the tav-function of PROSPECT + + rbac = 1 - (1-rdry) .* (rdry .* equations.tav(90,2.0./nw) / equations.tav(90,2.0) + 1-rdry); + + % total reflectance at bottom of water film surface + + p = 1 - equations.tav(90,nw) ./ nw.^2; + + % reflectance of water film top surface, use 40 degrees incidence angle, + % like in PROSPECT + + Rw = 1 - equations.tav(40,nw); + + % additional reflectance of single water film (Lekner & Dorf, 1988) + % two-way transmission loss by water absorption is not included here + % yet + + Radd = (1-Rw) .* (1-p) .* rbac ./(1 - p .* rbac); + + % Mu-parameter of Poisson distribution + + mu = (SMp - 5)/ SMC; + + % fraction of dry soil area + + fdry = exp(-mu); + + % contribution due to total water film area of single or + % multiple thickness + + fmul = (exp(tw * mu) - 1) * diag(fdry); + + % reflectance spectra of wet soil + + rwet = rdry * fdry + Rw * (1 - fdry) + Radd * ones(size(mu)) .* fmul; + +return + + diff --git a/src/CnvrgnCHK.m b/src/CnvrgnCHK.m new file mode 100644 index 00000000..483a9f65 --- /dev/null +++ b/src/CnvrgnCHK.m @@ -0,0 +1,82 @@ +function [KT,TIME,Delt_t,IRPT1,IRPT2,tS]=CnvrgnCHK(xERR,hERR,TERR,Theta_LL,Theta_L,hh,h,TT,T,KT,TIME,Delt_t,NL,NN,Thmrlefc,NBCh,NBChB,NBCT,NBCTB,tS) + +global Delt_t0 +IRPT1=0; +DxMAX=0; +for ML=1:NL + for ND=1:2 + if NBCh==1 && ML==NL && ND==2 + continue + elseif NBChB==1 && ML==1 && ND==1 + continue + else + DxMAX=max(abs(Theta_LL(ML,ND)-Theta_L(ML,ND)),DxMAX); + end + end +end + +DhMAX=0; +for MN=1:NN + if NBCh==1 && ML==NL && ND==2 + continue + elseif NBChB==1 && ML==1 && ND==1 + continue + else + DhMAX=max(abs(hh(MN)-h(MN)),DhMAX); + end +end + +if Thmrlefc==1 + DTMAX=0; + for MN=1:NN + if NBCT==1 && MN==NN + continue + elseif NBCTB==1 && MN==1 + continue + else + DTMAX=max(abs(TT(MN)-T(MN)),DTMAX); + end + end +end + +IRPT2=0; + +FAC1=min(xERR/DxMAX,hERR/DhMAX); +if Thmrlefc==1 + FAC=min(FAC1, TERR/DTMAX);% +else + FAC=FAC1; +end + +if FAC>6 + FAC=6; + Delt_t0=Delt_t; + Delt_t=Delt_t*FAC; + if Delt_t>1800 %original 1800s + Delt_t=1800; + end + return +elseif FAC<0.25 + IRPT2=1; % IRPT2=2, means the time step will be decreased; + % The time step number. Repeat last time step due to excessive change of state. + TIME=TIME-Delt_t; % Time released since the start of simulation. + KT=KT-1; + Delt_t=Delt_t*FAC; + tS=tS+1; + + if Delt_t<1.0e-5 + warning ('Delt_t is getting extremly small.') + end + +else + Delt_t0=Delt_t; + Delt_t=Delt_t*FAC; + if Delt_t>1800 + Delt_t=1800; + end + return +end + + + + diff --git a/src/CondL_T.m b/src/CondL_T.m new file mode 100644 index 00000000..467d31ba --- /dev/null +++ b/src/CondL_T.m @@ -0,0 +1,16 @@ +function [KL_T]=CondL_T(NL) + +MN=0; +for ML=1:NL + for ND=1:2 + MN=ML+ND-1; +% if KLT_Switch==1 + KL_T(ML,ND)=0; %KL_h(ML,ND)*((hh(MN)*GWT)/Gamma0)*(-0.1425-4.76*10^(-4)*TT(MN)); %(50+2.75*TT(MN))/((50+2.75*20));% +% else +% KL_T(ML,ND)=0; +% end + end +end + +%%%%%%%% Unit of KL_T is determined by KL_h, which is subsequently %%%%%%%% +%%%%%%%% determined by Ks set at the beginning. %%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file diff --git a/src/CondL_Tdisp.m b/src/CondL_Tdisp.m new file mode 100644 index 00000000..a574340f --- /dev/null +++ b/src/CondL_Tdisp.m @@ -0,0 +1,40 @@ +function [W,WW,MU_W,D_Ta]=CondL_Tdisp(POR,Theta_LL,Theta_L,SSUR,RHO_bulk,RHOL,TT,Theta_s,h,hh,W_Chg,NL,nD,J,Delt_t,Theta_g,KLT_Switch) + +MU_W0=2.4152*10^(-4); %(g.cm^-1.s^-1) +MU1=4742.8; %(J.mol^-1) +b=4*10^(-6); %(cm) +W0=10^3; %(J.g^-1) + +MN=0; +for ML=1:NL + for ND=1:nD + MN=ML+ND-1; + if W_Chg==0 + W(ML,ND)=0; + WW(ML,ND)=0; + WARG=Theta_LL(ML,ND)*10^7/SSUR; + if WARG<80 + W(ML,ND)=W0*exp(-WARG); + WW(ML,ND)=W0*exp(-WARG); + end + else + W(ML,ND)=-0.2932*h(MN)/1000;%0;% %%% J.g^-1---Original J.Kg^-1, now is divided by 1000. + WW(ML,ND)=-0.2932*hh(MN)/1000;%0;% + end + f0(ML,ND)=Theta_g(ML,ND)^(7/3)/Theta_s(J)^2; %Theta_g(ML,ND)^0.67; + H_W(ML,ND)=RHOL*WW(ML,ND)*(Theta_LL(ML,ND)-Theta_L(ML,ND))/((SSUR/RHO_bulk)*Delt_t); %1e3; % 1e-4J cm-2---> g s-2 ; SSUR and RHO_bulk could also be set as an array to consider more than one soil type; + MU_W(ML,ND)=MU_W0*exp(MU1/(8.31441*(TT(MN)+133.3))); + L_WT(ML,ND)=f0(ML,ND)*1e7*1.5550e-13*POR(J)*H_W(ML,ND)/(b*MU_W(ML,ND)); % kgˇ¤m^-1ˇ¤s^-1 --> 10 g.cm^-1.s^-1; J.cm^-2---> kg.m^2.s^-2.cm^-2--> 1e7g.cm^2.s^-2.cm^-2 + if KLT_Switch==1 + D_Ta(ML,ND)=L_WT(ML,ND)/(RHOL*(TT(MN)+273.15));%0; %0;%0; % + else + D_Ta(ML,ND)=0; + end + end +end +%% Tortuosity Factor is a reverse of the tortuosity. In "L_WT", tortuosity should be used. That is why "f0" is in the numerator.%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% NOTICE: f0 in L_WT has been changed as 1.5 %%%%%%%%%%% +%%%%%% kg.m^2.s^-2.cm^-2.kg.m^-3 --> 1e7g.cm^2.s^-2.cm^-2.g.cm^-3 +%%%%%% Unit of L_WT IS (kgˇ¤m^-1ˇ¤s^-1)=-------------------------- cm^2=;(1.5548e-013 cm^2); Converting meter to centimeter here by multipling UnitC +%%%%%% m. kg.m^-1.s^-1 --> cm. g.cm^-1.s^-1 +%%%%%% Please note that the Rv in MU_W should be 8.31441 J/mol.K. %%%%%%%% \ No newline at end of file diff --git a/src/CondL_h.m b/src/CondL_h.m new file mode 100644 index 00000000..b56e6948 --- /dev/null +++ b/src/CondL_h.m @@ -0,0 +1,52 @@ +function [Theta_LL,Se,KL_h,DTheta_LLh,J,hh]=CondL_h(Theta_r,Theta_s,Alpha,hh,n,m,Ks,NL,Theta_L,h,IS,KIT,TT,Thmrlefc,CKTN,POR,J) + +% PRN The lowest suction head (The maximum value of matric head,considering +% the negative sign before them. The absolute value of which is smallest) at which soil remains saturated. + +% PRN=-1e-6; + + MN=0; + for ML=1:NL + J=IS(ML); + for ND=1:2 + MN=ML+ND-1; + + if hh(MN)>=-1e-6 + Theta_LL(ML,ND)=Theta_s(J); + hh(MN)=-1e-6; + DTheta_LLh(ML,ND)=0; + Se(ML,ND)=1; + elseif hh(MN)<=-1e5 + Theta_LL(ML,ND)=Theta_r(J); + hh(MN)=-1e5; + DTheta_LLh(ML,ND)=0; + Se(ML,ND)=0; + else + Theta_LL(ML,ND)=Theta_r(J)+(Theta_s(J)-Theta_r(J))/(1+abs(Alpha(J)*hh(MN))^n(J))^m(J); + + if Thmrlefc + DTheta_LLh(ML,ND)=(Theta_s(J)-Theta_r(J))*Alpha(J)*n(J)*abs(Alpha(J)*hh(MN))^(n(J)-1)*(-m(J))*(1+abs(Alpha(J)*hh(MN))^n(J))^(-m(J)-1); + else + if abs(hh(MN)-h(MN))<1e-3 + DThehta_LL(ML,ND)=(Theta_s(J)-Theta_r(J))*Alpha(J)*n(J)*abs(Alpha(J)*hh(MN))^(n(J)-1)*(-m(J))*(1+abs(Alpha(J)*hh(MN))^n(J))^(-m(J)-1); + else + DTheta_LLh(ML,ND)=(Theta_LL(ML,ND)-Theta_L(ML,ND))/(hh(MN)-h(MN)); + end + end + + Se(ML,ND)=Theta_LL(ML,ND)/POR(J); + end + +% if KIT + CKT(MN)=CKTN/(50+2.575*TT(MN)); + KL_h(ML,ND)=CKT(MN)*Ks(J)*(Se(ML,ND)^(0.5))*(1-(1-Se(ML,ND)^(1/m(J)))^m(J))^2; +% else +% KL_h(ML,ND)=0; +% end + + end + end + +%%%%%%%%% Unit of KL_h is determined by Ks, which would be given at the%%%% +%%%%%%%%% beginning.Import thing is to keep the unit of matric head hh(MN) +%%%%%%%%% as 'cm'.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file diff --git a/src/CondT_coeff.m b/src/CondT_coeff.m new file mode 100644 index 00000000..60987bfe --- /dev/null +++ b/src/CondT_coeff.m @@ -0,0 +1,32 @@ +function [c_unsat,Lambda_eff]=CondT_coeff(Theta_LL,Lambda1,Lambda2,Lambda3,RHO_bulk,Theta_g,RHODA,RHOV,c_a,c_V,c_L,NL,nD,ThmrlCondCap,~,~) + +global HCAP TCON SF TCA GA1 GA2 GB1 GB2 HCD +global ZETA0 CON0 PS1 PS2 ETCON EHCAP ZETA XWILT XK TT +global MN ML ND IS J POR DRHOVT L D_A Theta_V + +if ThmrlCondCap==1 + + [ETCON,EHCAP,ZETA,J]=EfeCapCond(HCAP,TCON,SF,TCA,GA1,GA2,GB1,GB2,HCD,ZETA0,CON0,PS1,PS2,XWILT,XK,TT,NL,IS,J,POR,Theta_LL,DRHOVT,L,D_A,RHOV,Theta_V); + for ML=1:NL + for ND=1:nD + Lambda_eff(ML,ND)=ETCON(ML,ND); + c_unsat(ML,ND)=EHCAP(ML,ND); + end + end +else + MN=0; + for ML=1:NL + for ND=1:nD + MN=ML+ND-1; + Lambda_eff(ML,ND)=Lambda1+Lambda2*Theta_LL(ML,ND)+Lambda3*Theta_LL(ML,ND)^0.5; %3.6*0.001*4.182; % It is possible to add the dispersion effect here to consider the heat dispersion. + + c_unsat(ML,ND)= 837*RHO_bulk/1000+Theta_LL(ML,ND)*c_L+Theta_g(ML,ND)*(RHODA(MN)*c_a+RHOV(MN)*c_V);%9.79*0.1*4.182;% + end + end +end + + +%%%%% Unit of Lambda_eff is (J.m^-1.s^-1.Cels^-1), While c_unsat is (J.m^-3.Cels^-1) +%%%%% UnitC needs to be used here to convert 'm' to 'cm' . 837 in J.kg^-1.Cels^-1. RHO_bulk in kg.m^-3 %%%%% +%%%%% c_a, c_v,would be in J.g^-1.Cels^-1 as showed in +%%%%% globalization. RHOV and RHODA would be in g.cm^-3 \ No newline at end of file diff --git a/src/CondV_DE.m b/src/CondV_DE.m new file mode 100644 index 00000000..5d17c30c --- /dev/null +++ b/src/CondV_DE.m @@ -0,0 +1,33 @@ +function [D_V,Eta,D_A]=CondV_DE(Theta_LL,TT,fc,Theta_s,NL,nD,J,Theta_g,POR,ThmrlCondCap,ZETA,XK,DVT_Switch) + +MN=0; +for ML=1:NL + for ND=1:nD + MN=ML+ND-1; + + if ThmrlCondCap + if Theta_LL(ML,ND) 1e4*cm2/s + Eta(ML,ND)=8+3*Theta_LL(ML,ND)/Theta_s(J)-7*exp(-((1+2.6/sqrt(fc))*Theta_LL(ML,ND)/Theta_s(J))^3); + end + + D_V(ML,ND)=f0(ML,ND)*Theta_g(ML,ND)*D_A(MN); + + end +end + +%%%%%%%%%%%%% With UnitC^2, m^2.s^-1 would be converted as cm^2.s^-1 %%%%%%%%%%%%% diff --git a/src/CondV_DVg.m b/src/CondV_DVg.m new file mode 100644 index 00000000..ffc9cb4f --- /dev/null +++ b/src/CondV_DVg.m @@ -0,0 +1,32 @@ +function [D_Vg,V_A,Beta_g,DPgDZ,Beta_gBAR,Alpha_LgBAR]=CondV_DVg(P_gg,Theta_g,Sa,V_A,k_g,MU_a,DeltZ,Alpha_Lg,KaT_Switch,Theta_s,Se,NL,J,DPgDZ,Beta_gBAR,Alpha_LgBAR,Beta_g) + +MN=0; +for ML=1:NL + for ND=1:2 + MN=ML+ND-1; + Sa(ML,ND)=1-Se(ML,ND); + f0(ML,ND)=Theta_g(ML,ND)^(7/3)/Theta_s(J)^2; %Theta_g(ML,ND)^0.67; + Beta_g(ML,ND)=(k_g(ML,ND)/MU_a); + Alpha_Lg(ML,ND)=0.078*(13.6-16*Sa(ML,ND)+3.4*Sa(ML,ND)^5)*100; % + end +end + +for ML=1:NL + Beta_gBAR(ML)=(Beta_g(ML,1)+Beta_g(ML,2))/2; + DPgDZ(ML)=(P_gg(ML+1)-P_gg(ML))/DeltZ(ML); + Alpha_LgBAR(ML)=(Alpha_Lg(ML,1)+Alpha_Lg(ML,2))/2; +end + +for ML=1:NL + V_A(ML)=-Beta_gBAR(ML)*DPgDZ(ML); %0; % + if KaT_Switch==1 + D_Vg(ML)=Alpha_LgBAR(ML)*abs(V_A(ML)); %0; %0; % + else + D_Vg(ML)=0; + end +end + +%%%%%%%%%%%% Unit of kg is cm^2, MU_a is g.cm^-1.s^-1,V_A is cm.s^-1, D_Vg +%%%%%%%%%%%% is cm^2.s^-1, The unit of soil air pressure should be Pa=kg.m^-1.s^-2=10g.cm^-1.s^-2 %%%%%%%%%%%%% +%%%%%%%%%%%% Notice that '10'in V_A is because Pa needs to be converted as10g.cm^-1.s^-2; has been done in the StarInit subroutine %%%%%%%%%%%%% +%%%%%%%%%%%% MU_a's unit has been changed %%%%%%%%% \ No newline at end of file diff --git a/src/Condg_k_g.m b/src/Condg_k_g.m new file mode 100644 index 00000000..3b735a92 --- /dev/null +++ b/src/Condg_k_g.m @@ -0,0 +1,12 @@ +function [k_g]=Condg_k_g(POR,NL,J,m,Theta_g,g,MU_W,Ks,RHOL) + +for ML=1:NL + for ND=1:2 + Sa(ML,ND)=Theta_g(ML,ND)/POR(J); + k_g(ML,ND)=Ks(J)*MU_W(ML,ND)*(1-Sa(ML,ND)^0.5)*(1-(1-(1-Sa(ML,ND)^(1/m(J))))^m(J))^2/(g*RHOL); + end +end + + +%%%%%% Unit of k_g is m^2 , with UnitC^2, unit has been converted as cm^2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%% 10^(-12)is used to convert the micrometer(¦Ěm) to meter(m)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/Constants.m b/src/Constants.m new file mode 100644 index 00000000..eef5e88f --- /dev/null +++ b/src/Constants.m @@ -0,0 +1,419 @@ +% function Constants +global DeltZ Delt_t ML NS mL mN nD NL NN SAVE Tot_Depth +global xERR hERR TERR PERR tS +global KT TIME Delt_t0 DURTN TEND NIT KIT Nmsrmn Eqlspace h_SUR Msrmn_Fitting +global Msr_Mois Msr_Temp Msr_Time +global Ksoil Rl SMC Ztot DeltZ_R Theta_o rroot frac bbx wfrac RWUtot Rls Tatot LR PSItot sfactortot + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%% The time and domain information setting. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +KIT=0; % KIT is used to count the number of iteration in a time step; +NIT=60; % Desirable number of iterations in a time step; +Nmsrmn=17568; %Nmsrmn=2568*100; Here, it is made as big as possible, in case a long simulation period containing many time step is defined. + +DURTN=60*30*17568; % Duration of simulation period; +KT=0; % Number of time steps; +TIME=0; % Time of simulation released; + + +TEND=TIME+DURTN; % Time to be reached at the end of simulation period; +Delt_t=1800; % Duration of time step [Unit of second] +Delt_t0=Delt_t; % Duration of last time step; +tS=DURTN/Delt_t; % Is the tS(time step) needed to be added with 1? + % Cause the start of simulation period is from 0mins, while the input data start from 30mins. + +xERR=0.02; % Maximum desirable change of moisture content; +hERR=0.1e08; % Maximum desirable change of matric potential; +TERR=2; % Maximum desirable change of temperature; +PERR=5000; % Maximum desirable change of soil air pressure (Pa,kg.m^-1.s^-1); + +Tot_Depth=500; % Unit is cm. it should be usually bigger than 0.5m. Otherwise, + % the DeltZ would be reset in 50cm by hand; +NL=100; +Eqlspace=0; % Indicator for deciding is the space step equal or not; + +if ~Eqlspace + run Dtrmn_Z % Determination of NL, the number of elments; +else + for ML=1:NL + DeltZ(ML)=Tot_Depth/NL; + end +end + +NN=NL+1; % Number of nodes; +mN=NN+1; +mL=NL+1; % Number of elements. Prevending the exceeds of size of arraies; +nD=2; +NS=1; % Number of soil types; +SAVE=zeros(3,3,3); % Arraies for calculating boundary flux; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +global h_TE +global W_Chg +global l CKTN +global RHOL SSUR RHO_bulk Rv g RDA +global KL_h KL_T D_Ta +global Theta_L Theta_LL Se h hh T TT Theta_V DTheta_LLh +global W WW MU_W f0 L_WT +global DhT +global GWT Gamma0 MU_W0 MU1 b W0 Gamma_w +global Chh ChT Khh KhT Kha Vvh VvT Chg +global C1 C2 C3 C4 C5 C6 C7 C9 +global QL QL_D QL_disp RHS +global HR RHOV_s RHOV DRHOV_sT DRHOVh DRHOVT +global RHODA DRHODAt DRHODAz Xaa XaT Xah +global D_Vg D_V D_A +global k_g Sa V_A Alpha_Lg POR_C Eta +global P_g P_gg Theta_g P_g0 Beta_g +global MU_a fc Unit_C Hc UnitC +global Cah CaT Caa Kah KaT Kaa Vah VaT Vaa Cag +global Lambda1 Lambda2 Lambda3 c_L c_a c_V L0 +global Lambda_eff c_unsat L LL Tr +global CTh CTT CTa KTh KTT KTa VTT VTh VTa CTg +global Kcvh KcvT Kcva Ccvh CcvT Kcah KcaT Kcaa Ccah CcaT Ccaa + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Meteorological Forcing Information Variables +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +global MO Ta U Ts Zeta_MO % U_wind is the mean wind speed at height z_ref (mˇ¤s^-1), U is the wind speed at each time step. +global Precip SH HR_a UseTs_msrmn % Notice that Evap and Precip have only one value for each time step. Precip needs to be measured in advance as the input. +global Gsc Sigma_E +global Rns Rnl +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Variables information for soil air pressure propagation +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +global TopPg + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Fluxes information with different mechanisms +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +global QL_Dts QL_dispts QLts QV_Dts QV_Ats QV_dispts QVts QA_Dts QA_Ats QA_dispts QAts +global QV_D QV_A QV_disp QA_D QA_A QA_disp QL_T QL_h + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Variable information for updating the state variables +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +global hOLD TOLD P_gOLD J +global porosity SaturatedMC ResidualMC SaturatedK Coefficient_n Coefficient_Alpha +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Variables information for initialization subroutine +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +global InitND1 InitND2 InitND3 InitND4 InitND5 BtmT BtmX %Preset the measured depth to get the initial T, h by interpolation method. +global InitT0 InitT1 InitT2 InitT3 InitT4 InitT5 +global InitX0 InitX1 InitX2 InitX3 InitX4 InitX5 +global Thmrlefc hThmrl Hystrs Soilairefc + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Effective Thermal conductivity and capacity variables +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +global EHCAP ThmrlCondCap Evaptranp_Cal +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Variables information for boundary condition settings +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +global DVhSUM DVTSUM DVaSUM KahSUM KaTSUM KaaSUM KLhhSUM KLTTSUM +DVhSUM=zeros(Nmsrmn/2,1);DVTSUM=zeros(Nmsrmn/2,1); DVaSUM=zeros(Nmsrmn/2,1); +KahSUM=zeros(Nmsrmn/2,1); KaTSUM=zeros(Nmsrmn/2,1); KaaSUM=zeros(Nmsrmn/2,1); +KLhhSUM=zeros(Nmsrmn/2,1); KLTTSUM=zeros(Nmsrmn/2,1); + +%> NBCh Indicator for type of surface boundary condition on mass euqation to be applied; +%> "1"--Specified matric head; +%> "2"--Specified potential moisture flux (potential evaporation rate of precipitation rate); +%> "3"--Specified atmospheric forcing; +%> NBCT Indicator for type of surface boundary condtion on energy equation to be applied; +%> "1"--Specified temperature; +%> "2"--Specified heat flux; +% "3"--Specified atmospheric forcing; +%> NBCP Indicator for type of surface boundary condition on dry air equation to be applied; +%> "1"--Specified atmospheric pressure; +%> "2"--Specified atmospheric forcing (Measured atmospheric pressure data); +%> BCh Value of specified matric head (if NBCh=1) or specified potential moisture flux (if NBCh=2) at surface; +%> BChB The same as BCh but at the bottom of column; +%> BCT Value of specified temperature (if NBCT=1) or specified head flux (if NBCT=2) at surface; +%> BCTB The same as BCT but at the bottom of column; +%> BCPB Value of specified atmospheric pressure; +%> BCP The same as BCP but at the bottom of column; +%> hN Specified value of matric head when a fist-type BC is used; +%> NBChB Type of boundary condition on matric head at bottom of column; +%> "1"--Specified head of BChB at bottom; +%> "2"--Specified moisture flux of BChB; +%> "3"--Zero matric head gradient at bottom(Gravity drainage); +%> NBCTB Type of boundary condition on temperature at bottom of column; +%> "1"--Specified temperature BCTB at bottom; +%> "2"--Specified heat flux BCTB at bottom; +%> "3"--Zero temperature gradient at bottom (advection only); +%> NBCPB Type of boundary condition on soil air pressure; +%> "1"--Specified dry air flux BCPB at bottom; +%> "2"--Zero soil air pressure gradient at bottom; +%> NBChh Type of surface BC actually applied on a particular trial of a time step when NBCh euqals 2 or 3; +%> "1"--Specified matric head; +%> "2"--Specified actual flux; +%> DSTOR Depth of depression storage at end of current time step; +%> DSTOR0 Depth of depression storage at start of current time step; +%> DSTMAX Depression storage capacity; +%> EXCESS Excess of available water over infiltration rate for current time step,expressed as a rate; +%> AVAIL Maximum rate at which water can be supplied to the soil from above during the current time step; +%> +%> +global alpha_h bx Srt rwuef Ts_msr + +alpha_h=zeros(mL,nD); %root water uptake +bx=zeros(NL,1); +bbx=zeros(NL,1); +Srt=zeros(mL,nD); + +DTheta_LLh=zeros(mL,nD); +KL_h=zeros(mL,nD); % The hydraulic conductivity(mˇ¤s^-1); +KL_T=zeros(mL,nD); % The conductivity controlled by thermal gradient(m^2ˇ¤Cels^-1ˇ¤s^-1); +D_Ta=zeros(mL,nD); % The thermal dispersivity for soil water (m^2ˇ¤Cels^-1ˇ¤s^-1); +Theta_L=zeros(mL,nD); % The soil moisture at the start of current time step; +Theta_LL=zeros(mL,nD); % The soil moisture at the end of current time step; +Se=zeros(mL,nD); % The saturation degree of soil moisture; +h=zeros(mN,1); % The matric head at the start of current time step; +hh=zeros(mN,1); % The matric head at the end of current time step; +T=zeros(mN,1); % The soil temperature at the start of current time step; +TT=zeros(mN,1); % The soil temperature at the end of current time step; +Theta_V=zeros(mL,nD); % Volumetric gas content; +W=zeros(mL,nD); % Differential heat of wetting at the start of current time step(Jˇ¤kg^-1); +WW=zeros(mL,nD); % Differential heat of wetting at the end of current time step(Jˇ¤kg^-1); + % Integral heat of wetting in individual time step(Jˇ¤m^-2); %%%%%%%%%%%%%%% Notice: the formulation of this in 'CondL_Tdisp' is not a sure. %%%%%%%%%%%%%% +MU_W=zeros(mL,nD); % Visocity of water(kgˇ¤m^?6?1ˇ¤s^?6?1); +f0=zeros(mL,nD); % Tortusity factor [Millington and Quirk (1961)]; kg.m^2.s^-2.m^-2.kg.m^-3 +L_WT=zeros(mL,nD); % Liquid dispersion factor in Thermal dispersivity(kgˇ¤m^-1ˇ¤s^-1)=-------------------------- m^2 (1.5548e-013 m^2); +DhT=zeros(mN,1); % Difference of matric head with respect to temperature; m. kg.m^-1.s^-1 +RHS=zeros(mN,1); % The right hand side part of equations in '*_EQ' subroutine; +EHCAP=zeros(mL,nD); % Effective heat capacity; +Chh=zeros(mL,nD); % Storage coefficients in moisture mass conservation equation related to matric head; +ChT=zeros(mL,nD); % Storage coefficients in moisture mass conservation equation related to temperature; +Khh=zeros(mL,nD); % Conduction coefficients in moisture mass conservation equation related to matric head; +KhT=zeros(mL,nD); % Conduction coefficients in moisture mass conservation equation related to temperature; +Kha=zeros(mL,nD); % Conduction coefficients in moisture mass conservation equation related to soil air pressure; +Vvh=zeros(mL,nD); % Conduction coefficients in moisture mass conservation equation related to matric head; +VvT=zeros(mL,nD); % Conduction coefficients in moisture mass conservation equation related tempearture; +Chg=zeros(mL,nD); % Gravity coefficients in moisture mass conservation equation; +C1=zeros(mL,nD); % The coefficients for storage term related to matric head; +C2=zeros(mL,nD); % The coefficients for storage term related to tempearture; +C3=zeros(mL,nD); % Storage term coefficients related to soil air pressure; +C4=zeros(mL,nD); % Conductivity term coefficients related to matric head; +C5=zeros(mL,nD); % Conductivity term coefficients related to temperature; +C6=zeros(mL,nD); % Conductivity term coefficients related to soil air pressure; +C7=zeros(mN,1); % Gravity term coefficients; +C9=zeros(mN,1); % root water uptake coefficients; +QL=zeros(mL,nD); % Soil moisture mass flux (kgˇ¤m^-2ˇ¤s^-1); +QL_D=zeros(mL,nD); % Convective moisturemass flux (kgˇ¤m^-2ˇ¤s^-1); +QL_disp=zeros(mL,nD); % Dispersive moisture mass flux (kgˇ¤m^-2ˇ¤s^-1); +QL_h=zeros(mL,nD); % potential driven moisture mass flux (kgˇ¤m^-2ˇ¤s^-1); +QL_T=zeros(mL,nD); % temperature driven moisture mass flux (kgˇ¤m^-2ˇ¤s^-1); +HR=zeros(mN,1); % The relative humidity in soil pores, used for calculatin the vapor density; +RHOV_s=zeros(mN,1); % Saturated vapor density in soil pores (kgˇ¤m^-3); +RHOV=zeros(mN,1); % Vapor density in soil pores (kgˇ¤m^-3); +DRHOV_sT=zeros(mN,1); % Derivative of saturated vapor density with respect to temperature; +DRHOVh=zeros(mN,1); % Derivative of vapor density with respect to matric head; +DRHOVT=zeros(mN,1); % Derivative of vapor density with respect to temperature; +RHODA=zeros(mN,1); % Dry air density in soil pores(kgˇ¤m^-3); +DRHODAz=zeros(mN,1); % Derivative of dry air density with respect to distance; +DRHODAt=zeros(mN,1); % Derivative of dry air density with respect to time; +Xaa=zeros(mN,1); % Coefficients of derivative of dry air density with respect to temperature and matric head; +XaT=zeros(mN,1); % Coefficients of derivative of dry air density with respect to temperature and matric head; +Xah=zeros(mN,1); % Coefficients of derivative of dry air density with respect to temperature and matric head; +D_Vg=zeros(mL,1); % Gas phase longitudinal dispersion coefficient (m^2ˇ¤s^-1); +D_V=zeros(mL,nD); % Molecular diffusivity of water vapor in soil(m^2ˇ¤s^-1); +D_A=zeros(mN,1); % Diffusivity of water vapor in air (m^2ˇ¤s^-1); +k_g=zeros(mL,nD); % Intrinsic air permeability (m^2); +Sa=zeros(mL,nD); % Saturation degree of gas in soil pores; +V_A=zeros(mL,nD); % Soil air velocity (mˇ¤s^-1); +Alpha_Lg=zeros(mL,nD); % Longitudinal dispersivity in gas phase (m); +POR_C=zeros(mL,nD); % The threshold air-filled porosity; +Eta=zeros(mL,nD); % Enhancement factor for thermal vapor transport in soil. +P_g=zeros(mN,1); % Soil air pressure at the start of current time step; +P_gg=zeros(mN,1); % Soil air pressure at the end of current time step; +Theta_g=zeros(mL,nD); % Volumetric gas content; +Beta_g=zeros(mL,nD); % The simplified coefficient for the soil air pressure linearization equation; +Cah=zeros(mL,nD); % Storage coefficients in dry air mass conservation equation related to matric head; +CaT=zeros(mL,nD); % Storage coefficients in dry air mass conservation equation related to temperature; +Caa=zeros(mL,nD); % Storage coefficients in dry air mass conservation equation related to soil air pressure; +Kah=zeros(mL,nD); % Conduction coefficients in dry air mass conservation equation related to matric head; +KaT=zeros(mL,nD); % Conduction coefficients in dry air mass conservation equation related to temperature; +Kaa=zeros(mL,nD); % Conduction coefficients in dry air mass conservation equation related to soil air pressure; +Vah=zeros(mL,nD); % Conduction coefficients in dry air mass conservation equation related to matric head; +VaT=zeros(mL,nD); % Conduction coefficients in dry air mass conservation equation related to temperature; +Vaa=zeros(mL,nD); % Conduction coefficients in dry air mass conservation equation related to soil air pressure; +Cag=zeros(mL,nD); % Gravity coefficients in dry air mass conservation equation; +Lambda_eff=zeros(mL,nD); % Effective heat conductivity; +c_unsat=zeros(mL,nD); % Effective heat capacity; +L=zeros(mN,1); % The latent heat of vaporization at the beginning of the time step; +LL=zeros(mN,1); % The latent heat of vaporization at the end of the time step; +CTh=zeros(mL,nD); % Storage coefficient in energy conservation equation related to matric head; +CTT=zeros(mL,nD); % Storage coefficient in energy conservation equation related to temperature; +CTa=zeros(mL,nD); % Storage coefficient in energy conservation equation related to soil air pressure; +KTh=zeros(mL,nD); % Conduction coefficient in energy conservation equation related to matric head; +KTT=zeros(mL,nD); % Conduction coefficient in energy conservation equation related to temperature; +KTa=zeros(mL,nD); % Conduction coefficient in energy conservation equation related to soil air pressure; +VTT=zeros(mL,nD); % Conduction coefficient in energy conservation equation related to matric head; +VTh=zeros(mL,nD); % Conduction coefficient in energy conservation equation related to temperature; +VTa=zeros(mL,nD); % Conduction coefficient in energy conservation equation related to soil air pressure; +CTg=zeros(mL,nD); % Gravity coefficient in energy conservation equation; +Kcvh=zeros(mL,nD); % Conduction coefficient of vapor transport in energy conservation equation related to matric head; +KcvT=zeros(mL,nD); % Conduction coefficient of vapor transport in energy conservation equation related to temperature; +Kcva=zeros(mL,nD); % Conduction coefficient of vapor transport in energy conservation equation related to soil air pressure; +Ccvh=zeros(mL,nD); % Storage coefficient of vapor transport in energy conservation equation related to matric head; +CcvT=zeros(mL,nD); % Storage coefficient of vapor transport in energy conservation equation related to temperature; +Kcah=zeros(mL,nD); % Conduction coefficient of dry air transport in energy conservation equation related to matric head; +KcaT=zeros(mL,nD); % Conduction coefficient of dry air transport in energy conservation equation related to temperature; +Kcaa=zeros(mL,nD); % Conduction coefficient of dry air transport in energy conservation equation related to soil air pressure; +Ccah=zeros(mL,nD); % Storage coefficient of dry air transport in energy conservation equation related to matric head; +CcaT=zeros(mL,nD); % Storage coefficient of dry air transport in energy conservation equation related to temperature; +Ccaa=zeros(mL,nD); % Storage coefficient of dry air transport in energy conservation equation related to soil air pressure; +Precip=zeros(Nmsrmn,1); % Precipitation(m.s^-1); +Ta=zeros(Nmsrmn,1); % Air temperature; +Ts=zeros(Nmsrmn,1); % Surface temperature; +U=zeros(Nmsrmn,1); % Wind speed (m.s^-1); +HR_a=zeros(Nmsrmn,1); % Air relative humidity; +Rns=zeros(Nmsrmn,1); % Net shortwave radiation(Wˇ¤m^-2); +Rnl=zeros(Nmsrmn,1); % Net longwave radiation(Wˇ¤m^-2); +Rn=zeros(Nmsrmn,1); +h_SUR=zeros(Nmsrmn,1); % Observed matric potential at surface; +SH=zeros(Nmsrmn,1); % Sensible heat (Wˇ¤m^-2); +MO=zeros(Nmsrmn,1); % Monin-Obukhov's stability parameter (MO Length); +Zeta_MO=zeros(Nmsrmn,1); % Atmospheric stability parameter; +TopPg=zeros(Nmsrmn,1); % Atmospheric pressure above the surface as the boundary condition (Pa); +QL_Dts=zeros(mL,1); % Convective moisture mass flux in one time step; +QL_dispts=zeros(mL,1); % Dispersive moisture mass flux in one time step; +QLts=zeros(mL,1); % Total moisture mass flux in one time step; +QV_Dts=zeros(mL,1); % Diffusive vapor mass flux in one time step; +QV_Ats=zeros(mL,1); % Convective vapor mass flux in one time step; +QV_dispts=zeros(mL,1); % Dispersive vapor mass flux in one time step; +QVts=zeros(mL,1); % Total vapor mass flux in one time step; +QA_Dts=zeros(mL,1); % Diffusive dry air mass flux in one time step; +QA_Ats=zeros(mL,1); % Convective dry air mass flux in one time step; +QA_dispts=zeros(mL,1); % Dispersive dry air mass flux in one time step; +QAts=zeros(mL,1); % Total dry air mass flux in one time step; +QV_D=zeros(mL,1); % Diffusive vapor mass flux; +QV_A=zeros(mL,1); % Convective vapor mass flux; +QV_disp=zeros(mL,1); % Dispersive vapor mass flux; +QA_D=zeros(mL,1); % Diffusive dry air mass flux; +QA_A=zeros(mL,1); % Convective dry air mass flux; +QA_disp=zeros(mL,1); % Dispersive dry air mass flux; +hOLD=zeros(mN,1); % Array used to get the matric head at the end of last time step and extraplot the matric head at the start of current time step; +TOLD=zeros(mN,1); % The same meanings of hOLD,but for temperature; +P_gOLD=zeros(mN,1); % The same meanins of TOLD,but for soil air pressure; +Ksoil=zeros(ML,1); +Rl=ones(ML,1)*150; +SMC=zeros(ML,1); +DeltZ_R=zeros(ML,1); +Theta_o=ones(ML,1); +frac=zeros(ML,1); +wfrac=zeros(ML,1); +RWUtot=zeros(ML,17568); +Rls=zeros(ML,17568); +Tatot=zeros(17568,1); +LR=0; +PSItot=zeros(17568,1); +sfactortot=zeros(17568,1); +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%% The indicators needs to be set before the running of this program %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +J=1; % Indicator denotes the index of soil type for choosing soil physical parameters; % +rwuef=0; +Evaptranp_Cal=2; % Indicator denotes the method of estimating evapotranspiration; + % Value of 1 means the ETind method, otherwise, ETdir method; +UseTs_msrmn=1; % Value of 1 means the measurement Ts would be used; Otherwise, 0; % +Msrmn_Fitting=1; % Value of 1 means the measurement data is used to fit the simulations; +Hystrs=1; % If the value of Hystrs is 1, then the hysteresis is considered, otherwise 0; % +Thmrlefc=1; % Consider the isothermal water flow if the value is 0, otherwise 1; % +Soilairefc=1; % The dry air transport is considered with the value of 1,otherwise 0; % +hThmrl=1; % Value of 1, the special calculation of water capacity is used, otherwise 0; % +h_TE=0; % Value of 1 means that the temperature dependence % + % of matric head would be considered.Otherwise,0; % +W_Chg=1; % Value of 0 means that the heat of wetting would % + % be calculated by Milly's methodŁ¬Otherwise,1. The % + % method of Lyle Prunty would be used; % +ThmrlCondCap=1; %1; % The indicator for choosing Milly's effective thermal capacity and conductivity % + % formulation to verify the vapor and heat transport in extremly dry soil. % +%%%%% 172 27%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +SaturatedK=[12/(3600*24) 68/(3600*24)]; % Saturation hydraulic conductivity (cm.s^-1); +SaturatedMC=[0.38 0.43]; % Saturated water content; +ResidualMC=[0.0008 0.045]; % The residual water content of soil; +Coefficient_n=[1.5 2.68]; % Coefficient in VG model; +Coefficient_Alpha=[0.00166 0.145]; % Coefficient in VG model; +porosity=[0.50 0.45]; % Soil porosity; +CKTN=(50+2.575*20); % Constant used in calculating viscosity factor for hydraulic conductivity +l=0.5; % Coefficient in VG model; +g=981; % Gravity acceleration (cm.s^-2); +RHOL=1; % Water density (g.cm^-3); +SSUR=10^5; % Surface area for loam,for sand 10^2 (cm^-1); +Rv=461.5*1e4; % (cm^2.s^-2.Cels^-1)Gas constant for vapor (original J.kg^-1.Cels^-1); +RDA=287.1*1e4; % (cm^2.s^-2.Cels^-1)Gas constant for dry air (original J.kg^-1.Cels^-1); +RHO_bulk=1.4; % Bulk density of sand (g.cm^-3); +fc=0.036; % The fraction of clay,for loam,0.036; for sand,0.02; +Unit_C=1; % Change the mH2O into (kg.m^-1.s^-2) %101325/10.3; +UnitC=100; % Change of meter into centimeter; +Hc=0.02; % Henry's constant; +GWT=7; % The gain factor(dimensionless),which assesses the temperature +rroot=1.5*1e-3; % dependence of the soil water retention curve is set as 7 for + % sand (Noborio et al, 1996); +MU_a=1.846*10^(-4); % (g.cm^-1.s^-1)Viscosity of air (original 1.846*10^(-5)kg.m^-1.s^-1); +Gamma0=71.89; % The surface tension of soil water at 25 Cels degree. (g.s^-2); +Gamma_w=RHOL*g; % Specific weight of water(g.cm^-2.s^-2); +Lambda1=0.228/UnitC;%-0.197/UnitC;% 0.243/UnitC; % Coefficients in thermal conductivity; +Lambda2=-2.406/UnitC;%-0.962/UnitC;% 0.393/UnitC; % W.m^-1.Cels^-1 (1 W.s=J); From HYDRUS1D heat transport parameter.(Chung Hortan 1987 WRR) +Lambda3=4.909/UnitC;%2.521/UnitC;% 1.534/UnitC; %%%%%%%%%%%%%%%%%%%%%% UnitC is used to convert m^-1 as cm^-1 %%%%%%%%%%%%%%%%%%% +MU_W0=2.4152*10^(-4); % Viscosity of water (g.cm^-1.s^-1) at reference temperature(original 2.4152*10^(-5)kg.m^-1.s^-1); +MU1=4742.8; % Coefficient for calculating viscosity of water (J.mol^-1); +b=4*10^(-6); % Coefficient for calculating viscosity of water (cm); +W0=1.001*10^3; % Coefficient for calculating differential heat of wetting by Milly's method +L0=597.3*4.182; +Tr=20; % Reference temperature +c_L=4.186; % Specific heat capacity of liquid water (Jˇ¤g^-1ˇ¤Cels^-1) %%%%%%%%% Notice the original unit is 4186kg^-1 +c_V=1.870; % Specific heat capacity of vapor (Jˇ¤g^-1ˇ¤Cels^-1) +c_a=1.255e-3; +%c_a=1.005; % 0.0003*4.186; %Specific heat capacity of dry air (Jˇ¤g^-1ˇ¤Cels^-1) +Gsc=1360; % The solar constant (1360 Wˇ¤m^-2) +Sigma_E=4.90*10^(-9); % The stefan-Boltzman constant.(=4.90*10^(-9) MJˇ¤m^-2ˇ¤Cels^-4ˇ¤d^-1) +P_g0=951978.50; % The mean atmospheric pressure (Should be given in new simulation period subroutine.) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Input for producing initial soil moisture and soil temperature profile +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +InitND1=20; % Unit of it is cm. These variables are used to indicated the depth corresponding to the measurement. +InitND2=40; +InitND3=60; +InitND4=200; +InitND5=300; +% Measured temperature at InitND1 depth at the start of simulation period +InitT0= 9.89; +InitT1= 10.76714; +InitT2= 11.82195; +InitT3= 11.9841; +InitT4= 12.0; +InitT5= 12.6841; +BtmT=16.6; +InitX0= 0.2181060; +InitX1= 0.2227298; % Measured soil moisture content +InitX2= 0.2131723; +InitX3= 0.1987298; +InitX4= 0.1727298; +InitX5= 0.16; +BtmX=0.16;%0.05; % The initial moisture content at the bottom of the column. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The measured soil moisture and tempeature data here +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if Msrmn_Fitting +%20, 40, 60, 80, 100cm +Xdata=xlsread('E:\grassland\SCOPE-master\SCOPE_v1.73\src\INPUT_2013_YM_HOUR','sheet1','a3:s2450'); +Xdata=Xdata'; +Msr_Mois=0.01.*[Xdata(13,:);Xdata(14,:);Xdata(15,:);Xdata(16,:);Xdata(17,:)]; +%20, 40, 60, 80, 100cm +Msr_Temp=[Xdata(4,:);Xdata(5,:);Xdata(6,:);Xdata(7,:);Xdata(8,:)]; +Msr_Time=3600.*Xdata(1,:); +Ts_msr=Xdata(3,:); +ETdata=xlsread('E:\grassland\SCOPE-master\SCOPE_v1.73\src\ET','sheet1','A2:E2449'); +ET_H=ETdata(:,1)'; +ET_D=ETdata(:,3)'; +E_D=ETdata(:,4)'; +end + + diff --git a/src/Density_DA.m b/src/Density_DA.m new file mode 100644 index 00000000..09107334 --- /dev/null +++ b/src/Density_DA.m @@ -0,0 +1,19 @@ +function [Xaa,XaT,Xah,DRHODAt,DRHODAz,RHODA]=Density_DA(T,RDA,P_g,Rv,DeltZ,h,hh,TT,P_gg,Delt_t,NL,NN,DRHOVT,DRHOVh,RHOV) + +for MN=1:NN + Xaa(MN)=1/(RDA*(TT(MN)+273.15)); + XaT(MN)=-(P_gg(MN)/(RDA*(TT(MN)+273.15)^2)+Rv*DRHOVT(MN)/RDA); + Xah(MN)=-Rv*DRHOVh(MN)/RDA; + + DRHODAt(MN)=Xaa(MN)*(P_gg(MN)-P_g(MN))/Delt_t+XaT(MN)*(TT(MN)-T(MN))/Delt_t+Xah(MN)*(hh(MN)-h(MN))/Delt_t; + + RHODA(MN)=P_gg(MN)/(RDA*(TT(MN)+273.15))-RHOV(MN)*Rv/RDA; +end +%%%%%%% Pa=kg.m^-1.s^-2=10g.cm^-1.s^-2 %%%%%%%% + +for ML=1:NL + XaaBAR(ML)=(Xaa(ML+1)+Xaa(ML))/2; + XahBAR(ML)=(Xah(ML+1)+Xah(ML))/2; + XaTBAR(ML)=(XaT(ML+1)+XaT(ML))/2; + DRHODAz(ML)=XaaBAR(ML)*(P_gg(ML+1)-P_gg(ML))/DeltZ(ML)+XaTBAR(ML)*(TT(ML+1)-TT(ML))/DeltZ(ML)+XahBAR(ML)*(hh(ML+1)-hh(ML))/DeltZ(ML); +end diff --git a/src/Density_V.m b/src/Density_V.m new file mode 100644 index 00000000..43f8ec09 --- /dev/null +++ b/src/Density_V.m @@ -0,0 +1,17 @@ +function [RHOV,DRHOVh,DRHOVT]=Density_V(TT,hh,g,Rv,NN) + +for MN=1:NN + HR(MN)=exp(hh(MN)*g/(Rv*(TT(MN)+273.15))); + + RHOV_s(MN)=1e-6*exp(31.3716-6014.79/(TT(MN)+273.15)-7.92495*0.001*(TT(MN)+273.15))/(TT(MN)+273.15); + + DRHOV_sT(MN)=RHOV_s(MN)*(6014.79/(TT(MN)+273.15)^2-7.92495*0.001)-RHOV_s(MN)/(TT(MN)+273.15); + + RHOV(MN)=RHOV_s(MN)*HR(MN); + + DRHOVh(MN)=RHOV_s(MN)*HR(MN)*g/(Rv*(TT(MN)+273.15)); + + DRHOVT(MN)=RHOV_s(MN)*HR(MN)*(-hh(MN)*g/(Rv*(TT(MN)+273.15)^2))+HR(MN)*DRHOV_sT(MN); + +end + diff --git a/src/Dtrmn_Z.m b/src/Dtrmn_Z.m new file mode 100644 index 00000000..16d4feb1 --- /dev/null +++ b/src/Dtrmn_Z.m @@ -0,0 +1,90 @@ +function Dtrmn_Z +% The determination of the element length +global Elmn_Lnth ML DeltZ NL Tot_Depth DeltZ_R MML Ztot + +Elmn_Lnth=0; + +for ML=1:2 + DeltZ_R(ML)=0.25; +end + DeltZ_R(3)=0.5; + +for ML=4:12 + DeltZ_R(ML)=1; +end + +for ML=13:17 + DeltZ_R(ML)=2; +end + +for ML=18:23 + DeltZ_R(ML)=5; +end +% Sum of element lengths and compared to the total lenght, so that judge +% can be made to determine the length of rest elements. + +for ML=1:23 + Elmn_Lnth=Elmn_Lnth+DeltZ_R(ML); +end + +% If the total sum of element lenth is over the predefined depth, stop the +% for loop, make the ML, at which the element lenth sumtion is over defined +% depth, to be new NL. +for ML=24:28 + DeltZ_R(ML)=10; + Elmn_Lnth=Elmn_Lnth+DeltZ_R(ML); + if Elmn_Lnth>Tot_Depth + DeltZ_R(ML)=Tot_Depth-Elmn_Lnth+DeltZ_R(ML); + NL=ML; + + for ML=1:NL + MML=NL-ML+1; + DeltZ(ML)=DeltZ_R(MML); + end + return + elseif Elmn_LnthTot_Depth + DeltZ_R(ML)=Tot_Depth-Elmn_Lnth+DeltZ_R(ML); + NL=ML; + + for ML=1:NL + MML=NL-ML+1; + DeltZ(ML)=DeltZ_R(MML); + end + return + elseif Elmn_Lnth=Tot_Depth + DeltZ_R(ML)=Tot_Depth-Elmn_Lnth+DeltZ_R(ML); + NL=ML; + + for ML=1:NL + MML=NL-ML+1; + DeltZ(ML)=DeltZ_R(MML); + end + return + end + Ztot=DeltZ'; + Ztot=flip(Ztot); + Ztot=cumsum(Ztot,1); + Ztot=flip(Ztot); +end + + + + + + \ No newline at end of file diff --git a/src/EfeCapCond.m b/src/EfeCapCond.m new file mode 100644 index 00000000..8d19edc8 --- /dev/null +++ b/src/EfeCapCond.m @@ -0,0 +1,43 @@ +function [ETCON,EHCAP,ZETA,J]=EfeCapCond(HCAP,TCON,SF,TCA,GA1,GA2,GB1,GB2,HCD,ZETA0,CON0,PS1,PS2,XWILT,XK,TT,NL,IS,J,POR,Theta_LL,DRHOVT,L,D_A,RHOV,Theta_V) + +MN=0; +for ML=1:NL + for ND=1:2 + MN=ML+ND-1; + J=IS(ML); + XXX=Theta_LL(ML,ND); + if Theta_LL(ML,ND) < XK(J) + XXX=XK(J); + end + + if XXX < XWILT(J) + SF(2)=GA2+GB2(J)*XXX; + else + SF(2)=GA1+GB1(J)*XXX; + end + D_A(MN)=0.229*(1+TT(MN)/273)^1.75; + TCON(2)=TCA+D_A(MN)*L(MN)*DRHOVT(MN); %TCA+D_A(MN)*L(MN)*DRHOVT(MN); % Revised from ""(D_V(ML,ND)*Eta(ML,ND)+D_Vg(ML))*L(MN)*DRHOVT(MN) + + TARG=TCON(2)/TCON(1)-1; + GRAT=0.667/(1+TARG*SF(2))+0.333/(1+TARG*(1-2*SF(2))); + ETCON(ML,ND)=(PS1(J)+XXX*TCON(1)+(POR(J)-XXX)*GRAT*TCON(2))/(PS2(J)+XXX+(POR(J)-XXX)*GRAT); + ZETA(ML,ND)=GRAT/(GRAT*(POR(J)-XXX)+XXX+PS2(J)); + + if Theta_LL(ML,ND)==XXX + EHCAP(ML,ND)=HCD(J)+HCAP(1)*Theta_LL(ML,ND); + EHCAP(ML,ND)=EHCAP(ML,ND)+(0.448*RHOV(MN)*4.182+HCAP(2))*Theta_V(ML,ND); % The Calorie should be converted as J + else + ZETA(ML,ND)=ZETA0(J)+(ZETA(ML,ND)-ZETA0(J))*Theta_LL(ML,ND)/XXX; + ETCON(ML,ND)=CON0(J)+(ETCON(ML,ND)-CON0(J))*Theta_LL(ML,ND)/XXX; + EHCAP(ML,ND)=HCD(J)+HCAP(1)*Theta_LL(ML,ND); + EHCAP(ML,ND)=EHCAP(ML,ND)+(0.448*RHOV(MN)*4.182+HCAP(2))*Theta_V(ML,ND); % The Calorie should be converted as J + end + end +end + + + + + + + \ No newline at end of file diff --git a/src/EnrgyPARM.m b/src/EnrgyPARM.m new file mode 100644 index 00000000..f27bfbdf --- /dev/null +++ b/src/EnrgyPARM.m @@ -0,0 +1,74 @@ +function [CTh,CTT,CTa,KTh,KTT,KTa,VTT,VTh,VTa,CTg,QL,QV,Qa,KLhBAR,KLTBAR,DTDBAR,DhDZ,DTDZ,DPgDZ,Beta_g,DEhBAR,DETBAR,RHOVBAR,EtaBAR]=EnrgyPARM(NL,hh,TT,DeltZ,P_gg,Kaa,Vvh,VvT,Vaa,c_a,c_L,DTheta_LLh,RHOV,Hc,RHODA,DRHODAz,L,WW,RHOL,Theta_V,DRHOVh,DRHOVT,KL_h,D_Ta,KL_T,D_V,D_Vg,DVa_Switch,Theta_g,QL,V_A,Lambda_eff,c_unsat,Eta,Xah,XaT,Xaa,DTheta_LLT,Soilairefc,Khh,KhT,Kha,KLhBAR,KLTBAR,DTDBAR,DhDZ,DTDZ,DPgDZ,Beta_g,DEhBAR,DETBAR,QV,Qa,RHOVBAR,EtaBAR) + +for ML=1:NL + if ~Soilairefc + KLhBAR(ML)=(KL_h(ML,1)+KL_h(ML,2))/2; + KLTBAR(ML)=(KL_T(ML,1)+KL_T(ML,2))/2; + DETBAR(ML)=(D_V(ML,1)*Eta(ML,1)+D_V(ML,2)*Eta(ML,2))/2; + DhDZ(ML)=(hh(ML+1)-hh(ML))/DeltZ(ML); + DTDZ(ML)=(TT(ML+1)-TT(ML))/DeltZ(ML); + DPgDZ(ML)=(P_gg(ML+1)-P_gg(ML))/DeltZ(ML); + end + DTDBAR(ML)=(D_Ta(ML,1)+D_Ta(ML,2))/2; + DEhBAR(ML)=(D_V(ML,1)+D_V(ML,2))/2; + DRHOVhDz(ML)=(DRHOVh(ML+1)+DRHOVh(ML))/2; + DRHOVTDz(ML)=(DRHOVT(ML+1)+DRHOVT(ML))/2; + RHOVBAR(ML)=(RHOV(ML+1)+RHOV(ML))/2; + EtaBAR(ML)=(Eta(ML,1)+Eta(ML,2))/2; +end + +%%%%%% NOTE: The soil air gas in soil-pore is considered with Xah and XaT terms.(0.0003,volumetric heat capacity)%%%%%% +MN=0; +for ML=1:NL + for ND=1:2 + MN=ML+ND-1; + if ~Soilairefc + QL(ML)=-(KLhBAR(ML)*DhDZ(ML)+(KLTBAR(ML)+DTDBAR(ML))*DTDZ(ML)+KLhBAR(ML)); + Qa(ML)=0; + else + Qa(ML)=-((DEhBAR(ML)+D_Vg(ML))*DRHODAz(ML)-RHODA(ML)*(V_A(ML)+Hc*QL(ML)/RHOL)); + end + + if DVa_Switch==1 + QV(ML)=-(DEhBAR(ML)+D_Vg(ML))*DRHOVhDz(ML)*DhDZ(ML)-(DEhBAR(ML)*EtaBAR(ML)+D_Vg(ML))*DRHOVTDz(ML)*DTDZ(ML)+RHOVBAR(ML)*V_A(ML); + else + QV(ML)=-(DEhBAR(ML)+D_Vg(ML))*DRHOVhDz(ML)*DhDZ(ML)-(DEhBAR(ML)*EtaBAR(ML)+D_Vg(ML))*DRHOVTDz(ML)*DTDZ(ML); + end + + if Soilairefc==1 + Kcah(ML,ND)=c_a*TT(MN)*((D_V(ML,ND)+D_Vg(ML))*Xah(MN)+Hc*RHODA(MN)*KL_h(ML,ND)); + KcaT(ML,ND)=c_a*TT(MN)*((D_V(ML,ND)+D_Vg(ML))*XaT(MN)+Hc*RHODA(MN)*(KL_T(ML,ND)+D_Ta(ML,ND))); % + Kcaa(ML,ND)=c_a*TT(MN)*Kaa(ML,ND); %((D_V(ML,ND)+D_Vg(ML))*Xaa(MN)+RHODA(MN)*(Beta_g(ML,ND)+Hc*KL_h(ML,ND)/Gamma_w)); % + if DVa_Switch==1 + Kcva(ML,ND)=L(MN)*RHOV(MN)*Beta_g(ML,ND); %(c_V*TT(MN)+L(MN))--->(c_L*TT(MN)+L(MN)) + else + Kcva(ML,ND)=0; + end + Ccah(ML,ND)=c_a*TT(MN)*(-V_A(ML)-Hc*QL(ML)/RHOL)*Xah(MN); + CcaT(ML,ND)=c_a*TT(MN)*(-V_A(ML)-Hc*QL(ML)/RHOL)*XaT(MN); + Ccaa(ML,ND)=c_a*TT(MN)*Vaa(ML,ND); %*(-V_A(ML)-Hc*QL(ML)/RHOL)*Xaa(MN); % + end + % Main coefficients for energy transport is here: + CTh(ML,ND)=((c_L*TT(MN)-WW(ML,ND))*RHOL-(c_L*TT(MN)+L(MN))*RHOV(MN)-c_a*RHODA(MN)*TT(MN))*DTheta_LLh(ML,ND) ... + +(c_L*TT(MN)+L(MN))*Theta_g(ML,ND)*DRHOVh(MN)+c_a*TT(MN)*Theta_g(ML,ND)*Xah(MN);%;%+c_a*TT(MN)*Theta_g(ML,ND)*Xah(MN) + CTT(ML,ND)=c_unsat(ML,ND)+(c_L*TT(MN)+L(MN))*Theta_g(ML,ND)*DRHOVT(MN)+c_a*TT(MN)*Theta_g(ML,ND)*XaT(MN) ... + +((c_L*TT(MN)-WW(ML,ND))*RHOL-(c_L*TT(MN)+L(MN))*RHOV(MN)-c_a*RHODA(MN)*TT(MN))*DTheta_LLT(ML,ND); % %+c_a*TT(MN)*Theta_g(ML,ND)*XaT(MN)"+" + CTa(ML,ND)=TT(MN)*Theta_V(ML,ND)*c_a*Xaa(MN);% There is not this term in Milly's work. + + KTh(ML,ND)=L(MN)*(D_V(ML,ND)+D_Vg(ML))*DRHOVh(MN)+c_L*TT(MN)*RHOL*Khh(ML,ND)+Kcah(ML,ND); %; %+Kcah(ML,ND) + KTT(ML,ND)=Lambda_eff(ML,ND)+c_L*TT(MN)*RHOL*KhT(ML,ND)+KcaT(ML,ND)+L(MN)*(D_V(ML,ND)*Eta(ML,ND)+D_Vg(ML))*DRHOVT(MN); %;%; % Revised from: "Lambda_eff(ML,ND)+c_L*TT(MN)*RHOL*KhT(ML,ND);" + KTa(ML,ND)=Kcva(ML,ND)+Kcaa(ML,ND)+c_L*TT(MN)*RHOL*Kha(ML,ND); % There is not this term in Milly's work. + + if DVa_Switch==1 + VTh(ML,ND)=c_L*TT(MN)*RHOL*Vvh(ML,ND)+Ccah(ML,ND)-L(MN)*V_A(ML)*DRHOVh(MN); + VTT(ML,ND)=c_L*TT(MN)*RHOL*VvT(ML,ND)+CcaT(ML,ND)-L(MN)*V_A(ML)*DRHOVT(MN)-(c_L*(QL(ML)+QV(ML))+c_a*Qa(ML)-2.369*QV(ML)); + else + VTh(ML,ND)=c_L*TT(MN)*RHOL*Vvh(ML,ND)+Ccah(ML,ND); + VTT(ML,ND)=c_L*TT(MN)*RHOL*VvT(ML,ND)+CcaT(ML,ND)-(c_L*(QL(ML)+QV(ML))+c_a*Qa(ML)-2.369*QV(ML)); + end + + VTa(ML,ND)=Ccaa(ML,ND); %c_a*TT(MN)*Vaa(ML,ND); + + CTg(ML,ND)=(c_L*RHOL+c_a*Hc*RHODA(MN))*KL_h(ML,ND)*TT(MN); %;;% % Revised from "c_L*T(MN)*KL_h(ML,ND)" + end +end diff --git a/src/Enrgy_BC.m b/src/Enrgy_BC.m new file mode 100644 index 00000000..adec41a8 --- /dev/null +++ b/src/Enrgy_BC.m @@ -0,0 +1,39 @@ +function [RHS,C5,C5_a]=Enrgy_BC(RHS,KT,NN,c_L,RHOL,QMB,SH,Precip,L,L_ts,NBCTB,NBCT,BCT,BCTB,DSTOR0,Delt_t,T,Ts,Ta,EVAP,Rn,C5,C5_a) +global Tss Ts1 Taa Tcc Tsss +%%%%%%%%% Apply the bottom boundary condition called for by NBCTB %%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if NBCTB==1 + RHS(1)=BCTB; + C5(1,1)=1; + RHS(2)=RHS(2)-C5(1,2)*RHS(1); + C5(1,2)=0; + C5_a(1)=0; +elseif NBCTB==2 + RHS(1)=RHS(1)+BCTB; +else + C5(1,1)=C5(1,1)-c_L*RHOL*QMB(KT); +end + +%%%%%%%%%% Apply the surface boundary condition called by NBCT %%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if NBCT==1 + if ~isnan(Tss) + RHS(NN)=Tss;%BCT;%30; + elseif ~isnan(Tcc) + RHS(NN)=Tcc; + elseif ~isnan(Taa) + RHS(NN)=Taa; + else + RHS(NN)=Tsss(KT); + end + C5(NN,1)=1; + RHS(NN-1)=RHS(NN-1)-C5(NN-1,2)*RHS(NN); + C5(NN-1,2)=0; + C5_a(NN-1)=0; +elseif NBCT==2 + RHS(NN)=RHS(NN)-BCT; +else + L_ts(KT)=L(NN); + RHS(NN)=RHS(NN)+Rn(KT)-RHOL*L_ts(KT)*EVAP(KT)-SH(KT)+RHOL*c_L*(Ta(KT)*Precip(KT)+DSTOR0*T(NN)/Delt_t); +end + diff --git a/src/Enrgy_Bndry_Flux.m b/src/Enrgy_Bndry_Flux.m new file mode 100644 index 00000000..9f5388b9 --- /dev/null +++ b/src/Enrgy_Bndry_Flux.m @@ -0,0 +1,4 @@ +function [QET,QEB]=Enrgy_Bndry_Flux(SAVE,TT,NN) + +QET=SAVE(2,1,2)-SAVE(2,2,2)*TT(NN-1)-SAVE(2,3,2)*TT(NN); +QEB=-SAVE(1,1,2)+SAVE(1,2,2)*TT(1)+SAVE(1,3,2)*TT(2); \ No newline at end of file diff --git a/src/Enrgy_EQ.m b/src/Enrgy_EQ.m new file mode 100644 index 00000000..0658cb67 --- /dev/null +++ b/src/Enrgy_EQ.m @@ -0,0 +1,67 @@ +function [RHS,C5,SAVE]=Enrgy_EQ(C1,C2,C3,C4,C4_a,C5,C6_a,C6,C7,NL,NN,Delt_t,T,h,hh,P_g,P_gg,Thmrlefc,Soilairefc) + +if Soilairefc && Thmrlefc + RHS(1)=-C7(1)+(C2(1,1)*T(1)+C2(1,2)*T(2))/Delt_t ... + -(C1(1,1)/Delt_t+C4(1,1))*hh(1)-(C1(1,2)/Delt_t+C4(1,2))*hh(2) ... + -(C3(1,1)/Delt_t+C6(1,1))*P_gg(1)-(C3(1,2)/Delt_t+C6(1,2))*P_gg(2) ... + +(C3(1,1)/Delt_t)*P_g(1)+(C3(1,2)/Delt_t)*P_g(2) ... + +(C1(1,1)/Delt_t)*h(1)+(C1(1,2)/Delt_t)*h(2); + + for ML=2:NL + ARG1=C3(ML-1,2)/Delt_t; + ARG2=C3(ML,1)/Delt_t; + ARG3=C3(ML,2)/Delt_t; + + ARG4=C1(ML-1,2)/Delt_t; + ARG5=C1(ML,1)/Delt_t; + ARG6=C1(ML,2)/Delt_t; + + RHS(ML)=-C7(ML)+(C2(ML-1,2)*T(ML-1)+C2(ML,1)*T(ML)+C2(ML,2)*T(ML+1))/Delt_t ... + -(ARG1+C6_a(ML-1))*P_gg(ML-1)-(ARG2+C6(ML,1))*P_gg(ML)-(ARG3+C6(ML,2))*P_gg(ML+1) ... + -(ARG4+C4_a(ML-1))*hh(ML-1)-(ARG5+C4(ML,1))*hh(ML)-(ARG6+C4(ML,2))*hh(ML+1) ... + +ARG1*P_g(ML-1)+ARG2*P_g(ML)+ARG3*P_g(ML+1) ... + +ARG4*h(ML-1)+ARG5*h(ML)+ARG6*h(ML+1); + end + + RHS(NN)=-C7(NN)+(C2(NN-1,2)*T(NN-1)+C2(NN,1)*T(NN))/Delt_t ... + -(C3(NN-1,2)/Delt_t+C6_a(NN-1))*P_gg(NN-1)-(C3(NN,1)/Delt_t+C6(NN,1))*P_gg(NN) ... + -(C1(NN-1,2)/Delt_t+C4_a(NN-1))*hh(NN-1)-(C1(NN,1)/Delt_t+C4(NN,1))*hh(NN) ... + +(C3(NN-1,2)/Delt_t)*P_g(NN-1)+(C3(NN,1)/Delt_t)*P_g(NN) ... + +(C1(NN-1,2)/Delt_t)*h(NN-1)+(C1(NN,1)/Delt_t)*h(NN); +elseif ~Soilairefc && Thmrlefc + RHS(1)=-C7(1)+(C2(1,1)*T(1)+C2(1,2)*T(2))/Delt_t ... + -(C1(1,1)/Delt_t+C4(1,1))*hh(1)-(C1(1,2)/Delt_t+C4(1,2))*hh(2) ... + +(C1(1,1)/Delt_t)*h(1)+(C1(1,2)/Delt_t)*h(2); + for ML=2:NL + ARG4=C1(ML-1,2)/Delt_t; + ARG5=C1(ML,1)/Delt_t; + ARG6=C1(ML,2)/Delt_t; + + RHS(ML)=-C7(ML)+(C2(ML-1,2)*T(ML-1)+C2(ML,1)*T(ML)+C2(ML,2)*T(ML+1))/Delt_t ... + -(ARG4+C4(ML-1,2))*hh(ML-1)-(ARG5+C4(ML,1))*hh(ML)-(ARG6+C4(ML,2))*hh(ML+1) ... + +ARG4*h(ML-1)+ARG5*h(ML)+ARG6*h(ML+1); + end + + RHS(NN)=-C7(NN)+(C2(NN-1,2)*T(NN-1)+C2(NN,1)*T(NN))/Delt_t ... + -(C1(NN-1,2)/Delt_t+C4(NN-1,2))*hh(NN-1)-(C1(NN,1)/Delt_t+C4(NN,1))*hh(NN) ... + +(C1(NN-1,2)/Delt_t)*h(NN-1)+(C1(NN,1)/Delt_t)*h(NN); +else + RHS(1)=-C7(1)+(C2(1,1)*T(1)+C2(1,2)*T(2))/Delt_t; + for ML=2:NL + RHS(ML)=-C7(ML)+(C2(ML-1,2)*T(ML-1)+C2(ML,1)*T(ML)+C2(ML,2)*T(ML+1))/Delt_t; + end + RHS(NN)=-C7(NN)+(C2(NN-1,2)*T(NN-1)+C2(NN,1)*T(NN))/Delt_t; +end + +for MN=1:NN + for ND=1:2 + C5(MN,ND)=C2(MN,ND)/Delt_t+C5(MN,ND); + end +end + +SAVE(1,1,2)=RHS(1); +SAVE(1,2,2)=C5(1,1); +SAVE(1,3,2)=C5(1,2); +SAVE(2,1,2)=RHS(NN); +SAVE(2,2,2)=C5(NN-1,2); +SAVE(2,3,2)=C5(NN,1); \ No newline at end of file diff --git a/src/Enrgy_MAT.m b/src/Enrgy_MAT.m new file mode 100644 index 00000000..39a6d091 --- /dev/null +++ b/src/Enrgy_MAT.m @@ -0,0 +1,57 @@ +function [C1,C2,C3,C4,C4_a,C5,C5_a,C6,C6_a,C7]=Enrgy_MAT(CTh,CTT,CTa,KTh,KTT,KTa,CTg,VTT,VTh,VTa,DeltZ,NL,NN,Soilairefc) + +for MN=1:NN % Clean the space in C1-7 every iteration,otherwise, in *.PARM files, + for ND=1:2 % C1-7 will be mixed up with pre-storaged data, which will cause extremly crazy for computation, which exactly results in NAN. + C1(MN,ND)=0; + C2(MN,ND)=0; + C3(MN,ND)=0; + C4_a(MN)=0; + C5_a(MN)=0; + C6_a(MN)=0; + C4(MN,ND)=0; + C5(MN,ND)=0; + C6(MN,ND)=0; + C7(MN)=0; + end +end + +for ML=1:NL + C1(ML,1)=C1(ML,1)+CTh(ML,1)*DeltZ(ML)/2; + C1(ML+1,1)=C1(ML+1,1)+CTh(ML,2)*DeltZ(ML)/2; + + C2(ML,1)=C2(ML,1)+CTT(ML,1)*DeltZ(ML)/2; + C2(ML+1,1)=C2(ML+1,1)+CTT(ML,2)*DeltZ(ML)/2;% + + C4ARG1=(KTh(ML,1)+KTh(ML,2))/(2*DeltZ(ML)); %sqrt(KTh(ML,1)*KTh(ML,2))/(DeltZ(ML));% + C4ARG2_1=VTh(ML,1)/3+VTh(ML,2)/6; + C4ARG2_2=VTh(ML,1)/6+VTh(ML,2)/3; + C4(ML,1)=C4(ML,1)+C4ARG1-C4ARG2_1; + C4(ML,2)=C4(ML,2)-C4ARG1-C4ARG2_2; + C4(ML+1,1)=C4(ML+1,1)+C4ARG1+C4ARG2_2; + C4_a(ML)=-C4ARG1+C4ARG2_1; + + C5ARG1=(KTT(ML,1)+KTT(ML,2))/(2*DeltZ(ML)); %sqrt(KTT(ML,1)*KTT(ML,2))/(DeltZ(ML));% + C5ARG2_1=VTT(ML,1)/3+VTT(ML,2)/6; + C5ARG2_2=VTT(ML,1)/6+VTT(ML,2)/3; + C5(ML,1)=C5(ML,1)+C5ARG1-C5ARG2_1; + C5(ML,2)=C5(ML,2)-C5ARG1-C5ARG2_2; + C5(ML+1,1)=C5(ML+1,1)+C5ARG1+C5ARG2_2; + C5_a(ML)=-C5ARG1+C5ARG2_1; + + if Soilairefc==1 + C3(ML,1)=C3(ML,1)+CTa(ML,1)*DeltZ(ML)/2; + C3(ML+1,1)=C3(ML+1,1)+CTa(ML,2)*DeltZ(ML)/2; + + C6ARG1=(KTa(ML,1)+KTa(ML,2))/(2*DeltZ(ML));%sqrt(KTa(ML,1)*KTa(ML,2))/(DeltZ(ML)); % + C6ARG2_1=VTa(ML,1)/3+VTa(ML,2)/6; + C6ARG2_2=VTa(ML,1)/6+VTa(ML,2)/3; + C6(ML,1)=C6(ML,1)+C6ARG1-C6ARG2_1; + C6(ML,2)=C6(ML,2)-C6ARG1-C6ARG2_2; + C6(ML+1,1)=C6(ML+1,1)+C6ARG1+C6ARG2_2; + C6_a(ML)=-C6ARG1+C6ARG2_1; + end + + C7ARG=(CTg(ML,1)+CTg(ML,2))/2; %sqrt(CTg(ML,1)*CTg(ML,2));% + C7(ML)=C7(ML)-C7ARG; + C7(ML+1)=C7(ML+1)+C7ARG; +end \ No newline at end of file diff --git a/src/Enrgy_Solve.m b/src/Enrgy_Solve.m new file mode 100644 index 00000000..cd198fa9 --- /dev/null +++ b/src/Enrgy_Solve.m @@ -0,0 +1,18 @@ +function [TT,CHK,RHS,C5]= Enrgy_Solve(C5,C5_a,TT,NN,NL,RHS) + +RHS(1)=RHS(1)/C5(1,1); + +for ML=2:NN + C5(ML,1)=C5(ML,1)-C5_a(ML-1)*C5(ML-1,2)/C5(ML-1,1); + RHS(ML)=(RHS(ML)-C5_a(ML-1)*RHS(ML-1))/C5(ML,1); +end + +for ML=NL:-1:1 + RHS(ML)=RHS(ML)-C5(ML,2)*RHS(ML+1)/C5(ML,1); +end + +for MN=1:NN + CHK(MN)=abs(RHS(MN)-TT(MN)); + %CHK(MN)=abs((RHS(MN)-TT(MN))/TT(MN)); % + TT(MN)=RHS(MN); +end \ No newline at end of file diff --git a/src/Enrgy_sub.m b/src/Enrgy_sub.m new file mode 100644 index 00000000..bb78759d --- /dev/null +++ b/src/Enrgy_sub.m @@ -0,0 +1,39 @@ +function Enrgy_sub +global TT MN NN BCTB +global NL hh DeltZ P_gg +global CTh CTT CTa KTh KTT KTa CTg Vvh VvT Vaa Kaa +global c_a c_L RHOL DRHOVT DRHOVh RHOV Hc RHODA DRHODAz L WW +global Theta_V Theta_g QL V_A +global KL_h KL_T D_Ta Lambda_eff c_unsat D_V Eta D_Vg Xah XaT Xaa DTheta_LLT Soilairefc +global DTheta_LLh DVa_Switch +global Khh KhT Kha KLhBAR KLTBAR DTDBAR DhDZ DTDZ DPgDZ Beta_g DEhBAR DETBAR QV Qa RHOVBAR EtaBAR +global C1 C2 C3 C4 C5 C6 C7 C4_a C5_a C6_a VTT VTh VTa +global Delt_t RHS T h P_g SAVE Thmrlefc +global QMB SH Precip KT +global NBCTB NBCT BCT DSTOR0 Ts Ta L_ts +global EVAP Rn CHK QET QEB + +for MN=1:NN + %if isreal(TT(MN))==0 + TT(MN)=real(TT(MN)); + % end +end + +% EnrgyPARM; +[CTh,CTT,CTa,KTh,KTT,KTa,VTT,VTh,VTa,CTg,QL,QV,Qa,KLhBAR,KLTBAR,DTDBAR,DhDZ,DTDZ,DPgDZ,Beta_g,DEhBAR,DETBAR,RHOVBAR,EtaBAR]=EnrgyPARM(NL,hh,TT,DeltZ,P_gg,Kaa,Vvh,VvT,Vaa,c_a,c_L,DTheta_LLh,RHOV,Hc,RHODA,DRHODAz,L,WW,RHOL,Theta_V,DRHOVh,DRHOVT,KL_h,D_Ta,KL_T,D_V,D_Vg,DVa_Switch,Theta_g,QL,V_A,Lambda_eff,c_unsat,Eta,Xah,XaT,Xaa,DTheta_LLT,Soilairefc,Khh,KhT,Kha,KLhBAR,KLTBAR,DTDBAR,DhDZ,DTDZ,DPgDZ,Beta_g,DEhBAR,DETBAR,QV,Qa,RHOVBAR,EtaBAR); +% Enrgy_MAT; +[C1,C2,C3,C4,C4_a,C5,C5_a,C6,C6_a,C7]=Enrgy_MAT(CTh,CTT,CTa,KTh,KTT,KTa,CTg,VTT,VTh,VTa,DeltZ,NL,NN,Soilairefc); +% Enrgy_EQ; +[RHS,C5,SAVE]=Enrgy_EQ(C1,C2,C3,C4,C4_a,C5,C6_a,C6,C7,NL,NN,Delt_t,T,h,hh,P_g,P_gg,Thmrlefc,Soilairefc); +% Enrgy_BC; +[RHS,C5,C5_a]=Enrgy_BC(RHS,KT,NN,c_L,RHOL,QMB,SH,Precip,L,L_ts,NBCTB,NBCT,BCT,BCTB,DSTOR0,Delt_t,T,Ts,Ta,EVAP,Rn,C5,C5_a); +% Enrgy_Solve; +[TT,CHK,RHS,C5]= Enrgy_Solve(C5,C5_a,TT,NN,NL,RHS); +for MN=1:NN + % if isreal(TT(MN))==0 + TT(MN)=real(TT(MN)); + % end +end + +% Enrgy_Bndry_Flux; +[QET,QEB]=Enrgy_Bndry_Flux(SAVE,TT,NN); \ No newline at end of file diff --git a/src/EvapTransp_Cal.m b/src/EvapTransp_Cal.m new file mode 100644 index 00000000..b6315827 --- /dev/null +++ b/src/EvapTransp_Cal.m @@ -0,0 +1,135 @@ +function EvapTransp_Cal +global PT_PM_0 PT_PM_VEG T_act PME +% Set constants +sigma = 4.903e-9; % Stefan Boltzmann constant MJ.m-2.day-1 FAO56 pag 74 +lambdav = 2.45; % latent heat of evaporation [MJ.kg-1] FAO56 pag 31 +% Gieske 2003 pag 74 Eq33/Dingman 2002 +% lambda=2.501-2.361E-3*t, with t temperature evaporative surface (?C) +% see script Lambda_function_t.py +Gsc = 0.082; % solar constant [MJ.m-2.min-1] FAO56 pag 47 Eq28 +eps = 0.622; % ratio molecular weigth of vapour/dry air FAO56 p26 BOX6 +R = 0.287; % specific gas [kJ.kg-1.K-1] FAO56 p26 box6 +Cp = 1.013E-3; % specific heat at cte pressure [MJ.kg-1.?C-1] FAO56 p26 box6 +k = 0.41; % karman's cte [] FAO 56 Eq4 +Z=521; % altitute of the location(m) +as=0.25; % regression constant, expressing the fraction of extraterrestrial radiation FAO56 pag50 +bs=0.5; +alfa=0.23; % albeo of vegetation set as 0.23 +z_m=10; % observation height of wind speed; 10m +% input meterology data +Mdata=xlsread('C:\Users\ÍőÔĆö­\Desktop\STEMMUS EXERCISE -I_O Optimize\Meterology data','sheet1','B5:AA5860'); +Ta=Mdata(:,1); % air temperature +RH=Mdata(:,2); % relative humidity +Ws=Mdata(:,3); % wind speed at 2m +Precip=Mdata(:,4)./18000; % precipitation +Ts1=Mdata(:,5); % soil temperature at 20cm +Ts2=Mdata(:,6); % soil temperature at 40cm +Ts3=Mdata(:,7); % soil temperature at 60cm +SMC1=Mdata(:,8); % soil moisture content at 20cm +SMC2=Mdata(:,9); % soil moisture content at 40cm +SMC3=Mdata(:,10); % soil moisture content at 60cm +G1=Mdata(:,11); % soil heat flux 1 +G2=Mdata(:,12); % heat heat flux 2 +G3=Mdata(:,13); % soil heat flux 3 +Rn=Mdata(:,14); % net rediation +LAI=Mdata(:,26); % leaf area index +% Calculation procedure +for iN=1:tS+1 + %% AIR PARAMETERS CALCULATION + % compute DELTA - SLOPE OF SATURATION VAPOUR PRESSURE CURVE + % [kPa.?C-1] + % FAO56 pag 37 Eq13 + DELTA(iN) = 4098*(0.6108*exp(17.27*Ta(iN)/(Ta(iN)+237.3)))/(Ta(iN)+237.3)^2; + % ro_a - MEAN AIR DENSITY AT CTE PRESSURE + % [kg.m-3] + % FAO56 pag26 box6 + Pa=101.3*((293-0.0065*Z)/293)^5.26; + ro_a(iN) = Pa/(R*1.01*(Tm(iN)+273.16)); + % compute e0_Ta - saturation vapour pressure at actual air temperature + % [kPa] + % FAO56 pag36 Eq11 + e0_Tm(iN) = 0.6108*exp(17.27*Tm(iN)/(Tm(iN)+237.3)); + + % compute e_a - ACTUAL VAPOUR PRESSURE + % [kPa] + % FAO56 pag74 Eq54 + e_a(iN) = e0_Tm(iN)*RHa(iN)/100; + % gama - PSYCHROMETRIC CONSTANT + % [kPa.?C-1] + % FAO56 pag31 eq8 + gama = 0.664742*1e-3*Pa; + + %% RADIATION PARAMETERS CALCULATION + % compute dr - inverse distance to the sun + % [rad] + % FAO56 pag47 Eq23 + dr(iN) = 1+0.033*cos(2*pi()*JN(iN)/365); + + % compute delta - solar declination + % [rad] + % FAO56 pag47 Eq24 + delta(iN) = 0.409*sin(2*pi()*JN(iN)/365-1.39); + + % compute compute ws - sunset hour angle + % [rad] + % FAO56 pag48 Eq31 + Ws(iN)=acos((-1)*tan(0.599)*tan(delta(iN))); + + % compute Ra - extraterrestrial radiation + % [MJ.m-2.day-1] + % FAO56 pag47 Eq28 + Ra(iN)=24*60/pi()*Gsc*dr(iN)*(Ws(iN)*sin(0.599)*sin(delta(iN))+cos(0.599)*cos(delta(iN))*sin(Ws(iN))); + %Ra_Watts.append(Ra[j]*24/0.08864) + % compute Rs0 - clear-sky solar (shortwave) radiation + % [MJ.m-2.day-1] + % FAO56 pag51 Eq37 + Rs0(iN) = (0.75+2E-5*Z)*Ra(iN); + + % compute Rs - SHORTWAVE RADIATION + % [MJ.m-2.day-1] + % FAO56 pag51 Eq37 + Rs(iN)=(as+bs*n(iN)/N(iN))*Ra(iN); + + % compute Rns - NET SHORTWAVE RADIATION + % [MJ.m-2.day-1] + % FAO56 pag51 Eq37 + % for each type of vegetation, crop and soil (albedo dependent) + Rns(iN)= (1-alfa)*Rs(iN); + % compute Rnl - NET LONGWAVE RADIATION + % [MJ.m-2.day-1] + % FAO56 pag51 Eq37 and pag74 of hourly computing + Rnl(iN)=(sigma*(Tm(iN) + 273.16)^4*(0.34-0.14*sqrt(e_a(iN)))*(1.35*Rs(iN)/Rs0(iN)-0.35)); + Rn(iN) = Rns(iN) - Rnl(iN); + %% SURFACE RESISTANCE PARAMETERS CALCULATION + + % r_s - SURFACE RESISTANCE + % [s.m-1] + % VEG: Dingman pag 208 (canopy conductance) (equivalent to FAO56 pag21 Eq5) + r_s_VEG(iN) = rl(iN)/LAI_act(iN); + + % SOIL: equation 20 of van de Griend and Owe, 1994 + %Theta_LL_sur(KT)=Theta_LL(NL,2); + % [m.s-1] + % FAO56 pag56 eq47 + + u_2(iN) = u_z_m(iN)*4.87/log(67.8*z_m-5.42); + + % r_a - AERODYNAMIC RESISTANCE + % [s.m-1] + % FAO56 pag20 eq4- (d - zero displacement plane, z_0m - roughness length momentum transfer, z_0h - roughness length heat and vapour transfer, [m], FAO56 pag21 BOX4 + r_a_VEG(iN) = log((2-(2*h_v(iN)/3))/(0.123*h_v(iN)))*log((2-(2*h_v(iN)/3))/(0.0123*h_v(iN)))/((k^2)*u_2(iN)); + % r_a of SOIL + % Liu www.hydrol-earth-syst-sci.net/11/769/2007/ + % equation for neutral conditions (eq. 9) + % only function of ws, it is assumed that roughness are the same for any type of soil + % r_a_SOIL(iN) = log((2.0)/0.0058)*log(2.0/0.0058)/((k^2)*u_2(iN)); + + % PT/PE - Penman-Montheith + % mm.day-1 + % FAO56 pag19 eq3 + PT_PM_VEG(iN) = (DELTA(iN)*Rn(iN)+86400*ro_a(iN)*Cp*(e0_Tm(iN)-e_a(iN))/r_a_VEG(iN))/(lambdav*(DELTA(iN) + gama*(1+r_s_VEG(iN)/r_a_VEG(iN)))); + % reference et ET0 + PT_PM_0(iN) = (0.408*DELTA(iN)*Rn(iN)+gama*900/(Tm(iN)+273)*(e0_Tm(iN)-e_a(iN))*u_2(iN))/(DELTA(iN) + gama*(1+0.34*u_2(iN))); + T_act(iN)=PT_PM_0(iN)*Kcb(iN); + PME(iN)=DELTA(iN)*Rn(iN)/(lambdav*(DELTA(iN) + gama)); +end diff --git a/src/Evap_Cal.m b/src/Evap_Cal.m new file mode 100644 index 00000000..e67b5309 --- /dev/null +++ b/src/Evap_Cal.m @@ -0,0 +1,276 @@ +%function [Evap,EVAP,Trap,bx,Srt]= Evap_Cal(KT,lEstot,lEctot,PSIs,PSI,rsss,rrr,rxx,rwuef) +function [Evap,EVAP,Trap,bx,Srt]= Evap_Cal(bx,Srt,DeltZ,TIME,RHOV,Ta,HR_a,U,Theta_LL,Ts,Rv,g,NL,NN,KT,Evaptranp_Cal,Coefficient_n,Coefficient_Alpha,Theta_r,Theta_s,DURTN,PME,PT_PM_0,hh,rwuef,J,lEstot,lEctot) +global LAI Rn G Ta1 Ts1 h_v rl_min RWU +if (isnan(lEstot) || isnan(lEctot)||lEstot>800) +%HR_a(KT)=HR(KT); +Ta(KT)=Ta1(KT); +Ts(KT)=Ts1(KT); +if LAI(KT)<=2 + LAI_act(KT)=LAI(KT); +elseif LAI(KT)<=4 + LAI_act(KT)=2; +else + LAI_act(KT)=0.5*LAI(KT); +end +Tao=0.56; %light attenual coefficient + % Set constants + sigma = 4.903e-9; % Stefan Boltzmann constant MJ.m-2.day-1 FAO56 pag 74 + lambdav = 2.45; % latent heat of evaporation [MJ.kg-1] FAO56 pag 31 + % Gieske 2003 pag 74 Eq33/DKTgman 2002 + % lambda=2.501-2.361E-3*t, with t temperature evaporative surface (?C) + % see script Lambda_function_t.py + Gsc = 0.082; % solar constant [MJ.m-2.mKT-1] FAO56 pag 47 Eq28 + eps = 0.622; % ratio molecular weigth of vapour/dry air FAO56 p26 BOX6 + R = 0.287; % specific gas [kJ.kg-1.K-1] FAO56 p26 box6 + Cp = 1.013E-3; % specific heat at cte pressure [MJ.kg-1.?C-1] FAO56 p26 box6 + k = 0.41; % karman's cte [] FAO 56 Eq4 + Z=521; % altitute of the location(m) + as=0.25; % regression constant, expressKTg the fraction of extraterrestrial radiation FAO56 pag50 + bs=0.5; + alfa=0.23; % albeo of vegetation set as 0.23 + z_m=2; % observation height of wKTd speed; 10m + Lz=240*pi()/180; % latitude of Beijing time zone west of Greenwich + Lm=252*pi()/180; % latitude of Local time, west of Greenwich + % albedo of soil calculation; + Theta_LL_sur(KT)=Theta_LL(NL,2); + if Theta_LL_sur(KT)<0.1 + alfa_s(KT)=0.25; + elseif Theta_LL_sur(KT)<0.25 + alfa_s(KT)=0.35-Theta_LL_sur(KT); + else + alfa_s(KT)=0.1; + end + %JN(KT)=fix(TIME/3600/24)+174; % day number + % n=[4.8 0 10.6 2.9 13 12.3 9.3 10.9 2.6 0 4.1 0 11.9 11.4 8.1 0 0 0 4.7 5.4 10.2 0 0 12.1 0 0 5.4 11.1 0 1.5 0.7 0 2.5 8.7 6 3.9 0 1.2 10.5 8.6 7.3 8.8 9.8 10.8 8.6 0 4.6 8.9 3.2 3 9 7.9 4 7.2 6.3 5.1 9.2 8.9 9.7 8.2 4.5 3.1 0 4.9 8.1 0 0 11.6 11.2 7.7 7.2 0 2.9 0 3 9 0 0 8 9.1 4.5 4.7 11 11.2 9.7 8.8 7.3 0 0 0 4.4 0 0 3.6 0 0 8.6 0.8 8.6 0 7.4 3.1]; + % h_v=[0.047333333 0.071 0.094666667 0.118333333 0.142 0.165666667 0.189333333 0.213 0.236666667 0.260333333 0.284 0.307666667 0.331333333 0.355 0.390909091 0.426818182 0.462727273 0.498636364 0.534545455 0.570454545 0.606363636 0.642272727 0.678181818 0.714090909 0.75 0.807142857 0.864285714 0.921428571 0.978571429 1.035714286 1.092857143 1.15 1.21625 1.2825 1.34875 1.415 1.48125 1.5475 1.61375 1.68 1.715 1.75 1.785 1.82 1.855 1.89 1.925 1.96 1.995 2.03 2.065 2.1 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135 2.135]; + % rl_min=[139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 121 121 121 121 121 121 121 121 121 121 121 121 121 121 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 139 239 239 239 239 239 239]; + %DayNum=fix(TIME/3600/24)+1; + % n(KT)=n(DayNum); + % h_v(KT)=h_v(DayNum); + % rl_min(KT)=rl_min(DayNum); + % 6-23 TO 7-31 + % Calculation procedure + %% AIR PARAMETERS CALCULATION + % compute DELTA - SLOPE OF SATURATION VAPOUR PRESSURE CURVE + % [kPa.?C-1] + % FAO56 pag 37 Eq13 + DELTA(KT) = 4098*(0.6108*exp(17.27*Ta1(KT)/(Ta1(KT)+237.3)))/(Ta1(KT)+237.3)^2; + % ro_a - MEAN AIR DENSITY AT CTE PRESSURE + % [kg.m-3] + % FAO56 pag26 box6 + Pa=101.3*((293-0.0065*Z)/293)^5.26; + ro_a(KT) = Pa/(R*1.01*(Ta1(KT)+273.16)); + % compute e0_Ta - saturation vapour pressure at actual air temperature + % [kPa] + % FAO56 pag36 Eq11 + e0_Ta(KT) = 0.6108*exp(17.27*Ta1(KT)/(Ta1(KT)+237.3)); + e0_Ts(KT) = 0.6108*exp(17.27*Ts1(KT)/(Ts1(KT)+237.3)); + % compute e_a - ACTUAL VAPOUR PRESSURE + % [kPa] + % FAO56 pag74 Eq54 + e_a(KT) = e0_Ta(KT)*HR_a(KT); + e_a_Ts(KT) = e0_Ts(KT)*HR_a(KT); + + % gama - PSYCHROMETRIC CONSTANT + % [kPa.?C-1] + % FAO56 pag31 eq8 + gama = 0.664742*1e-3*Pa; + +% Calculation of net radiation + % Rn_SOIL(KT) = Rns_SOIL(KT) - RnL(KT); % net radiation for vegetation + Rn_SOIL(KT) =Rn(KT)*exp(-1*(Tao*LAI(KT))); % net radiation for soil + Rn_vege(KT) =Rn(KT)-Rn_SOIL(KT); % net radiation for vegetation + + %% SURFACE RESISTANCE PARAMETERS CALCULATION + R_a=0.81;R_b=0.004*24*11.6;R_c=0.05; + % R_fun(KT)=((R_b*Rns(KT)+R_c)/(R_a*(R_b*Rns(KT)+1))); + rl(KT)=rl_min(KT)/((R_b*Rn(KT)+R_c)/(R_a*(R_b*Rn(KT)+1))); + + % r_s - SURFACE RESISTANCE + % [s.m-1] + % VEG: Dingman pag 208 (canopy conductance) (equivalent to FAO56 pag21 Eq5) + r_s_VEG(KT) = rl(KT)/LAI_act(KT); + + % SOIL: equation 20 of van de Griend and Owe, 1994 + %Theta_LL_sur(KT)=Theta_LL(NL,2); + + r_s_SOIL(KT)=10.0*exp(0.3563*100.0*(0.25-Theta_LL_sur(KT))); % 0.25 set as minmum soil moisture for potential evaporation + %r_s_SOIL(i)=10.0*exp(0.3563*100.0*(fc(i)-por(i))); + % correction wKTdspeed measurement and scalKTg at h+2m + % [m.s-1] + % FAO56 pag56 eq47 + + % r_a - AERODYNAMIC RESISTANCE + % [s.m-1] + % FAO56 pag20 eq4- (d - zero displacement plane, z_0m - roughness length momentum transfer, z_0h - roughness length heat and vapour transfer, [m], FAO56 pag21 BOX4 + r_a_VEG(KT) = log((2-(2*h_v(KT)/3))/(0.123*h_v(KT)))*log((2-(2*h_v(KT)/3))/(0.0123*h_v(KT)))/((k^2)*U(KT))*100; + % r_a of SOIL + % Liu www.hydrol-earth-syst-sci.net/11/769/2007/ + % equation for neutral conditions (eq. 9) + % only function of ws, it is assumed that roughness are the same for any type of soil + RHOV_sur(KT)=RHOV(NN); + Theta_LL_sur(KT)=Theta_LL(NL,2); + + P_Va(KT)=0.611*exp(17.27*Ta1(KT)/(Ta1(KT)+237.3))*HR_a(KT); %The aTaospheric vapor pressure (KPa) (1000Pa=1000.1000.g.100^-1.cm^-1.s^-2) + + RHOV_A(KT)=P_Va(KT)*1e4/(Rv*(Ta1(KT)+273.15)); % g.cm^-3; Rv-cm^2.s^-2.Cels^-1 + + z_ref=200; % cm The reference height of tempearature measurement (usually 2 m) + d0_disp=0; % cm The zero-plane displacement (=0 m) + z_srT=0.1; % cm The surface roughness for the heat flux (=0.001m) + VK_Const=0.41; % The von Karman constant (=0.41) + z_srm=0.1; % cm The surface roughness for momentum flux (=0.001m) + U_wind=198.4597; % The mean wKTd speed at reference height.(cm.s^-1) + + MO(KT)=((Ta1(KT)+273.15)*U(KT)^2)/(g*(Ta1(KT)-Ts1(KT))*log(z_ref/z_srm)); % Wind speed should be KT cm.s^-1, MO-cm; + + Zeta_MO(KT)=z_ref/MO(KT); + + if abs(Ta1(KT)-Ts1(KT))<=0.01 + Stab_m(KT)=0; + Stab_T(KT)=0; + elseif Ta1(KT)1 + Stab_T(KT)=5; + Stab_m(KT)=5; + else + Stab_T(KT)=5*Zeta_MO(KT); + Stab_m(KT)=5*Zeta_MO(KT); + end + end + + Velo_fric(KT)=U(KT)*VK_Const/(log((z_ref-d0_disp+z_srm)/z_srm)+Stab_m(KT)); + + Resis_a(KT)=((log((z_ref-d0_disp+z_srT)/z_srT)+Stab_T(KT))/(VK_Const*Velo_fric(KT)))*100; %(s.cm^-1) + r_a_SOIL(KT) = log((2.0)/0.0058)*log(2.0/0.0058)/((k^2)*U(KT))*100; %(s.m^-1) + + % PT/PE - Penman-Montheith + % mm.day-1 + % FAO56 pag19 eq3 + % VEG + PT_PM_VEG(KT) = (DELTA(KT)*(Rn_vege(KT))+ro_a(KT)*Cp*(e0_Ta(KT)-e_a(KT))/r_a_VEG(KT))/((DELTA(KT) + gama*(1+r_s_VEG(KT)/r_a_VEG(KT))))/1000000/lambdav; % mm s-1 + % reference et ET0 + %PT_PM_0(KT) = (0.408*DELTA(KT)*Rn(KT)+gama*900/(Ta(KT)+273)*(e0_Ta(KT)-e_a(KT))*u_2(KT))/(DELTA(KT) + gama*(1+0.34*u_2(KT))); + %T_act(KT)=PT_PM_0(KT)*Kcb(KT); + % for SOIL + PE_PM_SOIL(KT) = (DELTA(KT)*(Rn_SOIL(KT)-G(KT))+ro_a(KT)*Cp*(e0_Ta(KT)-e_a(KT))/r_a_SOIL(KT))/((DELTA(KT) + gama*(1+r_s_SOIL(KT)/r_a_SOIL(KT))))/1000000/lambdav; % mm s-1 + Evap(KT)=0.1*PE_PM_SOIL(KT); % transfer to second value + EVAP(KT,1)=Evap(KT); + Tp_t(KT)=0.1*PT_PM_VEG(KT); % transfer to second value + TP_t(KT,1)=Tp_t(KT); + % water stress function parameters + H1=-15;H2=-50;H4=-9000;H3L=-900;H3H=-500; + if Tp_t(KT)<0.02/3600 + H3=H3L; + elseif Tp_t(KT)>0.05/3600 + H3=H3H; + else + H3=H3H+(H3L-H3H)/(0.03/3600)*(0.05/3600-Tp_t(KT)); + end + + % piecewise linear reduction function + MN=0; + for ML=1:NL + for ND=1:2 + MN=ML+ND-1; + if hh(MN) >=H1, + alpha_h(ML,ND) = 0; + elseif hh(MN) >=H2, + alpha_h(ML,ND) = (H1-hh(MN))/(H1-H2); + elseif hh(MN) >=H3, + alpha_h(ML,ND) = 1; + elseif hh(MN) >=H4, + alpha_h(ML,ND) = (hh(MN)-H4)/(H3-H4); + else + alpha_h(ML,ND) = 0; + end + end + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%% Root lenth distribution %%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + Lm=50; + RL0=1; + r=9.48915E-07; % root growth rate cm/s + fr(KT)=RL0/(RL0+(Lm-RL0)*exp((-1)*(50))); + LR(KT)=Lm*fr(KT); + RL=300; + Elmn_Lnth=0; + + if LR(KT)<=1 + for ML=1:NL-1 % ignore the surface root water uptake 1cm + for ND=1:2 + MN=ML+ND-1; + bx(ML,ND)=0; + end + end + else + for ML=1:NL + Elmn_Lnth=Elmn_Lnth+DeltZ(ML); + if Elmn_Lnth=RL-LR(KT) && Elmn_Lnthlength(LAI_msr) + DayNum=length(LAI_msr); + end + DayHour=TIME/3600/24-DayNum+1; + if DayNum-1==0 + LAI(KT)=LAI_msr(DayNum); + else + LAI(KT)=(LAI_msr(DayNum)-LAI_msr(DayNum-1))*DayHour+LAI_msr(DayNum); + end + +% if AFTP_TIME<14 +% LAI(KT)=0; % emergance daynumber is 8 +% elseif AFTP_TIME<22 +% LAI(KT)=(AFTP_TIME-14)*0.45/8; % emergance daynumber is 8 +% else +% LAI(KT)=-0.0021*AFTP_TIME^2+0.299*AFTP_TIME-5.1074; +% end +% if LAI(KT)<0 +% LAI(KT)=0; +% end +LAI(KT)=LAI(KT); +if LAI(KT)<=2 + LAI_act(KT)=LAI(KT); +elseif LAI(KT)<=4 + LAI_act(KT)=2; +else + LAI_act(KT)=0.5*LAI(KT); +end +if TIME>=912*3600 && TIME<=3239*3600 +LAI_act(KT)=0.1*LAI_act(KT); +end +Tao=0.6; %light attenual coefficient + +if Evaptranp_Cal==1 + + % input data + n(J)=Coefficient_n(J); + Alpha(J)=Coefficient_Alpha(J); + m(J)=1-1/n(J); + AFTP_TIME=TIME/86400+27; %27 is the daynumber initial; + Theta_LL_sur1(KT)=Theta_LL(NL,2); + Theta_LL_sur2(KT)=Theta_LL(NL-14,2); + Theta_LL_sat(KT)=Theta_r(J)+(Theta_s(J)-Theta_r(J))/(1+abs(Alpha(J)*200)^n(J))^m(J); + coef_e=0.9; % 0.8-1.0 Johns 1982, Kemp 1997 + coef_p=2.15; %2-2.3 + Kcbmax=1.20; %for maize 1.10, for wheat 1.07 (allen 2009;duchemin 2006) + coef_kd=-0.7; %-0.84 for wheat + Kcb(KT)=Kcbmax*(1-exp(coef_kd*LAI(KT))); + if TIME-1e5 + if (Theta_LL_sur1(KT)/Theta_LL_sat(KT))>((Ep(KT)/coef_e)^0.5) + Es(KT)=Ep(KT); + else + Es(KT)=coef_e*(Theta_LL_sur1(KT)/Theta_LL_sat(KT))^coef_p; + end + else + Es(KT)=coef_e*((Theta_LL_sur1(KT)+Theta_LL_sur2(KT))/2/Theta_LL_sat(KT))^coef_p; + end + % generate E and T function with time + if t>0.264*24*3600 && t<0.736*24*3600 + + Tp(KT)=Kcb(KT)*ET(DayNum); % Tao LAI set as constant + Evap(KT)=(2.75*sin(2*pi()*t/3600/24-pi()/2)/86400)*Es(KT); % transfer to second value + EVAP(KT,1)=Evap(KT); + Tp_t(KT)=(2.75*sin(2*pi()*t/3600/24-pi()/2)/86400)*Tp(KT); % transfer to second value + TP_t(KT,1)=Tp_t(KT); + else + Tp(KT)=Kcb(KT)*ET(DayNum); % Tao LAI set as constant + % Tp(KT)=(1-exp(-1*(Tao*LAI(KT))))*ET(DayNum); % Tao LAI set as constant + Evap(KT)=(0.24/86400)*Es(KT); % transfer to second value + EVAP(KT,1)=Evap(KT); + Tp_t(KT)=(0.24/86400)*Tp(KT); % transfer to second value + TP_t(KT,1)=Tp_t(KT); + end + else + DayNum=fix(TIME/3600/24); + t=TIME-(DayNum-1)*86400; + ETp=0.1.*PME(14:115); + ET=0.1.*PT_PM_0(14:115); + Ep(KT)=(exp(-1*(Tao*LAI(KT))))*ETp(DayNum); + % Kcb(KT)=Kcbmax*(1-exp(coef_kd*LAI_act(KT))); + if hh(NN)>-1e5 + if (Theta_LL_sur1(KT)/Theta_LL_sat(KT))>((Ep(KT)/coef_e)^0.5) + Es(KT)=Ep(KT); + else + Es(KT)=coef_e*(Theta_LL_sur1(KT)/Theta_LL_sat(KT))^coef_p; + end + else + Es(KT)=coef_e*((Theta_LL_sur1(KT)+Theta_LL_sur2(KT))/2/Theta_LL_sat(KT))^coef_p; + end + % generate E and T function with time + if t>0.264*24*3600 && t<0.736*24*3600 + + Tp(KT)=Kcb(KT)*ET(DayNum); % Tao LAI set as constant + Evap(KT)=(2.75*sin(2*pi()*t/3600/24-pi()/2)/86400)*Es(KT); % transfer to second value + EVAP(KT,1)=Evap(KT); + Tp_t(KT)=(2.75*sin(2*pi()*t/3600/24-pi()/2)/86400)*Tp(KT); % transfer to second value + TP_t(KT,1)=Tp_t(KT); + else + Tp(KT)=Kcb(KT)*ET(DayNum); % Tao LAI set as constant + % Tp(KT)=(1-exp(-1*(Tao*LAI(KT))))*ET(DayNum); % Tao LAI set as constant + Evap(KT)=(0.24/86400)*Es(KT); % transfer to second value + EVAP(KT,1)=Evap(KT); + Tp_t(KT)=(0.24/86400)*Tp(KT); % transfer to second value + TP_t(KT,1)=Tp_t(KT); + end + end +else + % Set constants + sigma = 4.903e-9; % Stefan Boltzmann constant MJ.m-2.day-1 FAO56 pag 74 + lambdav = 2.45; % latent heat of evaporation [MJ.kg-1] FAO56 pag 31 + % Gieske 2003 pag 74 Eq33/DKTgman 2002 + % lambda=2.501-2.361E-3*t, with t temperature evaporative surface (?C) + % see script Lambda_function_t.py + Gsc = 0.082; % solar constant [MJ.m-2.mKT-1] FAO56 pag 47 Eq28 + eps = 0.622; % ratio molecular weigth of vapour/dry air FAO56 p26 BOX6 + R = 0.287; % specific gas [kJ.kg-1.K-1] FAO56 p26 box6 + Cp = 1.013E-3; % specific heat at cte pressure [MJ.kg-1.?C-1] FAO56 p26 box6 + k = 0.41; % karman's cte [] FAO 56 Eq4 + Z=521; % altitute of the location(m) + as=0.25; % regression constant, expressKTg the fraction of extraterrestrial radiation FAO56 pag50 + bs=0.5; + alfa=0.23; % albeo of vegetation set as 0.23 + z_m=10; % observation height of wKTd speed; 10m + Lz=240*pi()/180; % latitude of Beijing time zone west of Greenwich + Lm=252*pi()/180; % latitude of Local time, west of Greenwich + % albedo of soil calculation; + Theta_LL_sur(KT)=Theta_LL(NL,2); + if Theta_LL_sur(KT)<0.1 + alfa_s(KT)=0.25; + elseif Theta_LL_sur(KT)<0.25 + alfa_s(KT)=0.35-Theta_LL_sur(KT); + else + alfa_s(KT)=0.1; + end + JN(KT)=fix(TIME/3600/24)+293; % day number + if JN(KT)>366 + JN(KT)=JN(KT)-366; + end + n=[8.1 8.6 0 8.8 0 9 7 9.2 5.6 0 2.5 8.8 9.6 7.8 7.3 7.7 9.2 9 7.4 0 8.5 0 5 9.1 5.9 8.7 3.3 0 8.3 8.4 7.9 4.6 0 0 0 8.4 6.2 2.9 8.5 6.8 3.2 0 0 0 2.7 8.4 7.7 8.2 7.7 8.2 8.3 7.2 7.1 4 0 0 2.2 0 0 0 6.8 0 0 5.8 3.9 8.3 8 4.7 0 0 0 6.5 8.6 8.2 8.1 3.4 5.5 6.1 4.5 0 7.6 1.9 7.6 7.1 8.6 8.2 7.8 5.6 8.6 7.7 8.1 7 0 0 7.7 7.6 8 9.2 8.3 8.6 8.3 6.6 7.1 5 5.6 0 0 0 0 4.4 0 0 0 3.6 0 0 8.5 4 2 8.6 0 0 0 0 4 4.3 8.7 3 3.9 0 2.4 3.7 1.2 0 8.1 9 9.1 9.1 7.9 9.2 10 0 0 5.8 0 4.6 3.4 5.2 0 8.7 8 7.8 9.6 4.5 8.6 8.5 8.8 0 8.9 10.4 10.3 4.4 9.5 3.2 7.8 0 8.7 0 1.9 9.9 9.5 4.8 10.6 10.4 10.9 10.8 7.8 11 7.8 11 10.3 0 0 0 0 0 3.2 9.8 9 10.6 10.3 0 0 9.2 6.1 11.5 10 0 0 0 0 0 5.5 12 12.4 12.4 11.6 2.2 0 0 0 9.2 9.9 12.1 11 3.5 4.5 2 0 5.3 6.5 0 7.7 0 2.4 11.5 11.2 9 11.5 3.4 8.7 11.2 0 1.5]; + N=[10.93701633 10.9034753 10.87016469 10.83709407 10.80427316 10.77171186 10.73942023 10.70740848 10.675687 10.64426632 10.61315713 10.58237029 10.55191677 10.52180771 10.49205435 10.46266811 10.43366048 10.40504308 10.37682764 10.34902597 10.32164997 10.2947116 10.26822291 10.24219596 10.21664286 10.19157573 10.16700671 10.14294792 10.11941145 10.09640934 10.0739536 10.05205613 10.03072873 10.00998311 9.989830838 9.970283311 9.951351769 9.933047254 9.915380594 9.898362384 9.882002964 9.866312401 9.851300468 9.836976625 9.823349998 9.81042936 9.798223113 9.786739272 9.775985443 9.765968807 9.756696108 9.748173632 9.740407195 9.733402131 9.727163276 9.721694959 9.717000992 9.713084659 9.709948706 9.707595342 9.706026226 9.705242465 9.705244613 9.70603267 9.707606078 9.709963725 9.71310395 9.717024544 9.721722754 9.727195294 9.73343835 9.74044759 9.748218175 9.756744769 9.756744825 9.766021613 9.776042303 9.786800148 9.798287964 9.810498142 9.823422668 9.837053135 9.85138077 9.866396443 9.882090693 9.898453747 9.915475535 9.933145715 9.951453692 9.970388636 9.989939503 10.01009506 10.03084389 10.05217444 10.074075 10.09653377 10.11953883 10.14307819 10.16713981 10.19171159 10.21678141 10.24233713 10.26836665 10.29485784 10.32179862 10.34917699 10.37698095 10.40519863 10.43381819 10.46282793 10.49221622 10.52197155 10.55208253 10.5825379 10.61332654 10.64443746 10.67585981 10.70758291 10.73959622 10.77188935 10.8044521 10.8372744 10.87034637 10.90365826 10.93720053 10.97096377 11.00493875 11.0391164 11.07348782 11.10804425 11.14277709 11.17767792 11.21273844 11.24795051 11.28330613 11.31879743 11.3544167 11.39015633 11.42600884 11.46196687 11.49802317 11.5341706 11.57040211 11.60671076 11.64308967 11.67953206 11.71603121 11.75258048 11.78917327 11.82580304 11.8624633 11.89914757 11.93584944 11.97256248 12.0092803 12.04599651 12.0827047 12.11939848 12.15607142 12.19271707 12.22932896 12.26590057 12.30242534 12.33889663 12.37530778 12.41165203 12.44792255 12.48411243 12.52021469 12.55622222 12.59212782 12.6279242 12.66360393 12.69915947 12.73458317 12.76986722 12.80500369 12.83998451 12.87480148 12.90944621 12.9439102 12.97818478 13.01226111 13.0461302 13.07978291 13.11320992 13.14640174 13.17934873 13.21204108 13.24446881 13.27662179 13.30848971 13.34006212 13.37132839 13.40227777 13.43289933 13.46318202 13.49311465 13.52268587 13.55188426 13.58069823 13.60911612 13.63712616 13.66471648 13.69187516 13.7185902 13.74484953 13.77064107 13.7959527 13.82077229 13.84508771 13.86888685 13.89215763 13.91488805 13.93706614 13.95868004 13.979718 14.00016838 14.0200197 14.03926062 14.05788001 14.07586694 14.09321068 14.10990077 14.125927 14.14127945 14.1559485 14.16992485 14.18319955 14.19576402 14.20761004 14.2187298 14.2291159 14.23876138]; + h_v=[0 0 0 0 0 0 0 0 0.003 0.006 0.009 0.012 0.015 0.018 0.021 0.024 0.027 0.030 0.033 0.036 0.040 0.043 0.046 0.049 0.052 0.055 0.058 0.061 0.064 0.067 0.070 0.073 0.076 0.079 0.079 0.080 0.080 0.080 0.080 0.081 0.081 0.081 0.081 0.082 0.082 0.082 0.083 0.083 0.083 0.083 0.084 0.084 0.084 0.084 0.085 0.085 0.085 0.086 0.086 0.086 0.086 0.087 0.087 0.087 0.087 0.088 0.088 0.088 0.088 0.089 0.089 0.089 0.090 0.090 0.090 0.090 0.091 0.091 0.091 0.091 0.092 0.092 0.092 0.093 0.093 0.093 0.093 0.094 0.094 0.094 0.094 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.095 0.100 0.104 0.109 0.113 0.118 0.122 0.127 0.131 0.136 0.148 0.160 0.171 0.183 0.195 0.207 0.219 0.230 0.242 0.254 0.262 0.270 0.279 0.287 0.295 0.303 0.311 0.320 0.328 0.336 0.356 0.375 0.395 0.414 0.434 0.453 0.473 0.492 0.502 0.512 0.523 0.533 0.543 0.553 0.564 0.574 0.584 0.605 0.626 0.647 0.667 0.688 0.709 0.730 0.731 0.732 0.732 0.733 0.734 0.735 0.735 0.736 0.737 0.739 0.740 0.741 0.742 0.744 0.745 0.747 0.750 0.752 0.755 0.757 0.760 0.762 0.765 0.767 0.770 0.772 0.773 0.774 0.775 0.776 0.777 0.778 0.780 0.781 0.782 0.783 0.784 0.785 0.786 0.787 0.788 0.789 0.790 0.791 0.792 0.793 0.795 0.796 0.797 0.798 0.799 0.799 0.799 0.799]; + rl_min=[540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 540 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 1858.736059 1736.111111 1628.664495 1533.742331 1449.275362 1373.626374 1305.483029 1243.781095 1187.648456 1136.363636 1089.324619 1046.025105 1006.036217 968.9922481 934.5794393 902.5270758 872.600349 844.5945946 818.3306056 793.6507937 107.8582435 104.7904192 101.8922853 99.15014164 96.55172414 94.08602151 91.74311927 89.5140665 87.39076155 85.36585366 83.43265793 81.58508159 79.81755986 78.125 76.50273224 74.94646681 73.45225603 72.01646091 70.63572149 69.30693069 68.02721088 66.79389313 65.60449859 64.45672192 63.34841629 62.27758007 61.24234471 60.24096386 59.27180356 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 58.33333333 61.53846154 65.11627907 69.13580247 315.7894737 338.028169 363.6363636 393.442623 714.2857143 1098.039216 1565.217391 2146.341463 2888.888889 3870.967742 5230.769231 7238.095238 10500 16727.27273]; +% DayNum=fix(TIME/3600/24)+1; + n(KT)=n(DayNum); + N(KT)=N(DayNum); + % h_v(KT)=h_v(DayNum); + %rl_min(KT)=139; + + DayHour=TIME/3600/24-DayNum+1; + if DayNum-1==0 + hh_v(KT)=h_v(DayNum); + else + hh_v(KT)=(h_v(DayNum)-h_v(DayNum-1))*DayHour+h_v(DayNum); + end + rl_min(KT)=rl_min(DayNum); + % 6-23 TO 7-31 + %Kcb=Mdata(:,15); + + % Calculation procedure + %% AIR PARAMETERS CALCULATION + % compute DELTA - SLOPE OF SATURATION VAPOUR PRESSURE CURVE + % [kPa.?C-1] + % FAO56 pag 37 Eq13 + DELTA(KT) = 4098*(0.6108*exp(17.27*Ta(KT)/(Ta(KT)+237.3)))/(Ta(KT)+237.3)^2; + % ro_a - MEAN AIR DENSITY AT CTE PRESSURE + % [kg.m-3] + % FAO56 pag26 box6 + Pa=101.3*((293-0.0065*Z)/293)^5.26; + ro_a(KT) = Pa/(R*1.01*(Ta(KT)+273.16)); + % compute e0_Ta - saturation vapour pressure at actual air temperature + % [kPa] + % FAO56 pag36 Eq11 + e0_Ta(KT) = 0.6108*exp(17.27*Ta(KT)/(Ta(KT)+237.3)); + e0_Ts(KT) = 0.6108*exp(17.27*Ts(KT)/(Ts(KT)+237.3)); + % compute e_a - ACTUAL VAPOUR PRESSURE + % [kPa] + % FAO56 pag74 Eq54 + e_a(KT) = e0_Ta(KT)*HR_a(KT); + e_a_Ts(KT) = e0_Ts(KT)*HR_a(KT); + + % gama - PSYCHROMETRIC CONSTANT + % [kPa.?C-1] + % FAO56 pag31 eq8 + gama = 0.664742*1e-3*Pa; + + %% RADIATION PARAMETERS CALCULATION + % compute dr - KTverse distance to the sun + % [rad] + % FAO56 pag47 Eq23 + dr(KT) = 1+0.033*cos(2*pi()*JN(KT)/365); + + % compute delta - solar declKTation + % [rad] + % FAO56 pag47 Eq24 + delta(KT) = 0.409*sin(2*pi()*JN(KT)/365-1.39); + + % compute Sc - seasonnal correction of solar time + % [hour] + % FAO56 pag47 Eq32 + Sc = []; + b(KT) = 2.0*pi()*(JN(KT)-81.0)/364.0; % Eq 34 + Sc(KT) = 0.1645*sin(2*b(KT)) - 0.1255*cos(b(KT)) - 0.025*sin(b(KT)); + + % compute w - solar time angle at the midpoKTt of the period (time) + % [rad] + % FAO56 pag48 Eq31 + w(KT)=pi()/12*((TIME/3600-fix(TIME/3600/24-0.001)*24-0.5+0.06667*(Lz-Lm)+Sc(KT))-12); + % compute w1 - solar time angle at the beginning of the period (time) + % [rad] + % FAO56 pag47 Eq29 + tl = 1; % hourly data + w1(KT) = (w(KT) - pi()*tl/24.0); + + % compute w2 - solar time angle at the end of the period (time + 1h) + % [rad] + % FAO56 pag47 Eq30 + w2(KT) = w(KT) + pi()*tl/24.0; + + % compute ws - sunset hour angle + % [rad] + % FAO56 pag47 Eq25 + ws(KT)=acos((-1)*tan(0.599)*tan(delta(KT))); %for daily duration + + % compute Ra - extraterrestrial radiation + % [MJ.m-2.hour-1] + % FAO56 pag47 Eq28 + if w(KT)> -ws(KT) && w(KT) < ws(KT) + Ra(KT)=12*60/pi()*Gsc*dr(KT)*((w2(KT)-w1(KT))*sin(0.599)*sin(delta(KT)) + cos(0.599)*cos(delta(KT))*(sin(w2(KT))-sin(w1(KT)))); + else + Ra(KT)=0; + end + if Ra(KT)<0 + Ra(KT)=0; + end + % compute Rs0 - clear-sky solar (shortwave) radiation + % [MJ.m-2.hour-1] + % FAO56 pag51 Eq37 + Rs0(KT) = (0.75+2E-5*Z)*Ra(KT); + % Rs0_Watts = Rs0*24.0/0.08864 + % daylight hours N +% N(KT)=24*ws(KT)/pi(); + + % compute Rs - SHORTWAVE RADIATION + % [MJ.m-2.hour-1] + % FAO56 pag51 Eq37 + Rs(KT)=(as+bs*n(KT)/N(KT))*Ra(KT); + + % compute Rns - NET SHORTWAVE RADIATION + % [MJ.m-2.day-1] + % FAO56 pag51 Eq37 + % for each type of vegetation, crop and soil (albedo dependent) + Rns(KT)= (1-alfa)*Rs(KT); + Rns_SOIL(KT) = (1 - alfa_s(KT))*Rs(KT); + % compute Rnl - NET LONGWAVE RADIATION + % [MJ.m-2.hour-1] + % FAO56 pag51 Eq37 and pag74 of hourly computKTg + r_sunset=[]; + r_angle=[]; + R_i=[]; + if (ws(KT) - 0.52) <= w(KT) && w(KT)<= (ws(KT) - 0.10) %FAO56: (ws(KT) - 0.79) <= w(KT) <= (ws(KT) - 0.52) + R_i = 1; + if Rs0(KT) > 0 + if Rs(KT)/Rs0(KT) > 0.3 + r_sunset = Rs(KT)/Rs0(KT); + else + r_sunset = 0.3; + end + else + r_sunset = 0.75; % see FAO56 pag75 + end + end + if (ws(KT) - 0.10) < w(KT) || w(KT) <= (-ws(KT)+ 0.10) + if R_i>0 + r_angle(KT)=r_sunset; + else + r_angle(KT)=0.75; %see FAO56 pag75 + end + else + r_angle(KT)=Rs(KT)/Rs0(KT); + end + RnL(KT)=(sigma/24*((Ta(KT) + 273.16)^4)*(0.34-0.14*sqrt(e_a(KT)))*(1.35*r_angle(KT)-0.35)); + + if RnL(KT)<0 + r_angle(KT)=0.8; + RnL(KT)=(sigma/24*((Ta(KT) + 273.16)^4)*(0.34-0.14*sqrt(e_a(KT)))*(1.35*r_angle(KT)-0.35)); + end + + Rn(KT) = Rns(KT) - RnL(KT); % net radiation for vegetation + % Rn_SOIL(KT) = Rns_SOIL(KT) - RnL(KT); % net radiation for vegetation + Rn_SOIL(KT) =(1 - alfa_s(KT))*Rn(KT)*exp(-1*(Tao*LAI(KT))); % net radiation for soil + % soil heat flux +% Rn_SOIL(KT) =Rn(KT); % net radiation for soil + + t=TIME-(fix(TIME/3600/24))*86400; + if t>0.264*24*3600 && t<0.736*24*3600 + G(KT)=0.1*Rn(KT); + G_SOIL(KT)=0.1*Rn_SOIL(KT); +% Rn_SOIL(KT) =Rn_SOIL(KT) ; + else +% Rn_SOIL(KT) =Rn_SOIL(KT)-0.2 ; + G(KT)=0.5*Rn(KT); + G_SOIL(KT)=0.5*Rn_SOIL(KT); + end + + %% SURFACE RESISTANCE PARAMETERS CALCULATION + R_a=0.81;R_b=0.004*24*11.6;R_c=0.05; + % R_fun(KT)=((R_b*Rns(KT)+R_c)/(R_a*(R_b*Rns(KT)+1))); + rl(KT)=rl_min(KT)/((R_b*Rns(KT)+R_c)/(R_a*(R_b*Rns(KT)+1))); + + % r_s - SURFACE RESISTANCE + % [s.m-1] + % VEG: Dingman pag 208 (canopy conductance) (equivalent to FAO56 pag21 Eq5) + r_s_VEG(KT) = rl(KT)/LAI_act(KT); + + % SOIL: equation 20 of van de Griend and Owe, 1994 + %Theta_LL_sur(KT)=Theta_LL(NL,2); + + r_s_SOIL(KT)=10.0*exp(0.3563*100.0*(0.28-Theta_LL_sur(KT))); % 0.25 set as minmum soil moisture for potential evaporation + %r_s_SOIL(i)=10.0*exp(0.3563*100.0*(fc(i)-por(i))); + % correction wKTdspeed measurement and scalKTg at h+2m + % [m.s-1] + % FAO56 pag56 eq47 + + % r_a - AERODYNAMIC RESISTANCE + % [s.m-1] + % FAO56 pag20 eq4- (d - zero displacement plane, z_0m - roughness length momentum transfer, z_0h - roughness length heat and vapour transfer, [m], FAO56 pag21 BOX4 + r_a_VEG(KT) = log((2-(2*hh_v(KT)/3))/(0.123*hh_v(KT)))*log((2-(2*hh_v(KT)/3))/(0.0123*hh_v(KT)))/((k^2)*U(KT))*100; + % r_a of SOIL + % Liu www.hydrol-earth-syst-sci.net/11/769/2007/ + % equation for neutral conditions (eq. 9) + % only function of ws, it is assumed that roughness are the same for any type of soil + + RHOV_sur(KT)=RHOV(NN); + Theta_LL_sur(KT)=Theta_LL(NL,2); + + P_Va(KT)=0.611*exp(17.27*Ta(KT)/(Ta(KT)+237.3))*HR_a(KT); %The atmospheric vapor pressure (KPa) (1000Pa=1000.1000.g.100^-1.cm^-1.s^-2) + + RHOV_A(KT)=P_Va(KT)*1e4/(Rv*(Ta(KT)+273.15)); % g.cm^-3; Rv-cm^2.s^-2.Cels^-1 + + z_ref=200; % cm The reference height of tempearature measurement (usually 2 m) + d0_disp=0; % cm The zero-plane displacement (=0 m) + z_srT=0.1; % cm The surface roughness for the heat flux (=0.001m) + VK_Const=0.41; % The von Karman constant (=0.41) + z_srm=0.1; % cm The surface roughness for momentum flux (=0.001m) + U_wind=198.4597; % The mean wind speed at reference height.(cm.s^-1) + + MO(KT)=(Ta(KT)*U(KT)^2)/(g*(Ta(KT)-Ts(KT))*log(z_ref/z_srm)); % Wind speed should be in cm.s^-1, MO-cm; + + Zeta_MO(KT)=z_ref/MO(KT); + + if abs(Ta(KT)-Ts(KT))<=0.01 + Stab_m(KT)=0; + Stab_T(KT)=0; + elseif Ta(KT)1 + Stab_T(KT)=5; + Stab_m(KT)=5; + else + Stab_T(KT)=5*Zeta_MO(KT); + Stab_m(KT)=5*Zeta_MO(KT); + end + end + + Velo_fric(KT)=U(KT)*VK_Const/(log((z_ref-d0_disp+z_srm)/z_srm)+Stab_m(KT)); + + % Resis_a(KT)=(log((z_ref-d0_disp+z_srT)/z_srT)+Stab_T(KT))/(VK_Const*Velo_fric(KT)); %(s.cm^-1) + % + % Resis_s(KT)=10*exp(35.63*(0.25-Theta_LL_sur(KT)))/100; %(-805+4140*(Theta_s(J)-Theta_LL_sur(KT)))/100; % s.m^-1----->0.001s.cm^-1 + % % + % % Evap(KT)=(RHOV_sur(KT)-RHOV_A(KT))/(Resis_s(KT)+Resis_a(KT)); + % % EVAP(KT,1)=Evap(KT); + + Resis_a(KT)=((log((z_ref-d0_disp+z_srT)/z_srT)+Stab_T(KT))/(VK_Const*Velo_fric(KT)))*100; %(s.cm^-1) + r_a_SOIL(KT) = log((2.0)/0.0058)*log(2.0/0.0058)/((k^2)*U(KT))*100; %(s.m^-1) + + % PT/PE - Penman-Montheith + % mm.day-1 + % FAO56 pag19 eq3 + % VEG + + PT_PM_VEG(KT) = (DELTA(KT)*(Rn(KT)-G(KT))+3600*ro_a(KT)*Cp*(e0_Ta(KT)-e_a(KT))/r_a_VEG(KT))/(lambdav*(DELTA(KT) + gama*(1+r_s_VEG(KT)/r_a_VEG(KT))))/3600; + % reference et ET0 + %PT_PM_0(KT) = (0.408*DELTA(KT)*Rn(KT)+gama*900/(Ta(KT)+273)*(e0_Ta(KT)-e_a(KT))*u_2(KT))/(DELTA(KT) + gama*(1+0.34*u_2(KT))); + %T_act(KT)=PT_PM_0(KT)*Kcb(KT); + % for SOIL + if LAI(KT)==0 || hh_v(KT)==0 + PT_PM_VEG(KT)=0; + end + PE_PM_SOIL(KT) = (DELTA(KT)*(Rn_SOIL(KT)-G_SOIL(KT))+3600*ro_a(KT)*Cp*(e0_Ta(KT)-e_a(KT))/r_a_SOIL(KT))/(lambdav*(DELTA(KT) + gama*(1+r_s_SOIL(KT)/r_a_SOIL(KT))))/3600; + Evap(KT)=0.1*PE_PM_SOIL(KT); % transfer to second value + EVAP(KT,1)=Evap(KT); + Tp_t(KT)=0.1*PT_PM_VEG(KT); % transfer to second value + TP_t(KT,1)=Tp_t(KT); + +end +if rwuef==1 + % water stress function parameters +% H1=-15;H2=-50;H4=-9000;H3L=-900;H3H=-500; %% for maize +% H1=-1;H2=-5;H4=-16000;H3L=-900;H3H=-500; %% for winter wheat +% if Tp_t(KT)<0.02/3600 +% H3=H3L; +% elseif Tp_t(KT)>0.05/3600 +% H3=H3H; +% else +% H3=H3H+(H3L-H3H)/(0.03/3600)*(0.05/3600-Tp_t(KT)); +% end + if KT<=3288+1103 + H1=0;H2=-31;H4=-8000;H3L=-600;H3H=-300; + if Tp_t(KT)<0.02/3600 + H3=H3L; + elseif Tp_t(KT)>0.05/3600 + H3=H3H; + else + H3=H3H+(H3L-H3H)/(0.03/3600)*(0.05/3600-Tp_t(KT)); + end + else + H1=-1;H2=-5;H4=-16000;H3L=-600;H3H=-300; + if Tp_t(KT)<0.02/3600 + H3=H3L; + elseif Tp_t(KT)>0.05/3600 + H3=H3H; + else + H3=H3H+(H3L-H3H)/(0.03/3600)*(0.05/3600-Tp_t(KT)); + end + end + % piecewise linear reduction function + MN=0; + for ML=1:NL + for ND=1:2 + MN=ML+ND-1; + if hh(MN) >=H1, + alpha_h(ML,ND) = 0; + elseif hh(MN) >=H2, + alpha_h(ML,ND) = (H1-hh(MN))/(H1-H2); + elseif hh(MN) >=H3, + alpha_h(ML,ND) = 1; + elseif hh(MN) >=H4, + alpha_h(ML,ND) = (hh(MN)-H4)/(H3-H4); + else + alpha_h(ML,ND) = 0; + end + end + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%% Root lenth distribution %%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Lm=150; +% RL0=2; + %%%%%%%%%%%%%%%%%%% crop stage specific root growth rate %%%%%%%%%%%%%%% +% if TIME<=24*50*3600 +% r=1.78E-06; % root growth rate cm/s +% Lm=47; +% RL0=2; +% fr(KT)=RL0/(RL0+(Lm-RL0)*exp((-1)*(r*TIME))); +% LR(KT)=Lm*fr(KT); +% elseif TIME<=3095*3600 +% % r=2.96E-08; +% % Lm=47; +% % RL0=2; +% % fr(KT)=RL0/(RL0+(Lm-RL0)*exp((-1)*(r*TIME))); +% LR(KT)=47; +% else +% r=1.69E-07; +% Lm=150; +% RL0=47; +% fr(KT)=RL0/(RL0+(Lm-RL0)*exp((-1)*(r*TIME))); +% LR(KT)=Lm*fr(KT); +% end + + + if TIME<=3095*3600 + r=1.78E-06; % root growth rate cm/s + Lm=47; + RL0=2; + fr(KT)=RL0/(RL0+(Lm-RL0)*exp((-1)*(r*TIME))); + LR(KT)=Lm*fr(KT); + else + r=6.69E-07; + Lm=150; + RL0=47; + fr(KT)=RL0/(RL0+(Lm-RL0)*exp((-1)*(r*(TIME-3095*3600)))); + LR(KT)=Lm*fr(KT); + end + +% fr(KT)=RL0/(RL0+(Lm-RL0)*exp((-1)*(r*TIME))); +% LR(KT)=Lm*fr(KT); + RL=300; + Elmn_Lnth=0; + + if LR(KT)<=1 + for ML=1:NL-1 % ignore the surface root water uptake 1cm + for ND=1:2 + MN=ML+ND-1; + bx(ML,ND)=0; + end + end + else + for ML=1:NL + Elmn_Lnth=Elmn_Lnth+DeltZ(ML); + if Elmn_Lnth=RL-LR(KT) && Elmn_Lnth1 && Delt_t>(TEND-TIME) + Delt_t=TEND-TIME; % If Delt_t is changed due to excessive change of state variables, the judgement of the last time step is excuted. + end + TIME=TIME+Delt_t; % The time elapsed since start of simulation + TimeStep(KT,1)=Delt_t; + SUMTIME(KT,1)=TIME; + Processing=TIME/TEND + %%%%%% Updating the state variables. %%%%%%%%%%%%%%%%%%%%%%%%%%%% + if TIME>=322*1800 && TIME<=341*1800 %7-13 9-10 p=52mm + NBChh=1; + elseif TIME>=1217*1800 && TIME<=1218*1800 %8-1 16-18 p=60mm + NBChh=1; + elseif TIME>=1933*1800 && TIME<=1960*1800 %8-1 16-18 p=60mm + NBChh=1; + elseif TIME>=2032*1800 && TIME<=2034*1800 %8-15 16-17 p=67mm + NBChh=1; + elseif TIME>=2058*1800 && TIME<=2061*1800 %8-15 16-17 p=67mm + NBChh=1; + elseif TIME>=2127*2131 && TIME<=2135*1800 %8-15 16-17 p=67mm + NBChh=1; + elseif TIME>=2248*1800 && TIME<=2248*1800 %8-15 16-17 p=67mm + NBChh=1; + elseif TIME>=2251*1800 && TIME<=2251*1800 %8-15 16-17 p=67mm + NBChh=1; + elseif TIME>=2316*1800 && TIME<=2322*1800 %8-15 16-17 p=67mm + NBChh=1; + elseif TIME>=2751*1800 && TIME<=2775*1800 %9-8 14-18 p=93.11mm + NBChh=1; + elseif TIME>=3057*1800 && TIME<=3059*1800 %9-8 14-18 p=93.11mm + NBChh=1; + elseif TIME>=4345*1800 && TIME<=4352*1800 %9-8 14-18 p=93.11mm + NBChh=1; + else + NBChh=2; + end + if IRPT1==0 && IRPT2==0 + for MN=1:NN + hOLD(MN)=h(MN); + h(MN)=hh(MN); + hhh(MN,KT)=hh(MN); +% KL_h(MN,KT)=KL_h(MN,2); +% Chh(MN,KT)=Chh(MN,2); +% ChT(MN,KT)=ChT(MN,2); +% Khh(MN,KT)=Khh(MN,2); +% KhT(MN,KT)=KhT(MN,2); + + if Thmrlefc==1 + TOLD(MN)=T(MN); + T(MN)=TT(MN); + TTT(MN,KT)=TT(MN); + end + if Soilairefc==1 + P_gOLD(MN)=P_g(MN); + P_g(MN)=P_gg(MN); + P_ggg(MN,KT)=P_gg(MN); + end + if rwuef==1 + SRT(MN,KT)=Srt(MN,1); + ALPHA(MN,KT)=alpha_h(MN,1); + BX(MN,KT)=bx(MN,1); + end + end + DSTOR0=DSTOR; + if KT>1 + run SOIL1 + end + end + + if Delt_t~=Delt_t0 + for MN=1:NN + hh(MN)=h(MN)+(h(MN)-hOLD(MN))*Delt_t/Delt_t0; + TT(MN)=T(MN)+(T(MN)-TOLD(MN))*Delt_t/Delt_t0; + end + end + hSAVE=hh(NN); + TSAVE=TT(NN); + if NBCh==1 + hN=BCh; + hh(NN)=hN; + hSAVE=hN; + elseif NBCh==2 + if NBChh~=2 + if BCh<0 + hN=DSTOR0; + hh(NN)=hN; + hSAVE=hN; + else + hN=-1e6; + hh(NN)=hN; + hSAVE=hN; + end + end + else + if NBChh~=2 + hN=DSTOR0; + hh(NN)=hN; + hSAVE=hN; + end + end + % run Forcing_PARM +%Ts(KT)=Ts1(KT); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + for KIT=1:NIT % Start the iteration procedure in a time step. + [hh,COR,J,Theta_V,Theta_g,Se,KL_h,Theta_LL,DTheta_LLh]=SOIL2(hh,COR,hThmrl,NN,NL,TT,Tr,IS,Hystrs,XWRE,Theta_s,IH,KIT,Theta_r,Alpha,n,m,Ks,Theta_L,h,Thmrlefc,CKTN,POR,J); + [KL_T]=CondL_T(NL); + [RHOV,DRHOVh,DRHOVT]=Density_V(TT,hh,g,Rv,NN); + [W,WW,MU_W,D_Ta]=CondL_Tdisp(POR,Theta_LL,Theta_L,SSUR,RHO_bulk,RHOL,TT,Theta_s,h,hh,W_Chg,NL,nD,J,Delt_t,Theta_g,KLT_Switch); + [L]=Latent(TT,NN); + [Xaa,XaT,Xah,DRHODAt,DRHODAz,RHODA]=Density_DA(T,RDA,P_g,Rv,DeltZ,h,hh,TT,P_gg,Delt_t,NL,NN,DRHOVT,DRHOVh,RHOV); + [c_unsat,Lambda_eff]=CondT_coeff(Theta_LL,Lambda1,Lambda2,Lambda3,RHO_bulk,Theta_g,RHODA,RHOV,c_a,c_V,c_L,NL,nD,ThmrlCondCap,ETCON,EHCAP); + [k_g]=Condg_k_g(POR,NL,J,m,Theta_g,g,MU_W,Ks,RHOL); + [D_V,Eta,D_A]=CondV_DE(Theta_LL,TT,fc,Theta_s,NL,nD,J,Theta_g,POR,ThmrlCondCap,ZETA,XK,DVT_Switch); + [D_Vg,V_A,Beta_g]=CondV_DVg(P_gg,Theta_g,Sa,V_A,k_g,MU_a,DeltZ,Alpha_Lg,KaT_Switch,Theta_s,Se,NL,J); + run h_sub; + + if NBCh==1 + DSTOR=0; + RS=0; + elseif NBCh==2 + AVAIL=-BCh; + EXCESS=(AVAIL+QMT(KT))*Delt_t; + if abs(EXCESS/Delt_t)<=1e-10,EXCESS=0;end + DSTOR=min(EXCESS,DSTMAX); + RS=(EXCESS-DSTOR)/Delt_t; + else + AVAIL=AVAIL0-Evap(KT); + EXCESS=(AVAIL+QMT(KT))*Delt_t; + if abs(EXCESS/Delt_t)<=1e-10,EXCESS=0;end + DSTOR=0; + RS=0; + end + + if Soilairefc==1 + run Air_sub; + end + + if Thmrlefc==1 + run Enrgy_sub; + end + + if max(CHK)<0.001 + break + end + hSAVE=hh(NN); + TSAVE=TT(NN); + end + TIMEOLD=KT; + KIT + KIT=0; + [hh,COR,J,Theta_V,Theta_g,Se,KL_h,Theta_LL,DTheta_LLh]=SOIL2(hh,COR,hThmrl,NN,NL,TT,Tr,IS,Hystrs,XWRE,Theta_s,IH,KIT,Theta_r,Alpha,n,m,Ks,Theta_L,h,Thmrlefc,CKTN,POR,J); + + if IRPT1==0 && IRPT2==0 + if KT % In case last time step is not convergent and needs to be repeated. + MN=0; + for ML=1:NL + for ND=1:2 + MN=ML+ND-1; + Theta_LLL(ML,ND,KT)=Theta_LL(ML,ND); + Theta_L(ML,ND)=Theta_LL(ML,ND); + + end + end + run ObservationPoints + end + if (TEND-TIME)<1E-3 + for MN=1:NN + hOLD(MN)=h(MN); + h(MN)=hh(MN); + hhh(MN,KT)=hh(MN); + if Thmrlefc==1 + TOLD(MN)=T(MN); + T(MN)=TT(MN); + TTT(MN,KT)=TT(MN); + end + if Soilairefc==1 + P_gOLD(MN)=P_g(MN); + P_g(MN)=P_gg(MN); + P_ggg(MN,KT)=P_gg(MN); + end + end + break + end + end + for MN=1:NN + QL(MN,KT)=QL(MN); + QL_h(MN,KT)=QL_h(MN); + QL_T(MN,KT)=QL_T(MN); + Qa(MN,KT)=Qa(MN); + QV(MN,KT)=QV(MN); + end +end +% run PlotResults +%%%%%%%%%%%%%%%%%%%% postprocessing part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% plot the figures of simulation output soil moisture/temperature, +%%%% soil evaporation, plant transpiration simulated with two different +%%%% ET method (indirect ET method & direct ET method) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if Evaptranp_Cal==1 % save the variables for ETind scenario + Sim_Theta_ind=Sim_Theta; + Sim_Temp_ind=Sim_Temp; + TRAP=36000.*trap; + TRAP_ind=TRAP'; + EVAP=36000.*Evapo; + EVAP_ind=EVAP'; + disp ('Convergence Achieved for ETind scenario. Please switch to ETdir scenario and run again.') +else + TRAP=18000.*trap; + TRAP_dir=TRAP'; + EVAP=18000.*Evapo; + EVAP_dir=EVAP'; + for i=1:KT/48 + sumTRAP_ind(i)=0; %#ok<*SAGROW> + sumEVAP_ind(i)=0; + sumTRAP_dir(i)=0; + sumEVAP_dir(i)=0; + for j=(i-1)*48+1:i*48 + sumTRAP_ind(i)=TRAP_ind(j)+sumTRAP_ind(i); + sumEVAP_ind(i)=EVAP_ind(j)+sumEVAP_ind(i); + sumTRAP_dir(i)=TRAP(j)+sumTRAP_dir(i); + sumEVAP_dir(i)=EVAP(j)+sumEVAP_dir(i); + end + end + run PlotResults1 +end diff --git a/src/Max_Rootdepth.m b/src/Max_Rootdepth.m new file mode 100644 index 00000000..2d49f838 --- /dev/null +++ b/src/Max_Rootdepth.m @@ -0,0 +1,46 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Subfunction - Root - Depth % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%REFERENCES +function[bbx]=Max_Rootdepth(bbx,NL,KT,Ta) +%%% INPUTS +global DeltZ LR +% BR = 10:1:650; %% [gC /m^2 PFT] +% rroot = 0.5*1e-3 ; % 3.3*1e-4 ;%% [0.5-6 *10^-3] [m] root radius +%%% OUTPUTS + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%% Root lenth distribution %%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + if Ta>40 + Ta=40; + end + if Ta<10 + Ta=10; + end + % Lm=123; + % RL0=20; + %r=9.48915E-07; % root growth rate cm/s + % fr(KT)=RL0/(RL0+(Lm-RL0)*exp((-1)*(r*TIME))); + % LR(KT)=Lm*fr(KT); + if KT<=1 + LR=35; + else + LR=LR+(Ta-10)*0.0015; + if LR>55 + LR=55; + end + end + RL=500; + Elmn_Lnth=0; + for ML=1:NL + Elmn_Lnth=Elmn_Lnth+DeltZ(ML); + if Elmn_Lnth=RL-LR && Elmn_Lnth<=RL-0.1*LR + bbx(ML)=1; + else + bbx(ML)=0; + end + end +end \ No newline at end of file diff --git a/src/ObservationPoints.m b/src/ObservationPoints.m new file mode 100644 index 00000000..0d5f3bd4 --- /dev/null +++ b/src/ObservationPoints.m @@ -0,0 +1,23 @@ + + %% With 37 node-500cm Length KT=681 with 0.35/3600 Prep., while KT=708 with 0.4/3600 +% 2cm 5cm 10cm 20cm 30cm 40cm 50cm +% 34 31 26 21 19 17 15 +%% +% Moni_Depth=[34 31 26 21 19 17 15]; +% Moni_Depth_SM=[26 21 19 17 15]; + +% Sim_Theta(KT,1:5)=Theta_LLL(Moni_Depth_SM,1,KT); +% Sim_Temp(KT,1:7)=TTT(Moni_Depth,KT); + + + Moni_Depth=45:-1:1; + Moni_Depth_SM=45:-1:1; + Moni_Depth_RT=45:-1:1; + + + Sim_Theta(KT,1:length(Moni_Depth_SM))=Theta_LLL(Moni_Depth_SM,1,KT); + Sim_Temp(KT,1:length(Moni_Depth))=TTT(Moni_Depth,KT); + if rwuef==1 + Sim_SRT(KT,1:length(Moni_Depth))=SRT(Moni_Depth,KT); + end + diff --git a/src/PHENOLOGY_STATE.m b/src/PHENOLOGY_STATE.m new file mode 100644 index 00000000..c4e52181 --- /dev/null +++ b/src/PHENOLOGY_STATE.m @@ -0,0 +1,112 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Subfunction PHENOLOGY_STATE % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function[PHE_S,dflo,AgeL,AgeDL]= PHENOLOGY_STATE(NLeaf,AgeLtm1,dtd,... + LAIdead,NLeafdead,AgeDLtm1,... + PHE_Stm1,LAI,aSE,age_cr,jDay,Tsmm,Bfac,NPPm,PAR_Im,L_day,Bfac_lo,Bfac_ls,Tlo,Tls,mjDay,LDay_min,LDay_cr,dflotm1,dmg,PAR_th,LAI_min,jDay_dist) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%% INPUT +%%% NLeaf [] New Leaf [LAI] +%%% LAI [] Leaf Area Index +%%% AgeLtm1 [day] Age(t-1) +%%% dtd daily time step +%%% PHE_Stm1 [#] Phenology State(t-1) +%%%%% DORMANT 1 - MAX GROWTH 2 - NORMAL GROWTH 3 - SENESCENCE 4 +%%%% Tsmm last 30 days mean Soil Temperature +%%%% Omm last 7 day mean Soil Moisture +%%%% NPPm last 7 days mean NPP +%%% L_day length of the day [h] +%%% Bfac_lo [0-1] Critical Value Relative Moisture Leaf Onset +%%% Bfac_ls [0-1] Critical Value Relative Moisture Leaf shed +%%% Tlo [°C] Critical Temperature Value Leaf Onset +%%% Tls [°C] Critical Temperature Value Leaf Shed +%%% dmg [day] Length Period Days of maximum Growth +%%% LDay_cr length of the day critical for senescence passage [h] +%%% Minimum LAI to pass in Dormant Phenology +%%% aSE %%% PHENOLOGY KIND +%%% -- 1 Seasonal Plant -- 0 Evergreen -- 2 Grass species -- 3 Crops +%%% mjDay maximum julian day +%%%%%% OUTPUT +%%% dflo [day] from Leaf onset +%%% AgeL [day] Average Age of Leaf +%%% PHE_S [#] Phenology State +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +if (aSE == 0) || (aSE == 1) || (aSE == 2) + PAR_th = -Inf; +end +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Bfac = %% Moisture Stress +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% ALL THE CASES Decidous - Grass - Crop - Evergreen %%%%%%% +%%%%% DORMANT 1 - MAX GROWTH 2 - NORMAL GROWTH 3 - SENESCENCE 4 +switch PHE_Stm1 + case 1 + if mjDay > 0 + if (Tsmm >= Tlo) && (Bfac >= Bfac_lo) && (jDay <= mjDay) && (L_day >= LDay_min ) && (PAR_Im>PAR_th) %% Criteria Leaf onset + PHE_S = 2; + dflo = 1; + else + PHE_S = 1; + if (aSE == 3) + dflo = dflotm1 - 365/(365-age_cr); dflo(dflo<0)=0; + else + dflo = 0; + end + end + else + if (Tsmm >= Tlo) && (Bfac >= Bfac_lo) && (jDay >= -mjDay) && (L_day >= LDay_min ) && (PAR_Im>PAR_th) %% Criteria Leaf onset + PHE_S = 2; + dflo = 1; + else + PHE_S = 1; + if (aSE == 3) + dflo = dflotm1 - 365/(365-age_cr); dflo(dflo<0)=0; + else + dflo = 0; + end + end + end + case 2 + dflo = dflotm1 +1; + if dflo <= dmg + PHE_S= 2; + else + PHE_S= 3; + end + if (LAI <= LAI_min) && isempty(intersect(jDay,jDay_dist)) && (dflo>=5) + PHE_S=1; + end + case 3 + dflo = dflotm1 + 1; + if (L_day <= LDay_cr ) %% || (Tsmm < Tls) || (Bfac < Bfac_ls) %% || (NPPm < 0) %% Criteria Leaf senescense begin + PHE_S = 4; + else + PHE_S = 3; + end + if (aSE == 3) && (dflo >= age_cr) %%%% (AgeLtm1 >= age_cr) (PAR_Im<-PAR_th) + PHE_S = 4; + end + if (LAI <= LAI_min) && isempty(intersect(jDay,jDay_dist)) %% + PHE_S=1; + end + case 4 + dflo = dflotm1 + 1; + if LAI <= LAI_min || (aSE == 0) || (aSE == 2) || (aSE == 3) + PHE_S = 1; + else + PHE_S = 4; + end +end +%%%%%%%% LEAF AGE UPDATE %%%%%%%%%%%%%%%% +if LAI > LAI_min + AgeL = ((LAI-NLeaf)*(AgeLtm1+dtd) + NLeaf*(0+dtd))/(LAI); +else + AgeL = 0; +end +if LAIdead > LAI_min + AgeDL = ((LAIdead-NLeafdead)*(AgeDLtm1+dtd) + NLeafdead*(0+dtd))/(LAIdead); +else + AgeDL = 0; +end +end +%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/PlotResults1.m b/src/PlotResults1.m new file mode 100644 index 00000000..24bec32b --- /dev/null +++ b/src/PlotResults1.m @@ -0,0 +1,48 @@ +global RHOV_A Msrmn_Fitting Msr_Mois Msr_Temp Msr_Time QMTT%Trap EVAP_ind TRAP_ind Sim_Theta_ind Sim_Theta EVAP_dir TRAP_dir ET_H E_D ET_D sumTRAP_dir sumEVAP_dir + +disp ('Convergence Achieved.') +figure; +subplot(3,3,1); plot (hhh, 'DisplayName','hhh', 'YDataSource', 'hhh'); +subplot(3,3,2); plot(TTT, 'DisplayName','TTT', 'YDataSource', 'TTT'); +subplot(3,3,3); plot(SUMTIME,QMTT); +subplot(3,3,4); plot(SUMTIME,Evapo); +subplot(3,3,5); plot(SUMTIME,trap); +subplot(3,3,6); plot(SUMTIME,Ta(1:KT)); +subplot(3,3,7); plot(SUMTIME,U(1:KT)); +subplot(3,3,8); plot(SUMTIME,HR_a(1:KT)); +subplot(3,3,9); plot(SUMTIME,RHOV_A(1:KT)); + +if Msrmn_Fitting + fig1=figure; + subplot(5,1,1);plot (SUMTIME/3600, Sim_Theta_ind(:,17), 'r-',SUMTIME/3600,Sim_Theta(:,17), 'g-',Msr_Time/3600, Msr_Mois(1,:),'b.','LineWidth',2);title('20cm'); + subplot(5,1,2);plot (SUMTIME/3600, Sim_Theta_ind(:,21), 'r-',SUMTIME/3600,Sim_Theta(:,21), 'g-',Msr_Time/3600, Msr_Mois(2,:),'b.','LineWidth',2);title('40cm'); + subplot(5,1,3);plot (SUMTIME/3600, Sim_Theta_ind(:,24), 'r-',SUMTIME/3600,Sim_Theta(:,24), 'g-',Msr_Time/3600, Msr_Mois(3,:),'b.','LineWidth',2);title('60cm'); + ylabel('Soil moisture \theta','Rotation',90) + subplot(5,1,4);plot (SUMTIME/3600, Sim_Theta_ind(:,26), 'r-',SUMTIME/3600,Sim_Theta(:,26), 'g-',Msr_Time/3600, Msr_Mois(4,:),'b.','LineWidth',2);title('80cm'); + subplot(5,1,5);plot (SUMTIME/3600, Sim_Theta_ind(:,28), 'r-',SUMTIME/3600,Sim_Theta(:,28), 'g-',Msr_Time/3600, Msr_Mois(5,:),'b.','LineWidth',2);title('100cm'); + xlabel('Time(h)'); + legend('\thetaind','\thetadir','\thetaobs') + fig2=figure; + subplot(5,1,1);plot (SUMTIME/3600, Sim_Temp_ind(:,17), 'r-' ,SUMTIME/3600, Sim_Temp(:,17), 'g-' ,Msr_Time/3600, Msr_Temp(1,:),'b.','LineWidth',2);title('20cm'); + subplot(5,1,2);plot (SUMTIME/3600, Sim_Temp_ind(:,21), 'r-' ,SUMTIME/3600, Sim_Temp(:,21), 'g-' ,Msr_Time/3600, Msr_Temp(2,:),'b.','LineWidth',2);title('40cm'); + subplot(5,1,3);plot (SUMTIME/3600, Sim_Temp_ind(:,24), 'r-' ,SUMTIME/3600, Sim_Temp(:,24), 'g-' ,Msr_Time/3600, Msr_Temp(3,:),'b.','LineWidth',2);title('60cm'); + ylabel('Soil temperature T','Rotation',90) + subplot(5,1,4);plot (SUMTIME/3600, Sim_Temp_ind(:,26), 'r-' ,SUMTIME/3600, Sim_Temp(:,26), 'g-' ,Msr_Time/3600, Msr_Temp(4,:),'b.','LineWidth',2);title('80cm'); + subplot(5,1,5);plot (SUMTIME/3600, Sim_Temp_ind(:,28), 'r-' ,SUMTIME/3600, Sim_Temp(:,28), 'g-' ,Msr_Time/3600, Msr_Temp(5,:),'b.','LineWidth',2);title('100cm'); + xlabel('Time(h)'); + legend('Tind','Tdir','Tobs') + fig3=figure; + plot (SUMTIME/3600, EVAP_ind+TRAP_ind, 'b-' ,SUMTIME/3600, EVAP_dir+TRAP_dir, 'r-' ,Msr_Time/3600,ET_H,'ko','LineWidth',2,'MarkerSize',5); + xlabel('Time(h)'); + ylabel('EvapoTranspiration ET(mm)','Rotation',90); + legend('ETind','ETdir','ETobs','Location','best') + fig4=figure; + subplot(2,1,1);plot (175:275, sumEVAP_ind+sumTRAP_ind, 'b-' ,175:275, sumEVAP_dir+sumTRAP_dir, 'r-' ,175:275,ET_D(1:101),'ko','LineWidth',2,'MarkerSize',5); + xlabel('DOY'); + ylabel('EvapoTranspiration ET(mm)','Rotation',90); + legend('ETind','ETdir','ETobs','Location','best') + subplot(2,1,2);plot (175:275, sumEVAP_ind, 'b-' ,175:275, sumEVAP_dir, 'r-' ,175:275,E_D(1:101),'ko','LineWidth',2,'MarkerSize',5); + xlabel('DOY'); + ylabel('Evaporation E(mm)','Rotation',90); + legend('Eind','Edir','Eobs','Location','best') +end \ No newline at end of file diff --git a/src/RTMf.m b/src/RTMf.m new file mode 100644 index 00000000..73f06abf --- /dev/null +++ b/src/RTMf.m @@ -0,0 +1,301 @@ +function [rad,profiles] = RTMf(spectral,rad,soil,leafopt,canopy,gap,angles,profiles) + +% function 'RTMf' calculates the spectrum of fluorescent radiance in the +% observer's direction in addition to the total TOC spectral hemispherical upward Fs flux +% +% Authors: Wout Verhoef and Christiaan van der Tol (c.vandertol@utwente.nl) +% Date: 12 Dec 2007 +% Update: 26 Aug 2008 CvdT Small correction to matrices +% 07 Nov 2008 CvdT Changed layout +% Update: 19 Mar 2009 CvdT Major corrections: lines 95-96, +% 101-107, and 119-120. +% Update: 7 Apr 2009 WV & CvdT Major correction: lines 89-90, azimuth +% dependence was not there in previous verions (implicit assumption of +% azimuth(solar-viewing) = 0). This has been corrected +% Update: May-June 2012 WV & CvdT Add calculation of hemispherical Fs +% fluxes +% Update: Jan-Feb 2013 WV Inputs and outputs via structures for +% SCOPE Version 1.40 +% Update: Jan 2015 CvdT Added two contributions to SIF radiance cuased by rescattering of hemispherical SIF fluxes +% Update: Jan 2015 JAK (from SCOPE 1.53): Improved speed by factor of 9+! (by vectorizing the summation over the 60 layers) +% Update: Jan 2015 WV Rearranged some arrays to smoothen the vectorizations; adjusted some internal names +% +% The inputs and outputs are structures. These structures are further +% specified in a readme file. +% +% Input: +% spectral information about wavelengths and resolutions +% rad a large number of radiative fluxes: spectrally distributed +% and integrated, and canopy radiative transfer coefficients. +% soil soil properties +% leafopt leaf optical properties +% canopy canopy properties (such as LAI and height) +% gap probabilities of direct light penetration and viewing +% angles viewing and observation angles +% profiles vertical profiles of fluxes +% +% Output: +% rad a large number of radiative fluxes: spectrally distributed +% and integrated, and canopy radiative transfer coefficients. +% Here, fluorescence fluxes are added +%% 0.0 globals +global constants + +%% initialisations +wlS = spectral.wlS'; % SCOPE wavelengths, make column vectors +wlF = spectral.wlF'; % Fluorescence wavelengths +wlE = spectral.wlE'; % Excitation wavelengths +[dummy,iwlfi] = intersect(wlS,wlE); %#ok +[dummy,iwlfo] = intersect(wlS,wlF); %#ok +nf = length(iwlfo); +ne = length(iwlfi); +nl = canopy.nlayers; +LAI = canopy.LAI; +litab = canopy.litab; +lazitab = canopy.lazitab; +lidf = canopy.lidf; +nlinc = length(litab); +nlazi = length(lazitab); +nlori = nlinc * nlazi; % total number of leaf orientations +layers = 1:nl; + +vb = rad.vb(iwlfo); % added for rescattering of SIF fluxes +vf = rad.vf(iwlfo); + +Ps = gap.Ps; % [nl+1] +Po = gap.Po; +Pso = gap.Pso; + +Qso = (Pso(layers) + Pso(layers+1))/2; +Qs = (Ps(layers) + Ps(layers+1))/2; +Qo = (Po(layers) + Po(layers+1))/2; +Qsho = Qo - Qso; + +etah = zeros(nl,1); +etau = zeros(nl,nlori); % modified dimensions to facilitate vectorization + +[Mb,Mf] = deal(zeros(nf,ne)); +LoF_ = zeros(nf,2); +Fhem_ = zeros(nf,2); +Fiprofile = zeros(nl+1,2); +[LoF_1,LoF_2,LoF_3,LoF_4] = deal(zeros(nf,2)); + +% for speed-up the calculation only uses wavelength i and wavelength o part of the spectrum + +Esunf_ = rad.Esun_(iwlfi); +Eminf_ = rad.Emin_(:,iwlfi)'; % transpose into [nf,nl+1] matrix +Epluf_ = rad.Eplu_(:,iwlfi)'; +iLAI = LAI/nl; % LAI of a layer + +%% optical quantities + +rho = leafopt.refl(iwlfo); % [nf] leaf/needle reflectance +tau = leafopt.tran(iwlfo); % [nf] leaf/needle transmittance + +if isfield(leafopt,'MbI') + MbI = leafopt.MbI; + MbII = leafopt.MbII; + MfI = leafopt.MfI; + MfII = leafopt.MfII; +else + MbII = leafopt.Mb; + MfII = leafopt.Mf; +end + +rs = soil.refl(spectral.IwlF); % [nf] soil reflectance + +% geometric factors + +deg2rad = constants.deg2rad; +tto = angles.tto; +tts = angles.tts; +psi = angles.psi; + +cos_tto = cos(tto*deg2rad); % cos observation zenith angle +sin_tto = sin(tto*deg2rad); % sin observation zenith angle + +cos_tts = cos(tts*deg2rad); % cos solar angle +sin_tts = sin(tts*deg2rad); % sin solar angle + +cos_ttli = cos(litab*deg2rad); % cos leaf inclinaation angles +sin_ttli = sin(litab*deg2rad); % sin leaf inclinaation angles +cos_phils = cos(lazitab*deg2rad); % cos leaf azimuth angles rel. to sun azi +cos_philo = cos((lazitab-psi)*deg2rad); % cos leaf azimuth angles rel. to viewing azi + +%% geometric factors for all leaf angle/azumith classes +cds = cos_ttli*cos_tts*ones(1,nlazi) + sin_ttli*sin_tts*cos_phils; % [nlinc,nlazi] +cdo = cos_ttli*cos_tto*ones(1,nlazi) + sin_ttli*sin_tto*cos_philo; % [nlinc,nlazi] +fs = cds/cos_tts; % [nlinc,nlazi] +absfs = abs(fs); % [nlinc,nlazi] +fo = cdo/cos_tto; % [nlinc,nlazi] +absfo = abs(fo); % [nlinc,nlazi] +fsfo = fs.*fo; % [nlinc,nlazi] +absfsfo = abs(fsfo); % [nlinc,nlazi] +foctl = fo.*(cos_ttli*ones(1,nlazi)); % [nlinc,nlazi] +fsctl = fs.*(cos_ttli*ones(1,nlazi)); % [nlinc,nlazi] +ctl2 = cos_ttli.^2*ones(1,nlazi); % [nlinc,nlazi] + +%% calculation of fluorescence in observation direction + +% fluorescence efficiencies from ebal, after default fqe has been applied + +etahi = profiles.etah; +etaur = permute(profiles.etau,[3 1 2]); % make dimensions [nl,nlinc,nlazi] +etaui = reshape(etaur,nl,nlori); % expand orientations in a vector >> [nl,nlori] + +% fluorescence matrices and efficiencies for PSI and PSII + +[Emin_,Eplu_] = deal(zeros(nl+1,nf)); +[Fmin_,Fplu_] = deal(zeros(nf,nl+1,2)); +Fem = zeros(nf,2); + +for PS = 2:-1:2-isfield(leafopt,'MbI') % Do for both photosystems II and I (or alternatively for only one PS, in this case PSII) + + switch PS + case 1, Mb = MbI; Mf = MfI; etah(:) = 1; etau(:) = 1; + case 2, Mb = MbII; Mf = MfII; etah(:) = etahi(:); etau(:) = etaui(:); + end + + Mplu = 0.5 * (Mb+Mf); % [nf,ne] + Mmin = 0.5 * (Mb-Mf); + + % in-products: we convert incoming radiation to a fluorescence spectrum using the matrices. + % resolution assumed is 1 nm + + MpluEmin = Mplu * Eminf_; % [nf,nl+1] = (nf,ne) * (ne,nl+1) + MpluEplu = Mplu * Epluf_; + MminEmin = Mmin * Eminf_; + MminEplu = Mmin * Epluf_; + + MpluEsun = Mplu * Esunf_; % integration by inproduct + MminEsun = Mmin * Esunf_; + + xdd2 = mean(ctl2' * lidf); % lidf-weighted cosine squared of leaf inclination + mn_etau = mean(reshape(etau,nl,nlinc,nlazi),3) * lidf; % lidf-weighted mean of etau per layer [nl] + + % we calculate the spectrum for all individual leaves, sunlit and + % shaded + + [Fmin,Fplu] = deal(zeros(nf,nl+1)); + [G1,G2] = deal(zeros(nl+1,1)); + + for i = 1 : nf + + Qso_wfEs = Qso * reshape(absfsfo * MpluEsun(i) + fsfo * MminEsun(i),1,nlori); % [1,nlori] + Qs_sfEs = Qs *reshape(absfs * MpluEsun(i) - fsctl * MminEsun(i),1,nlori); + Qs_sbEs = Qs * reshape(absfs * MpluEsun(i) + fsctl * MminEsun(i),1,nlori); + + + + Mplu_i(layers) = MpluEmin(i,layers) + MpluEplu(i,layers+1); % [1,nl] + Mmin_i(layers) = MminEmin(i,layers) - MminEplu(i,layers+1); + + sigfEmini_sigbEplui = Mplu_i' - xdd2 * Mmin_i'; % [nl] + sigbEmini_sigfEplui = Mplu_i' + xdd2 * Mmin_i'; + + Qso_Mplu = Qso .* Mplu_i'; % [nl] + Qso_Mmin = Qso .* Mmin_i'; + Qsho_Mplu = Qsho .* Mplu_i'; + Qsho_Mmin = Qsho .* Mmin_i'; + + Qso_vEd = Qso_Mplu * reshape(absfo,1,nlori) + Qso_Mmin * reshape(foctl,1,nlori); + Qsh_vEd = Qsho_Mplu * reshape(absfo,1,nlori) + Qsho_Mmin * reshape(foctl,1,nlori); + + % Directly observed fluorescence contributions from sunlit and + % shaded leaves + + piLs = mean(reshape(etau .*(Qso_wfEs + Qso_vEd),nl,nlinc,nlazi),3) * lidf; + piLd = etah .* (mean(reshape(Qsh_vEd,nl,nlinc,nlazi),3) * lidf); + + piLo1 = iLAI * sum(piLs) ; + piLo2 = iLAI * sum(piLd); + + Qs_Fsmin = mean(reshape(etau .* Qs_sfEs,nl,nlinc,nlazi),3) * lidf ... + + Qs .* mn_etau .* sigfEmini_sigbEplui; + Qs_Fsplu = mean(reshape(etau .* Qs_sbEs,nl,nlinc,nlazi),3) * lidf ... + + Qs .* mn_etau .* sigbEmini_sigfEplui; + + Qd_Fdmin = (1-Qs) .* etah .* sigfEmini_sigbEplui; + Qd_Fdplu = (1-Qs) .* etah .* sigbEmini_sigfEplui; + + Fmin(i,layers+1) = Qs_Fsmin + Qd_Fdmin; + Fplu(i,layers) = Qs_Fsplu + Qd_Fdplu; + + t2 = xdd2 * (rho(i)-tau(i))/2; + att = 1-(rho(i)+tau(i))/2+t2; + sig = (rho(i)+tau(i))/2+t2; + m = sqrt(att^2-sig^2); + rinf = (att - m)/sig; + fac = 1 - m * iLAI; + facs = (rs(i)-rinf)/(1-rs(i)*rinf); + + + % Transformed SIF fluxes calculated numerically + + G1(1) = 2; Gnew = 0; % (to ensure we will enter the loop the first time) + + dF1 = (Fmin(i,layers+1) + rinf * Fplu(i,layers)) * iLAI; % Thanks to JAK + dF2 = (rinf * Fmin(i,layers+1) + Fplu(i,layers)) * iLAI; % These are the source functions + + while abs(Gnew-G1(1)) > 1e-3 + G1(1) = Gnew; + for j=2:nl+1 + G1(j) = fac * G1(j-1) + dF1(j-1); + end + G2(nl+1) = G1(nl+1) * facs; + for j=nl:-1:1 + G2(j) = fac * G2(j+1) + dF2(j); + end + Gnew = -rinf * G2(1); + end + + % Inverse transformation to get back the hemispherical fluxes + + Fplu_(i,:,PS) = (rinf*G1+G2)/(1-rinf^2); + Fmin_(i,:,PS) = (rinf*G2+G1)/(1-rinf^2); + + Fhem_(i,PS) = Fplu_(i,1,PS); + + % The following contributions are coming from: + + % 3) Rescattered SIF at observed leaves + % 4) SIF flux reflected by observed soil + + piLo3 = iLAI * ((vb(i)*Fmin_(i,layers,PS) + vf(i)*Fplu_(i,layers+1,PS)) * Qo); + piLo4 = rs(i) * Fmin_(i,nl+1,PS) * Po(nl+1); + + piLtoti = piLo1 + piLo2 + piLo3 + piLo4; + LoF_(i,PS) = piLtoti/pi; + + LoF_1(i,PS) = piLo1/pi; + LoF_2(i,PS) = piLo2/pi; + LoF_3(i,PS) = piLo3/pi; + LoF_4(i,PS) = piLo4/pi; + end + + Fem(:,PS) = iLAI*sum(Fplu+Fmin,2); + + for ilayer = 1:nl+1 + Fiprofile(ilayer,PS) = 0.001 * helpers.Sint(Fplu(:,ilayer),spectral.wlF); + end +end +rad.Fem_ = Fem(:,1) + Fem(:,2); +rad.Fhem_ = Fem(:,1) + Fem(:,2); +rad.LoF_ = LoF_(:,1) + LoF_(:,2); +if isfield(leafopt,'MbI') + rad.LoF1_ = LoF_(:,1); + rad.LoF2_ = LoF_(:,2); +end +rad.Fhem_ = Fhem_(:,1) + Fhem_(:,2); +rad.Fmin = sum(Fmin_,3); +rad.Fplu = sum(Fplu_,3); +rad.LoF_sunlit = LoF_1; +rad.LoF_shaded = LoF_2; +rad.LoF_scattered = LoF_3; +rad.LoF_soil = LoF_4; + +profiles.fluorescence = Fiprofile(:,1) + Fiprofile(:,2); + +rad.Eoutf = 0.001 * helpers.Sint(sum(Fhem_,2),spectral.wlF); +rad.Eminf_ = Emin_; +rad.Epluf_ = Eplu_; diff --git a/src/RTMo.m b/src/RTMo.m new file mode 100644 index 00000000..d0ade6bb --- /dev/null +++ b/src/RTMo.m @@ -0,0 +1,603 @@ +function [rad,gap,profiles] = RTMo(spectral,atmo,soil,leafopt,canopy,angles,meteo,rad,options) + +%% function RTMo +% +% calculates the spectra of hemisperical and directional observed visible +% and thermal radiation (fluxes E and radiances L), as well as the single +% and bi-directional gap probabilities +% +% the function does not require any non-standard Matlab functions. No +% changes to the code have to be made to operate the function for a +% particular canopy. All necessary parameters and variables are input or +% global and need to be specified elsewhere. +% +% Authors: Wout Verhoef (verhoef@nlr.nl) +% Christiaan van der Tol (tol@itc.nl) +% Joris Timmermans (j_timmermans@itc.nl) +% +% updates: 10 Sep 2007 (CvdT) - calculation of Rn +% 5 Nov 2007 - included observation direction +% 12 Nov 2007 - included abs. PAR spectrum output +% - improved calculation efficiency +% 13 Nov 2007 - written readme lines +% 11 Feb 2008 (WV&JT) - changed Volscat +% (JT) - small change in calculation Po,Ps,Pso +% - introduced parameter 'lazitab' +% - changed nomenclature +% - Appendix IV: cosine rule +% 04 Aug 2008 (JT) - Corrections for Hotspot effect in the probabilities +% 05 Nov 2008 (CvdT) - Changed layout +% 04 Jan 2011 (JT & CvdT) - Included Pso function (Appendix IV) +% - removed the analytical function (for checking) +% 02 Oct 2012 (CvdT) - included incident PAR in output +% +% Jan/Feb 2013 (WV) - Major revision towards SCOPE version 1.40: +% - Parameters passed using structures +% - Improved interface with MODTRAN atmospheric data +% - Now also calculates 4-stream +% reflectances rso, rdo, rsd and rdd +% analytically +% Apri 2013 (CvT) - improvements in variable names +% and descriptions +% +% Table of contents of the function +% +% 0. Preparations +% 0.1 parameters +% 0.2 initialisations +% 1. Geometric quantities +% 1.1 general geometric quantities +% 1.2 geometric factors associated with extinction and scattering +% 1.3 geometric factors to be used later with rho and tau +% 1.4 solar irradiance factor for all leaf orientations +% 1.5 probabilities Ps, Po, Pso +% 2. Calculation of upward and downward fluxes +% 3. Outgoing fluxes, hemispherical and in viewing direction, spectrum +% 4. Net fluxes, spectral and total, and incoming fluxes +% A1 functions J1 and J2 (introduced for stable solutions) +% A2 function volscat +% A3 function e2phot +% A4 function Pso +% +% references: +%{1} Verhoef (1998), 'Theory of radiative transfer models applied in +% optical remote sensing of vegetation canopies'. PhD Thesis Univ. Wageninegn +%{2} Verhoef, W., Jia, L., Xiao, Q. and Su, Z. (2007) Unified optical - +% thermal four - stream radiative transfer theory for homogeneous +% vegetation canopies. IEEE Transactions on geoscience and remote +% sensing, 45,6. +%{3} Verhoef (1985), 'Earth Observation Modeling based on Layer Scattering +% Matrices', Remote sensing of Environment, 17:167-175 +% +% Usage: +% function [rad,gap,profiles] = RTMo(spectral,atmo,soil,leafopt,canopy,angles,meteo,rad,options) +% +% The input and output are structures. These structures are further +% specified in a readme file. +% +% Input: +% spectral information about wavelengths and resolutions +% atmo MODTRAN atmospheric parameters +% soil soil properties +% leafopt leaf optical properties +% canopy canopy properties (such as LAI and height) +% angles viewing and observation angles +% meteo has the meteorological variables. Is only used to correct +% the total irradiance if a specific value is provided +% instead of the usual Modtran output. +% rad initialization of the structure of the output 'rad' +% options simulation options. Here, the option +% 'calc_vert_profiles' is used, a boolean that tells whether +% or not to output data of 60 layers separately. +% +% Output: +% gap probabilities of direct light penetration and viewing +% rad a large number of radiative fluxes: spectrally distributed +% and integrated, and canopy radiative transfer coefficients. +% profiles vertical profiles of radiation variables such as absorbed +% PAR. + +%% 0. Preparations +deg2rad = pi/180; +wl = spectral.wlS'; % SCOPE wavelengths as a column-vector +nwl = length(wl); + +wlP = spectral.wlP; +wlT = spectral.wlT; +wlPAR = spectral.wlPAR'; % PAR wavelength range +minPAR = min(wlPAR); +maxPAR = max(wlPAR); +Ipar = find(wl>=minPAR & wl<=maxPAR); % Indices for PAR wavelenghts within wl + +tts = angles.tts; % solar zenith angle +tto = angles.tto; % observer zenith angle +psi = angles.psi; % relative azimuth anglee + +nl = canopy.nlayers; % number of canopy layers (60) +litab = canopy.litab; % SAIL leaf inclibation angles +lazitab = canopy.lazitab; % leaf azimuth angles relative to the sun +nli = canopy.nlincl; % numler of leaf inclinations (13) +nlazi = canopy.nlazi; % number of azimuth angles (36) +LAI = canopy.LAI; % leaf area index +lidf = canopy.lidf; % leaf inclination distribution function +x = canopy.x; % all levels except for the top +dx = 1/nl; + +kChlrel = leafopt.kChlrel; +rho = leafopt.refl; % [nwl] leaf/needle reflection +tau = leafopt.tran; % [nwl] leaf/needle transmission +rs = soil.refl; % [nwl,nsoils] soil reflectance spectra +epsc = 1-rho-tau; % [nwl] emissivity of leaves +epss = 1-rs; % [nwl] emissivity of soil +iLAI = LAI/nl; % [1] LAI of elementary layer +xl = [0; x]; % [nl+1] all levels + soil + +% 0.2 initialisations (allocation of memory) +Rndif = zeros(nl,1); % [nl+1] abs. diffuse rad soil+veg +[Pdif,Pndif,Pndif_Cab,Rndif_PAR] = deal(zeros(nl,1)); % [nl] incident and net PAR veg +[Emin_,Eplu_] = deal(zeros(nl+1,nwl)); % [nl+1,nwl] up and down diff. rad. +[Rndif_] = zeros(nl,nwl); % [nl,nwl] abs diff and PAR veg. +[Pndif_,Pndif_Cab_,Rndif_PAR_] = deal(zeros(nl,length(Ipar))); +[Puc,Rnuc,Pnuc,Pnuc_Cab,Rnuc_PAR] = deal(zeros(nli,nlazi,nl)); % [nli,nlazi,nl] inc and net rad and PAR sunlit + +%% 1.0 Geometric quantities +% 1.1 general geometric quantities +% these variables are scalars +cos_tts = cos(tts*deg2rad); % cos solar angle +tan_tto = tan(tto*deg2rad); % tan observation angle + +cos_tto = cos(tto*deg2rad); % cos observation angle +sin_tts = sin(tts*deg2rad); % sin solar angle +tan_tts = tan(tts*deg2rad); % tan observation angle + +psi = abs(psi-360*round(psi/360)); % (to ensure that volscatt is symmetric for psi=90 and psi=270) +dso = sqrt(tan_tts.^2 + tan_tto.^2 - 2*tan_tts.*tan_tto.*cos(psi*deg2rad)); + +% 1.2 geometric factors associated with extinction and scattering +[chi_s,chi_o,frho,ftau]=volscat(tts,tto,psi,litab); % volume scattering + +cos_ttlo = cos(lazitab*deg2rad); % [1,36] cos leaf azimuth angles + +cos_ttli = cos(litab*deg2rad); % [13] cos leaf angles +sin_ttli = sin(litab*deg2rad); % [13] sinus leaf angles + +ksli = chi_s./cos_tts; % [13] p306{1} extinction coefficient in direction of sun per leaf angle +koli = chi_o./cos_tto; % [13] p307{1} extinction coefficient in direction of observer per leaf angle + +sobli = frho*pi/(cos_tts*cos_tto); % [13] pag 309{1} area scattering coefficient fractions +sofli = ftau*pi/(cos_tts*cos_tto); % [13] pag 309{1} +bfli = cos_ttli.^2; % [13] + +%integration over angles (using a vector inproduct) -> scalars +k = ksli'*lidf; % pag 306{1} extinction coefficient in direction of sun. +K = koli'*lidf; % pag 307{1} extinction coefficient in direction of observer +bf = bfli'*lidf; % +sob = sobli'*lidf; % weight of specular2directional back scatter coefficient +sof = sofli'*lidf; % weight of specular2directional forward scatter coefficient +% 1.3 geometric factors to be used later with rho and tau, f1 f2 of pag 304: +% these variables are scalars +sdb = 0.5*(k+bf); % fs*f1 +sdf = 0.5*(k-bf); % fs*f2 weight of specular2diffuse foward scatter coefficient +ddb = 0.5*(1+bf); % f1^2+f2^2 weight of diffuse2diffuse back scatter coefficient +ddf = 0.5*(1-bf); % 2*f1*f2 weight of diffuse2diffuse forward scatter coefficient +dob = 0.5*(K+bf); % fo*f1 weight of diffuse2directional back scatter coefficient +dof = 0.5*(K-bf); % fo*f2 weight of diffuse2directional forward scatter coefficient + +% 1.4 solar irradiance factor for all leaf orientations +Cs = cos_ttli*cos_tts; % [nli] pag 305 modified by Joris +Ss = sin_ttli*sin_tts; % [nli] pag 305 modified by Joris + +cos_deltas = Cs*ones(1,nlazi) + Ss*cos_ttlo; % [nli,nlazi] +fs = abs(cos_deltas/cos_tts); % [nli,nlazi] pag 305 + +% 1.5 probabilities Ps, Po, Pso +Ps = exp(k*xl*LAI); % [nl+1] p154{1} probability of viewing a leaf in solar dir +Po = exp(K*xl*LAI); % [nl+1] p154{1} probability of viewing a leaf in observation dir + +Ps(1:nl) = Ps(1:nl) *(1-exp(-k*LAI*dx))/(k*LAI*dx); % Correct Ps/Po for finite dx +Po(1:nl) = Po(1:nl) *(1-exp(-K*LAI*dx))/(K*LAI*dx); % Correct Ps/Po for finite dx + + +q = canopy.hot; +Pso = zeros(size(Po)); +for j=1:length(xl) + Pso(j,:)= quad(@(y)Psofunction(K,k,LAI,q,dso,y),xl(j)-dx,xl(j))/dx; %#ok +end + +Pso(Pso>Po)= min([Po(Pso>Po),Ps(Pso>Po)],[],2); %takes care of rounding error +Pso(Pso>Ps)= min([Po(Pso>Ps),Ps(Pso>Ps)],[],2); %takes care of rounding error + +gap.Pso = Pso; + +%% 2. Calculation of upward and downward fluxes + +% the following are vectors with lenght nwl +sigb = ddb*rho + ddf*tau; % [nwl] sigmab, p305{1} diffuse backscatter scattering coefficient for diffuse incidence +sigf = ddf*rho + ddb*tau; % [nwl] sigmaf, p305{1} diffuse forward scattering coefficient for forward incidence +sb = sdb*rho + sdf*tau; % [nwl] sb, p305{1} diffuse backscatter scattering coefficient for specular incidence +sf = sdf*rho + sdb*tau; % [nwl] sf, p305{1} diffuse forward scattering coefficient for specular incidence +vb = dob*rho + dof*tau; % [nwl] vb, p305{1} directional backscatter scattering coefficient for diffuse incidence +vf = dof*rho + dob*tau; % [nwl] vf, p305{1} directional forward scattering coefficient for diffuse incidence +w = sob*rho + sof*tau; % [nwl] w, p309{1} bidirectional scattering coefficent (directional-directional) +a = 1-sigf; % [nwl] attenuation +m = sqrt(a.^2-sigb.^2); % [nwl] +rinf = (a-m)./sigb; % [nwl] +rinf2 = rinf.*rinf; % [nwl] + +% direct solar radiation +J1k = calcJ1(-1, m,k,LAI); % [nwl] +J2k = calcJ2( 0, m,k,LAI); % [nwl] +J1K = calcJ1(-1, m,K,LAI); % [nwl] % added for calculation of rdo +J2K = calcJ2( 0, m,K,LAI); % [nwl] % added for calculation of rdo + +e1 = exp(-m*LAI); % [nwl] +e2 = e1.^2; % [nwl] +re = rinf.*e1; % [nwl] + +denom = 1-rinf2.*e2; % [nwl] + +s1 = sf+rinf.*sb; +s2 = sf.*rinf+sb; +v1 = vf+rinf.*vb; +v2 = vf.*rinf+vb; + +Pss = s1.*J1k; % [nwl] +Qss = s2.*J2k; % [nwl] + +Poo = v1.*J1K; % (nwl) % added for calculation of rdo +Qoo = v2.*J2K; % [nwl] % added for calculation of rdo + +tau_ss = exp(-k*LAI); % [1] +tau_oo = exp(-K*LAI); % [1] + +Z = (1 - tau_ss * tau_oo)/(K + k); % needed for analytic rso + +tau_dd = (1-rinf2).*e1 ./denom; % [nwl] +rho_dd = rinf.*(1-e2) ./denom; % [nwl] +tau_sd = (Pss-re.*Qss) ./denom; % [nwl] +tau_do = (Poo-re.*Qoo) ./denom; % [nwl] +rho_sd = (Qss-re.*Pss) ./denom; % [nwl] +rho_do = (Qoo-re.*Poo) ./denom; % (nwl) + +T1 = v2.*s1.*(Z-J1k*tau_oo)./(K+m)+v1.*s2.*(Z-J1K*tau_ss)./(k+m); +T2 = -(Qoo.*rho_sd+Poo.*tau_sd).*rinf; +rho_sod = (T1+T2)./(1-rinf2); + +rho_sos = w * sum(Pso(1:nl))*iLAI; +rho_so = rho_sod + rho_sos; + +Pso2w = Pso(nl+1); + +% Analytical rso following SAIL + +rso = rho_so + rs * Pso2w ... + + ((tau_sd+tau_ss*rs.*rho_dd)*tau_oo+(tau_sd+tau_ss).*tau_do) ... + .*rs./denom; + +% Extract MODTRAN atmosphere parameters at the SCOPE wavelengths + t1 = atmo.M(:,1); + t3 = atmo.M(:,2); + t4 = atmo.M(:,3); + t5 = atmo.M(:,4); + t12 = atmo.M(:,5); + t16 = atmo.M(:,6); + +% radiation fluxes, downward and upward (these all have dimenstion [nwl] +% first calculate hemispherical reflectances rsd and rdd according to SAIL +% these are assumed for the reflectance of the surroundings +% rdo is computed with SAIL as well + +denom = 1-rs.*rho_dd; + +% SAIL analytical reflectances + +rsd = rho_sd + (tau_ss + tau_sd).*rs.*tau_dd./denom; +rdd = rho_dd + tau_dd.*rs.*tau_dd./denom; + +rdo = rho_do + (tau_oo + tau_do).*rs.*tau_dd./denom; + + + +% assume Fd of surroundings = 0 for the momemnt +% initial guess of temperature of surroundings from Ta; + +Fd = zeros(nwl,1); +Ls = equations.Planck(wl,atmo.Ta+273.15); + +% Solar and sky irradiance using 6 atmosperic functions +%keyboard +Esun_ = pi*t1.*t4; +Esky_ = pi./(1-t3.*rdd).*(t1.*(t5+t12.*rsd)+Fd+(1-rdd).*Ls.*t3+t16); + +% fractional contributions of Esun and Esky to total incident radiation in +% optical and thermal parts of the spectrum +[fEsuno,fEskyo,fEsunt,fEskyt] = deal(0*Esun_); %initialization + +J_o = wl<3000; %find optical spectrum +Esunto = 0.001 * helpers.Sint(Esun_(J_o),wl(J_o)); %Calculate optical sun fluxes (by Integration), including conversion mW >> W +Eskyto = 0.001 * helpers.Sint(Esky_(J_o),wl(J_o)); %Calculate optical sun fluxes (by Integration) +Etoto = Esunto + Eskyto; %Calculate total fluxes +fEsuno(J_o) = Esun_(J_o)/Etoto; %fraction of contribution of Sun fluxes to total light +fEskyo(J_o) = Esky_(J_o)/Etoto; %fraction of contribution of Sky fluxes to total light + +J_t = wl>=3000; %find thermal spectrum +Esuntt = 0.001 * helpers.Sint(Esun_(J_t),wl(J_t)); %Themal solar fluxes +Eskytt = 0.001 * helpers.Sint(Esky_(J_t),wl(J_t)); %Thermal Sky fluxes +Etott = Eskytt + Esuntt; %Total +fEsunt(J_t) = Esun_(J_t)/Etott; %fraction from Esun +fEskyt(J_t) = Esky_(J_t)/Etott; %fraction from Esky + +if meteo.Rin ~= -999 + Esun_(J_o) = fEsuno(J_o)*meteo.Rin; + Esky_(J_o) = fEskyo(J_o)*meteo.Rin; + Esun_(J_t) = fEsunt(J_t)*meteo.Rli; + Esky_(J_t) = fEskyt(J_t)*meteo.Rli; +end + +Eplu_1 = rs.*((tau_ss+tau_sd).*Esun_+tau_dd.*Esky_)./denom; +Eplu0 = rho_sd.*Esun_ + rho_dd.*Esky_ + tau_dd.*Eplu_1; +Emin_1 = tau_sd.*Esun_ + tau_dd.*Esky_ + rho_dd.*Eplu_1; +delta1 = Esky_ - rinf.*Eplu0; +delta2 = Eplu_1 - rinf.*Emin_1; + +% calculation of the fluxes in the canopy +for i = 1:nwl + J1kx = calcJ1(xl,m(i),k,LAI); % [nl] + J2kx = calcJ2(xl,m(i),k,LAI); % [nl] + F1 = Esun_(i)*J1kx*(sf(i)+rinf(i)*sb(i)) + delta1(i)*exp( m(i)*LAI*xl); %[nl] + F2 = Esun_(i)*J2kx*(sb(i)+rinf(i)*sf(i)) + delta2(i)*exp(-m(i)*LAI*(xl+1)); %[nl] + Emin_(:,i) = (F1+rinf(i)*F2)/(1-rinf2(i));% [nl,nwl] + Eplu_(:,i) = (F2+rinf(i)*F1)/(1-rinf2(i));% [nl,nwl] +end + +% Incident and absorbed solar radiation +Psun = 0.001 * helpers.Sint(e2phot(wlPAR*1E-9,Esun_(Ipar)),wlPAR); % Incident solar PAR in PAR units +%Psky = 0.001 * helpers.Sint(e2phot(wlPAR*1E-9,Esky_(Ipar)),wlPAR); +Asun = 0.001 * helpers.Sint(Esun_.*epsc,wl); % Total absorbed solar radiation +Pnsun = 0.001 * helpers.Sint(e2phot(wlPAR*1E-9,Esun_(Ipar).*epsc(Ipar)),wlPAR); % Absorbed solar radiation in PAR range in moles m-2 s-1 +Rnsun_PAR = 0.001 * helpers.Sint(Esun_(Ipar).*epsc(Ipar),wlPAR); +Pnsun_Cab = 0.001 * helpers.Sint(e2phot(wlPAR*1E-9,kChlrel(Ipar).*Esun_(Ipar).*epsc(Ipar)),wlPAR); + % Absorbed solar radiation by Cab in PAR range in moles m-2 s-1 + +%% 3. outgoing fluxes, hemispherical and in viewing direction, spectrum +% (CvdT 071105: compared with analytical solution: is OK) +% hemispherical, spectral +Eout_ = Eplu_(1,:)'; % [nwl] + +% in viewing direction, spectral +piLoc_ = (vb.*(Emin_(1:nl,:)'*Po(1:nl)) +... + vf.*(Eplu_(1:nl,:)'*Po(1:nl)) +... + w.*Esun_*sum(Pso(1:nl)))*iLAI; +piLos_ = rs.*Emin_(nl+1,:)'*Po(nl+1) + rs.*Esun_*Pso(nl+1); +piLo_ = piLoc_ + piLos_; % [nwl] +Lo_ = piLo_/pi; + +% up and down and hemispherical out, cumulative over wavelenght +IwlP = spectral.IwlP; +IwlT = spectral.IwlT; +Eouto = 0.001 * helpers.Sint(Eout_(IwlP),wlP); % [1] hemispherical out, in optical range (W m-2) +Eoutt = 0.001 * helpers.Sint(Eout_(IwlT),wlT); % [1] hemispherical out, in thermal range (W m-2) + +%% 4. net fluxes, spectral and total, and incoming fluxes +% incident PAR at the top of canopy, spectral and spectrally integrated +P_ = e2phot(wl(Ipar)*1E-9,(Esun_(Ipar)+Esky_(Ipar))); +P = .001 * helpers.Sint(P_,wlPAR); + +% total direct radiation (incident and net) per leaf area (W m-2 leaf) +Pdir = fs * Psun; % [13 x 36] incident +Rndir = fs * Asun; % [13 x 36] net +Pndir = fs * Pnsun; % [13 x 36] net PAR +Pndir_Cab = fs * Pnsun_Cab; % [13 x 36] net PAR Cab +Rndir_PAR = fs * Rnsun_PAR; % [13 x 36] net PAR energy units + + +% canopy layers, diffuse radiation +for j = 1:nl + % diffuse incident radiation for the present layer 'j' (mW m-2 um-1) + E_ = .5*(Emin_(j,:) + Emin_(j+1,:)+ Eplu_(j,:)+ Eplu_(j+1,:)); + + % incident PAR flux, integrated over all wavelengths (moles m-2 s-1) + Pdif(j) = .001 * helpers.Sint(e2phot(wlPAR*1E-9,E_(Ipar)'),wlPAR); % [nl] , including conversion mW >> W + + % net radiation (mW m-2 um-1) and net PAR (moles m-2 s-1 um-1), per wavelength + Rndif_(j,:) = E_.*epsc'; % [nl,nwl] Net (absorbed) radiation by leaves + Pndif_(j,:) = .001 *(e2phot(wlPAR*1E-9, Rndif_(j,Ipar)'))'; % [nl,nwl] Net (absorbed) as PAR photons + Pndif_Cab_(j,:) = .001 *(e2phot(wlPAR*1E-9, kChlrel(Ipar).*Rndif_(j,Ipar)'))'; % [nl,nwl] Net (absorbed) as PAR photons by Cab + Rndif_PAR_(j,:) = Rndif_(j,Ipar); % [nl,nwlPAR] Net (absorbed) as PAR energy + + % net radiation (W m-2) and net PAR (moles m-2 s-1), integrated over all wavelengths + Rndif(j) = .001 * helpers.Sint(Rndif_(j,:),wl); % [nl] Full spectrum net diffuse flux + Pndif(j) = helpers.Sint(Pndif_(j,Ipar),wlPAR); % [nl] Absorbed PAR + Pndif_Cab(j) = helpers.Sint(Pndif_Cab_(j,Ipar),wlPAR); % [nl] Absorbed PAR by Cab integrated + Rndif_PAR(j) = .001 * helpers.Sint(Rndif_PAR_(j,Ipar),wlPAR); % [nl] Absorbed PAR by Cab integrated +end + +% soil layer, direct and diffuse radiation +Rndirsoil = .001 * helpers.Sint(Esun_.*epss,wl); % [1] Absorbed solar flux by the soil +Rndifsoil = .001 * helpers.Sint(Emin_(nl+1,:).*epss',wl); % [1] Absorbed diffuse downward flux by the soil (W m-2) + +% net (n) radiation R and net PAR P per component: sunlit (u), shaded (h) soil(s) and canopy (c), +% [W m-2 leaf or soil surface um-1] +Rnhc = Rndif; % [nl] shaded leaves or needles +Pnhc = Pndif; % [nl] shaded leaves or needles +Pnhc_Cab = Pndif_Cab; % [nl] shaded leaves or needles +Rnhc_PAR = Rndif_PAR; % [nl] shaded leaves or needles + +for j = 1:nl + Puc(:,:,j) = Pdir + Pdif(j); % [13,36,nl] Total fluxes on sunlit leaves or needles + Rnuc(:,:,j) = Rndir + Rndif(j); % [13,36,nl] Total fluxes on sunlit leaves or needles + Pnuc(:,:,j) = Pndir + Pndif(j); % [13,36,nl] Total fluxes on sunlit leaves or needles + Pnuc_Cab(:,:,j) = Pndir_Cab + Pndif_Cab(j);% [13,36,nl] Total fluxes on sunlit leaves or needles + Rnuc_PAR(:,:,j) = Rndir_PAR + Rndif_PAR(j);% [13,36,nl] Total fluxes on sunlit leaves or needles +end +Rnhs = Rndifsoil; % [1] shaded soil +Rnus = Rndifsoil + Rndirsoil; % [1] sunlit soil + +%% +if options.calc_vert_profiles + [Pnu1d ] = equations.meanleaf(canopy,Pnuc, 'angles'); % [nli,nlo,nl] mean net radiation sunlit leaves + [Pnu1d_Cab ] = equations.meanleaf(canopy,Pnuc_Cab, 'angles'); % [nli,nlo,nl] mean net radiation sunlit leaves + + profiles.Pn1d = ((1-Ps(1:nl)).*Pnhc + Ps(1:nl).*(Pnu1d)); %[nl] mean photos leaves, per layer + profiles.Pn1d_Cab = ((1-Ps(1:nl)).*Pnhc_Cab + Ps(1:nl).*(Pnu1d_Cab)); %[nl] mean photos leaves, per layer +else + profiles = struct; +end + +%% place output in structure rad +gap.k = k; +gap.K = K; +gap.Ps = Ps; +gap.Po = Po; + +rad.rsd = rsd; +rad.rdd = rdd; +rad.rdo = rdo; +rad.rso = rso; + +rad.vb = vb; +rad.vf = vf; + +rad.Esun_ = Esun_; % [2162x1 double] incident solar spectrum (mW m-2 um-1) +rad.Esky_ = Esky_; % [2162x1 double] incident sky spectrum (mW m-2 um-1) +rad.PAR = P; % [1 double] incident spectrally integrated PAR (moles m-2 s-1) + +rad.fEsuno = fEsuno; % [2162x1 double] normalized spectrum of direct light (optical) +rad.fEskyo = fEskyo; % [2162x1 double] normalized spectrum of diffuse light (optical) +rad.fEsunt = fEsunt; % [2162x1 double] normalized spectrum of direct light (thermal) +rad.fEskyt = fEskyt; % [2162x1 double] normalized spectrum of diffuse light (thermal) + +rad.Eplu_ = Eplu_; % [61x2162 double] upward diffuse radiation in the canopy (mW m-2 um-1) +rad.Emin_ = Emin_; % [61x2162 double] downward diffuse radiation in the canopy (mW m-2 um-1) + +rad.Lo_ = Lo_; % [2162x1 double] TOC radiance in observation direction (mW m-2 um-1 sr-1) +rad.Eout_ = Eout_; % [2162x1 double] TOC upward radiation (mW m-2 um-1) +rad.Eouto = Eouto; % [1 double] TOC spectrally integrated upward optical ratiation (W m-2) +rad.Eoutt = Eoutt; % [1 double] TOC spectrally integrated upward thermal ratiation (W m-2) + +rad.Rnhs = Rnhs; % [1 double] net radiation (W m-2) of shaded soil +rad.Rnus = Rnus; % [1 double] net radiation (W m-2) of sunlit soil +rad.Rnhc = Rnhc; % [60x1 double] net radiation (W m-2) of shaded leaves +rad.Rnuc = Rnuc; % [13x36x60 double] net radiation (W m-2) of sunlit leaves +rad.Pnh = Pnhc; % [60x1 double] net PAR (moles m-2 s-1) of shaded leaves +rad.Pnu = Pnuc; % [13x36x60 double] net PAR (moles m-2 s-1) of sunlit leaves +rad.Pnh_Cab = Pnhc_Cab; % [60x1 double] net PAR absorbed by Cab (moles m-2 s-1) of shaded leaves +rad.Pnu_Cab = Pnuc_Cab; % [13x36x60 double] net PAR absorbed by Cab (moles m-2 s-1) of sunlit leaves +rad.Rnh_PAR = Rnhc_PAR; % [60x1 double] net PAR absorbed by Cab (moles m-2 s-1) of shaded leaves +rad.Rnu_PAR = Rnuc_PAR; % [13x36x60 double] net PAR absorbed (W m-2) of sunlit +rad.Etoto = Etoto; + +%% APPENDIX I functions J1 and J2 (introduced for numerically stable solutions) + +function J1 = calcJ1(x,m,k,LAI) +if abs(m-k)>1E-3; + J1 = (exp(m*LAI*x)-exp(k*LAI*x))./(k-m); +else + J1 = -.5*(exp(m*LAI*x)+exp(k*LAI*x))*LAI.*x.*(1-1/12*(k-m).^2*LAI^2.*x.^2); +end +return + +function J2 = calcJ2(x,m,k,LAI) +J2 = (exp(k*LAI*x)-exp(-k*LAI)*exp(-m*LAI*(1+x)))./(k+m); +return; + +%% APPENDIX II function volscat + +function [chi_s,chi_o,frho,ftau] = volscat(tts,tto,psi,ttli) + +%Volscatt version 2. +%created by W. Verhoef +%edited by Joris Timmermans to matlab nomenclature. +% date: 11 February 2008 +%tts [1] Sun zenith angle in degrees +%tto [1] Observation zenith angle in degrees +%psi [1] Difference of azimuth angle between solar and viewing position +%ttli [ttli] leaf inclination array + +deg2rad = pi/180; +nli = length(ttli); + +psi_rad = psi*deg2rad*ones(nli,1); + +cos_psi = cos(psi*deg2rad); % cosine of relative azimuth angle + +cos_ttli = cos(ttli*deg2rad); % cosine of normal of upperside of leaf +sin_ttli = sin(ttli*deg2rad); % sine of normal of upperside of leaf + +cos_tts = cos(tts*deg2rad); % cosine of sun zenith angle +sin_tts = sin(tts*deg2rad); % sine of sun zenith angle + +cos_tto = cos(tto*deg2rad); % cosine of observer zenith angle +sin_tto = sin(tto*deg2rad); % sine of observer zenith angle + +Cs = cos_ttli*cos_tts; % p305{1} +Ss = sin_ttli*sin_tts; % p305{1} + +Co = cos_ttli*cos_tto; % p305{1} +So = sin_ttli*sin_tto; % p305{1} + +As = max([Ss,Cs],[],2); +Ao = max([So,Co],[],2); + +bts = acos(-Cs./As); % p305{1} +bto = acos(-Co./Ao); % p305{2} + +chi_o = 2/pi*((bto-pi/2).*Co + sin(bto).*So); +chi_s = 2/pi*((bts-pi/2).*Cs + sin(bts).*Ss); + +delta1 = abs(bts-bto); % p308{1} +delta2 = pi-abs(bts + bto - pi); % p308{1} + +Tot = psi_rad + delta1 + delta2; % pag 130{1} + +bt1 = min([psi_rad,delta1],[],2); +bt3 = max([psi_rad,delta2],[],2); +bt2 = Tot - bt1 - bt3; + +T1 = 2.*Cs.*Co + Ss.*So.*cos_psi; +T2 = sin(bt2).*(2*As.*Ao + Ss.*So.*cos(bt1).*cos(bt3)); + +Jmin = ( bt2).*T1 - T2; +Jplus = (pi-bt2).*T1 + T2; + +frho = Jplus/(2*pi^2); +ftau = -Jmin /(2*pi^2); + +% pag.309 wl-> pag 135{1} +frho = max([zeros(nli,1),frho],[],2); +ftau = max([zeros(nli,1),ftau],[],2); +return + +%% APPENDIX III function e2phot + +function molphotons = e2phot(lambda,E) +%molphotons = e2phot(lambda,E) calculates the number of moles of photons +%corresponding to E Joules of energy of wavelength lambda (m) + +global constants; +A = constants.A; + +e = ephoton(lambda); +photons = E./e; +molphotons = photons./A; +return; + +function E = ephoton(lambda) +%E = phot2e(lambda) calculates the energy content (J) of 1 photon of +%wavelength lambda (m) + +global constants; +h = constants.h; % [J s] Planck's constant +c = constants.c; % [m s-1] speed of light +E = h*c./lambda; % [J] energy of 1 photon +return; + +%% APPENDIX IV function Pso + +function pso = Psofunction(K,k,LAI,q,dso,xl) +if dso~=0 + alf = (dso/q) *2/(k+K); + pso = exp((K+k)*LAI*xl + sqrt(K*k)*LAI/(alf )*(1-exp(xl*(alf ))));% [nl+1] factor for correlation of Ps and Po +else + pso = exp((K+k)*LAI*xl - sqrt(K*k)*LAI*xl);% [nl+1] factor for correlation of Ps and Po +end \ No newline at end of file diff --git a/src/RTMt_planck.m b/src/RTMt_planck.m new file mode 100644 index 00000000..f78b2eb5 --- /dev/null +++ b/src/RTMt_planck.m @@ -0,0 +1,211 @@ +function rad = RTMt_planck(spectral,rad,soil,leafopt,canopy,gap,angles,Tcu,Tch,Tsu,Tsh,obsdir) +% function 'RTMt_planck' calculates the spectrum of outgoing thermal +% radiation in hemispherical and viewing direction +% +% Authors: Wout Verhoef and Christiaan van der Tol (tol@itc.nl) +% Date: 5 November 2007 +% Update: 14 Nov 2007 +% 16 Nov 2007 CvdT improved calculation of net radiation +% 17 Dec 2007 JT simplified, removed net radiation +% 07 Nov 2008 CvdT changed layout +% 16 Mar 2009 CvdT removed calculation of Tbright +% 12 Apr 2013 CvdT introduced structures +% +% Table of contents of the function: +% 0. preparations +% 0.0 globals +% 0.1 initialisations +% 0.2 parameters +% 0.3 geometric factors of Observer +% 0.4 geometric factors associated with extinction and scattering +% 0.5 geometric factors to be used later with rho and tau +% 0.6 fo for all leaf angle/azumith classes +% 1 calculation of upward and downward fluxes +% 2 outgoing fluxes, hemispherical and in viewing direction +% A1 function planck (external function is now used) +% +% Usage: +% function rad = RTMt_planck(spectral,rad,soil,leafopt,canopy,gap,angles,Tcu,Tch,Tsu,Tsh,obsdir) +% +% Input: +% Symbol Description Unit Dimension +% ------ ----------- ---- --------- +% Tcu temperature sunlit leaves C [13,36,nl] +% Tch temperature shaded leaves C [nl] +% Tsu temperature sunlit soil C [1] +% Tsu temperature shaded soil C [1] +% rad a structure containing +% soil a structure containing soil reflectance +% canopy a structure containing LAI and leaf inclination + +% Ps probability of sunlit leaves [nl+1] +% Po probability of viewing a leaf or soil [nl+1] +% Pso probability of viewing a sunlit leaf/soil [nl+1] +% K extinction coefficient in viewing dir [1] +% tto viewing angle (degrees) [1] +% psi azimuth angle difference between solar and viewing position +% +% Output +% Symbol Description Unit Dimension +% ------ ----------- ---- --------- +% Loutt_ Spectrum of outgoing hemispherical rad (W m-2 um-1)[nwl] +% Lot_ Spectrum of outgoing rad in viewing dir (W m-2 um-1)[nwl] +% Eplu Total downward diffuse radiation (W m-2) [nl+1] +% Emin Total downward diffuse radiation (W m-2) [nl+1] +% +% Notes: +% nl number of layers +% nwl number of wavelengths of input (net PAR) +% '_'means: a flux at different wavelengths (a vertically oriented vector) + +%% 0.0 globals +global constants + +%% 0.1 parameters + +%for speed-up the calculation only uses thermal part of the spectrum +IT = spectral.IwlT; % +wlt = spectral.wlT; + +deg2rad = constants.deg2rad; +nl = canopy.nlayers; +lidf = canopy.lidf; +litab = canopy.litab; +lazitab = canopy.lazitab; +nlazi = length(lazitab); +tto = angles.tto; +psi = angles.psi; +Ps = gap.Ps; +Po = gap.Po; +Pso = gap.Pso; +K = gap.K; + +rho = leafopt.refl(IT); % [nwl] Leaf/needle reflection +tau = leafopt.tran(IT); % [nwl] Leaf/needle transmission +rs = soil.refl(IT); % [nwl] Soil reflectance +epsc = 1-rho-tau; % [nwl] Emissivity vegetation +epss = 1-rs; % [nwl] Emissivity soil +crit = max(1E-2); % [1] Desired minimum accuracy +LAI = canopy.LAI; +dx = 1/nl; +iLAI = LAI*dx; + +%% 0.2 initialization of output variables +Hcsui = zeros(nl,1); % [nl] +piLot_ = zeros(1,length(IT)); % [1,nwlt] +[Emin_,Eplu_] = deal(zeros(nl+1,length(IT))); % [nl+1,nwlt] + +%% 0.3 geometric factors of Observer +if obsdir + cos_tto = cos(tto*deg2rad);% [1] cos observation angle + sin_tto = sin(tto*deg2rad);% [1] sin observation angle +end + +%% 0.4 geometric factors associated with extinction and scattering +cos_ttl = cos(litab*deg2rad); % [nli] cos leaf inclination angles +if obsdir + sin_ttl = sin(litab*deg2rad); % [nli] sin leaf inclination angles + cos_ttlo = cos((lazitab-psi)*deg2rad); % [nlazi] sin leaf orientation angles +end +bfli = cos_ttl.^2; % [nli] +bf = bfli'*lidf; % [1] + +%% 0.5 geometric factors to be used later with rho and tau, f1 f2 of pag 304: +ddb = 0.5*(1+bf); % [1] W of dif2dif back (f1^2 + f2^2) +ddf = 0.5*(1-bf); % [1] W of dif2dif forward (2*f1*f2 ) +if obsdir + dob = 0.5*(K+bf); % [1] W of dif2dir back (fo*f1 ) + dof = 0.5*(K-bf); % [1] W of dif2dir back (fo*f1 ) +end + +%% 0.6 fo for all leaf angle/azumith classes +if obsdir + Co = cos_ttl*cos_tto; % [nli] pag 305 modified by Joris + So = sin_ttl*sin_tto; % [nli] pag 305 modified by Joris + + cos_deltao = Co*ones(1,nlazi) + So*cos_ttlo; % [nli,nlazi] projection of leaves in in direction of sun %(pag 125/126) + fo = cos_deltao/abs(cos_tto); % [nli,nlazi] +end + +%% 1. calculation of upward and downward fluxes +sigb = ddb*rho + ddf*tau; % [nwlt] diffuse backscatter scattering coefficient for diffuse incidence pag 305 +sigf = ddf*rho + ddb*tau; % [nwlt] diffuse forward scattering coefficient for forward incidence +if obsdir + vb = dob*rho + dof*tau; % [nwlt] directional backscatter scattering coefficient for diffuse incidence + vf = dof*rho + dob*tau; % [nwlt] directional forward scattering coefficient for diffuse incidence +end +a = 1-sigf; % [nwlt] attenuation +m = sqrt(a.^2-sigb.^2); % [nwlt] +rinf = (a-m)./sigb; % [nwlt] reflection coefficient for infinite thick canopy +rinf2 = rinf.*rinf; % [nwlt] + +fHs = (1-rinf2).*(1-rs)./(1-rinf.*rs); +fHc = iLAI*m.*(1-rinf); +fbottom = (rs-rinf)./(1-rinf.*rs); + +for i = 1:length(IT) + % 1.1 radiance by components + Hcsui3 = pi*equations.Planck(wlt(i),Tcu+273.15,epsc(i)); + Hcshi = pi*equations.Planck(wlt(i),Tch+273.15,epsc(i)); + Hssui = pi*equations.Planck(wlt(i),Tsu+273.15,epss(i)); + Hsshi = pi*equations.Planck(wlt(i),Tsh+273.15,epss(i)); + % 1.2 radiance by leaf layers Hc and by soil Hs + for j = 1:nl + Hcsui2 = Hcsui3(:,:,j); % [nli,nlazi] sunlit leaves + Hcsui(j) = mean(Hcsui2'*lidf); % [nl] sunlit vegetation radiance per layer + end + Hci = Hcsui.*Ps(1:nl) + Hcshi.*(1-Ps(1:nl)); %[nl] emitted vegetation radiance per layer + Hsi = Hssui.*Ps(nl+1) + Hsshi.*(1-Ps(nl+1)); %[1] emitted soil radiance per layer + + % 1.3 Diffuse radiation + cont = 1; % [1] continue iteration (1:yes, 0:no) + counter = 0; % [1] iteration counter + F1 = zeros(nl+1,1); % [nl+1] + F2 = zeros(nl+1,1); % [nl+1] + F1top = 0; % [1] + while cont + F1topn = -rinf(i)*F2(1); + F1(1) = F1topn; + for j = 1:nl + F1(j+1) = F1(j)*(1-m(i)*iLAI)+ fHc(i)*Hci(j); + end + F2(nl+1) = fbottom(i)*F1(nl+1) + fHs(i)*Hsi; + for j = nl:-1:1 + F2(j) = F2(j+1)*(1-m(i)*iLAI) + fHc(i)*Hci(j); + end + cont = abs(F1topn-F1top)>crit; % [1] check to continue + F1top = F1topn; % [1] Reset F1topn + counter = counter + 1; % [1] + end + Emini = (F1+rinf(i)*F2)/(1-rinf2(i)); % [nl+1] + Eplui = (F2+rinf(i)*F1)/(1-rinf2(i)); % [nl+1] + + Emin_(:,i) = Emini; % downwelling diffuse radiance per layer + Eplu_(:,i) = Eplui; % upwelling diffuse radiance + + % 1.4 Directional radiation + if obsdir + for j = 1:nl + Hcsui2 = Hcsui3(:,:,j).*abs(fo); + Hcsui(j) = mean(Hcsui2'*lidf); + end + + piLo1 = iLAI*K*sum(Hcshi.*(Po(1:nl)-Pso(1:nl))); % directional emitted radiation by shaded leaves + piLo2 = iLAI*sum(Hcsui.*(Pso(1:nl ))); % directional emitted radiation by sunlit leaves + piLo3 = iLAI*((vb(i)*Emini(1:nl) + vf(i)*Eplui(1:nl))'*Po(1:nl));% directional scattered radiation by vegetation for diffuse incidence + piLo4 = Hsshi*(Po(nl+1)-Pso(nl+1)); + piLo5 = Hssui* Pso(nl+1); % directional emitted radiation by sunlit/shaded Soil + piLo6 = rs(i)*Emini(nl+1)*Po(nl+1); % directional scattered radiation by soil for diffuse incidence + + piLot_(i) = piLo1 + sum(piLo2) + piLo3 + piLo4 + piLo5 + piLo6; % directional total radiation + Lot_ = piLot_/pi; + end +end + +%% 2. Write the output to structure rad +[rad.Lot_,rad.Eoutte_] = deal(zeros(length(spectral.wlS),1)); +rad.Lot_(IT) = Lot_; +rad.Eoutte_(IT) = Eplu_(1,:); % emitted diffuse radiance at top +rad.Eplut_ = Eplu_; +rad.Emint_ = Emin_; +return diff --git a/src/RTMt_sb.m b/src/RTMt_sb.m new file mode 100644 index 00000000..a8f325d3 --- /dev/null +++ b/src/RTMt_sb.m @@ -0,0 +1,229 @@ +function [rad] = RTMt_sb(spectral,rad,soil,leafopt,canopy,gap,angles,Tcu,Tch,Tsu,Tsh,obsdir) + +% function 'RTMt_sb' calculates total outgoing radiation in hemispherical +% direction and total absorbed radiation per leaf and soil component. +% Radiation is integrated over the whole thermal spectrum with +% Stefan-Boltzman's equation. This function is a simplified version of +% 'RTMt_planck', and is less time consuming since it does not do the +% calculation for each wavelength separately. +% +% Authors: Wout Verhoef and Christiaan van der Tol (tol@itc.nl) +% date: 5 Nov 2007 +% update: 13 Nov 2007 +% 16 Nov 2007 CvdT improved calculation of net radiation +% 27 Mar 2008 JT added directional calculation of radiation +% 24 Apr 2008 JT Introduced dx as thickness of layer (see parameters) +% 31 Oct 2008 JT introduced optional directional calculation +% 31 Oct 2008 JT changed initialisation of F1 and F2 -> zeros +% 07 Nov 2008 CvdT changed layout +% 16 Mar 2009 CvdT removed Tbright calculation +% Feb 2013 WV introduces structures for version 1.40 +% +% Table of contents of the function +% 0 preparations +% 0.0 globals +% 0.1 initialisations +% 0.2 parameters +% 0.3 geometric factors of Observer +% 0.4 geometric factors associated with extinction and scattering +% 0.5 geometric factors to be used later with rho and tau +% 0.6 fo for all leaf angle/azumith classes +% 1 calculation of upward and downward fluxes +% 2 total net fluxes +% Appendix A. Stefan-Boltzmann +% +% usage: +% [rad] = RTMt_sb(options,spectral,rad,soil,leafopt,canopy,gap,angles,Tcu,Tch,Tsu,Tsh) +% +% Most input and output are structures. These structures are further +% specified in a readme file. The temperatures Tcu, Tch, Tsu and Tsh are +% variables. +% +% Input: +% options calculation options +% spectral information about wavelengths and resolutions +% rad a large number of radiative fluxes: spectrally distributed +% and integrated, and canopy radiative transfer coefficients +% soil soil properties +% leafopt leaf optical properties +% canopy canopy properties (such as LAI and height) +% gap probabilities of direct light penetration and viewing +% angles viewing and observation angles +% Tcu Temperature of sunlit leaves (oC), [13x36x60] +% Tch Temperature of shaded leaves (oC), [13x36x60] +% Tsu Temperature of sunlit soil (oC), [1] +% Tsh Temperature of shaded soil (oC), [1] +% +% Output: +% rad a large number of radiative fluxes: spectrally distributed +% and integrated, and canopy radiative transfer coefficients. +% Here, thermal fluxes are added +%% 0.0 globals +global constants + +%% 0.1 parameters + +IT = find(spectral.wlS == 10000); % Take 10 microns as representative wavelength for the thermal + +deg2rad = constants.deg2rad; +nl = canopy.nlayers; +lidf = canopy.lidf; +litab = canopy.litab; +lazitab = canopy.lazitab; +nlazi = length(lazitab); +tto = angles.tto; +psi = angles.psi; +Ps = gap.Ps; +K = gap.K; + +rho = leafopt.refl(IT); % [nwl] Leaf/needle reflection +tau = leafopt.tran(IT); % [nwl] Leaf/needle transmission +rs = soil.refl(IT); % [nwl] Soil reflectance +epsc = 1-rho-tau; % [nwl] Emissivity vegetation +epss = 1-rs; % [nwl] Emissivity soil +crit = max(1E-2); % [1] Desired minimum accuracy +LAI = canopy.LAI; +dx = 1/nl; +iLAI = LAI*dx; + +%% 0.2 initialiations +Rnhc = zeros(nl,1); % [nl] +Rnuc = zeros(size(Tcu)); % [13,36,nl] + +%% 0.3 geometric factors of observer +if obsdir + cos_tto = cos(tto*deg2rad); % [1] cos observation angle + sin_tto = sin(tto*deg2rad); % [1] sin observation angle +end + +%% 0.4 geometric factors associated with extinction and scattering +cos_ttl = cos(litab*deg2rad); +if obsdir + sin_ttl = sin(litab*deg2rad); + cos_ttlo= cos((lazitab-psi)*deg2rad); +end +bfli = cos_ttl.^2; +bf = bfli'*lidf; + +%% 0.5 geometric factors to be used later with rho and tau, f1 f2 of pag 304: +ddb = 0.5*(1+bf); % f1^2 + f2^2 +ddf = 0.5*(1-bf); % 2*f1*f2 +if obsdir + dob = 0.5*(K+bf); % fo*f1 + dof = 0.5*(K-bf); % fo*f1 +end + +%% 0.6 fo for all leaf angle/azumith classes +if obsdir + Co = cos_ttl*cos_tto; % [nli] pag 305 + So = sin_ttl*sin_tto; % [nli] pag 305 + cos_deltao = Co*ones(1,nlazi) + So*cos_ttlo;% [nli, nlazi] projection of leaves in in direction of sun (pag 125-126) + fo = cos_deltao/abs(cos_tto);% [nli, nlazi] leaf area projection factors in direction of observation +end + +%% 1. calculation of upward and downward fluxes pag 305 +sigb = ddb*rho + ddf*tau; % [nwlt] Diffuse backscatter scattering coefficient +sigf = ddf*rho + ddb*tau; % [nwlt] Diffuse forward scattering coefficient +if obsdir + vb = dob*rho + dof*tau; % [nwlt] Directional backscatter scattering coefficient for diffuse incidence + vf = dof*rho + dob*tau; % [nwlt] Directional forward scattering coefficient for diffuse incidence +end +a = 1-sigf; % [nwlt] Attenuation +m = sqrt(a*a-sigb*sigb);% [nwlt] +rinf = (a-m)/sigb; % [nwlt] Reflection coefficient for infinite thick canopy +rinf2 = rinf*rinf; % [nwlt] + +fHs = (1-rinf2)*(1-rs)/(1-rinf*rs); +fHc = iLAI*m*(1-rinf); +fbottom = (rs-rinf)/(1-rs*rinf); + +%1.1 radiance by components +Hcsu3 = Stefan_Boltzmann(Tcu);% Radiance by sunlit leaves +Hcsh = Stefan_Boltzmann(Tch);% Radiance by shaded leaves +Hssu = Stefan_Boltzmann(Tsu);% Radiance by sunlit soil +Hssh = Stefan_Boltzmann(Tsh);% Radiance by shaded soil + +% 1.2 radiance by leaf layers Hv and by soil Hs (modified by JAK 2015-01) +v1 = repmat( 1/size(Hcsu3, 2), 1, size(Hcsu3, 2)); % vector for computing the mean +Hcsu2 = reshape(Hcsu3, size(Hcsu3, 1), []); % create a block matrix from the 3D array +Hcsu = (v1 * reshape(Hcsu2'*lidf, size(Hcsu3, 2), []))'; % compute column means for each level + +Hc = Hcsu.*Ps(1:nl) + Hcsh.*(1-Ps(1:nl)); % hemispherical emittance by leaf layers +Hs = Hssu.*Ps(nl+1) + Hssh.*(1-Ps(nl+1)); % hemispherical emittance by soil surface + +% 1.3 Diffuse radiation +cont = 1; % continue iteration (1:yes, 0:no) +counter = 0; % number of iterations +F1 = zeros(nl+1,1); +F2 = zeros(nl+1,1); +F1top = 0; +while cont + F1topn = -rinf*F2(1); + F1(1) = F1topn; + for j = 1:nl + F1(j+1) = F1(j)*(1-m*iLAI)+ fHc*Hc(j); + end + F2(nl+1) = fbottom*F1(nl+1) + fHs*Hs; + for j = nl:-1:1 + F2(j) = F2(j+1)*(1-m*iLAI) + fHc*Hc(j); + end + cont = abs(F1topn-F1top)>crit; + F1top = F1topn; + counter = counter + 1; +end + +Emin = (F1+rinf*F2)/(1-rinf2); +Eplu = (F2+rinf*F1)/(1-rinf2); + +% 1.4 Directional radiation +if obsdir + piLo1 = iLAI*epsc*K*Hcsh'*(gap.Po(1:nl)-gap.Pso(1:nl)); % directional emitted radation by shaded leaves + % JAK 2015-01: replaced earlier loop by this: all-at-once with more efficient mean + absfo_rep = repmat(abs(fo), 1, nl); + piLo2 = iLAI*epsc*(v1 * reshape( (Hcsu2.*absfo_rep)'*lidf, size(Hcsu3, 2), []))'.*gap.Pso(1:nl); % compute column means for each level + + piLo3 = iLAI*((vb*Emin(1:nl) + vf*Eplu(1:nl))'*gap.Po(1:nl)); % directional scattered radiation by vegetation for diffuse incidence + piLo4 = epss*Hssh*(gap.Po(nl+1)-gap.Pso(nl+1)); % directional emitted radiation by shaded soil + piLo5 = epss*Hssu*gap.Pso(nl+1); % directional emitted radiation by sunlit soil + piLo6 = rs*Emin(nl+1)*gap.Po(nl+1); % directional scattered radiation by soil for diffuse incidence [1] + + piLot = piLo1 + sum(piLo2) + piLo3 + piLo4 + piLo5 + piLo6; +else + piLot = NaN; +end +Lot = piLot/pi; + +%% 2. total net fluxes +% net radiation per component, in W m-2 (leaf or soil surface) +for j = 1:nl + Rnuc(:,:,j) = (Emin(j) + Eplu(j+1) - 2*Hcsu3(:,:,j))*epsc; % sunlit leaf + Rnhc(j) = (Emin(j) + Eplu(j+1) - 2*Hcsh(j))*epsc; % shaded leaf +end +Rnus = (Emin(nl+1) - Hssu)*epss; % sunlit soil +Rnhs = (Emin(nl+1) - Hssh)*epss; % shaded soil + +%% 3. Write the output to the rad structure + +rad.Emint = Emin; +rad.Eplut = Eplu; +rad.Eoutte = Eplu(1)-Emin(1); % 1) +rad.Lot = Lot; +rad.Rnuct = Rnuc; +rad.Rnhct = Rnhc; +rad.Rnust = Rnus; +rad.Rnhst = Rnhs; +return + +% 1) CvdT, 11 December 2015. +% We subtract Emin(1), because ALL incident (thermal) radiation from Modtran +% has been taken care of in RTMo. Not ideal but otherwise radiation budget will not close! + +%% Appendix A. Stefan-Boltzmann +function H = Stefan_Boltzmann(T_C) + +global constants; +C2K = constants.C2K; +sigmaSB = constants.sigmaSB; + +H = sigmaSB*(T_C + C2K).^4; +return \ No newline at end of file diff --git a/src/RTMz.m b/src/RTMz.m new file mode 100644 index 00000000..16664505 --- /dev/null +++ b/src/RTMz.m @@ -0,0 +1,231 @@ +function [rad,profiles] = RTMz(spectral,rad,soil,leafopt,canopy,gap,angles,profiles) + +% function 'RTMz' calculates the small modification of TOC outgoing +% radiance due to the conversion of Violaxanthin into Zeaxanthin in leaves +% +% Author: Christiaan van der Tol (c.vandertol@utwente.nl) +% Date: 08 Dec 2016 +% +% The inputs and outputs are structures. These structures are further +% specified in a readme file. +% +% Input: +% spectral information about wavelengths and resolutions +% rad a large number of radiative fluxes: spectrally distributed +% and integrated, and canopy radiative transfer coefficients. +% soil soil properties +% leafopt leaf optical properties +% canopy canopy properties (such as LAI and height) +% gap probabilities of direct light penetration and viewing +% angles viewing and observation angles +% profiles vertical profiles of fluxes +% +% Output: +% rad a large number of radiative fluxes: spectrally distributed +% and integrated, and canopy radiative transfer coefficients. +% Here, fluorescence fluxes are added +%% 0.0 globals +global constants + +%% initialisations +wlS = spectral.wlS'; % SCOPE wavelengths, make column vectors +wlZ = spectral.wlZ'; % Excitation wavelengths +[dummy,iwlfi] = intersect(wlS,wlZ); %#ok +nf = length(iwlfi); +nl = canopy.nlayers; +LAI = canopy.LAI; +litab = canopy.litab; +lazitab = canopy.lazitab; +lidf = canopy.lidf; +nlinc = length(litab); +nlazi = length(lazitab); +nlori = nlinc * nlazi; % total number of leaf orientations +layers = 1:nl; + +RZ = leafopt.reflZ(iwlfi)-leafopt.refl(iwlfi); +TZ = leafopt.tranZ(iwlfi)-leafopt.tran(iwlfi); + +vb = rad.vb(iwlfi); % added for rescattering of SIF fluxes +vf = rad.vf(iwlfi); + +Ps = gap.Ps; % [nl+1] +Po = gap.Po; +Pso = gap.Pso; + +Qso = (Pso(layers) + Pso(layers+1))/2; +Qs = (Ps(layers) + Ps(layers+1))/2; +Qo = (Po(layers) + Po(layers+1))/2; +Qsho = Qo - Qso; + +etah = zeros(nl,1); +etau = zeros(nl,nlori); % modified dimensions to facilitate vectorization + +LoZ_ = zeros(nf,1); +Zhem_ = zeros(nf,1); + +% for speed-up the calculation only uses wavelength i and wavelength o part of the spectrum + +Esunf_ = rad.Esun_(iwlfi); +Eminf_ = rad.Emin_(:,iwlfi)'; % transpose into [nf,nl+1] matrix +Epluf_ = rad.Eplu_(:,iwlfi)'; +iLAI = LAI/nl; % LAI of a layer + +%% optical quantities + +rho = leafopt.refl(iwlfi); % [nf] leaf/needle reflectance +tau = leafopt.tran(iwlfi); % [nf] leaf/needle transmittance +rs = soil.refl(iwlfi); % [nf] soil reflectance + +% geometric factors + +deg2rad = constants.deg2rad; +tto = angles.tto; +tts = angles.tts; +psi = angles.psi; + +cos_tto = cos(tto*deg2rad); % cos observation zenith angle +sin_tto = sin(tto*deg2rad); % sin observation zenith angle + +cos_tts = cos(tts*deg2rad); % cos solar angle +sin_tts = sin(tts*deg2rad); % sin solar angle + +cos_ttli = cos(litab*deg2rad); % cos leaf inclinaation angles +sin_ttli = sin(litab*deg2rad); % sin leaf inclinaation angles +cos_phils = cos(lazitab*deg2rad); % cos leaf azimuth angles rel. to sun azi +cos_philo = cos((lazitab-psi)*deg2rad); % cos leaf azimuth angles rel. to viewing azi + +%% geometric factors for all leaf angle/azumith classes +cds = cos_ttli*cos_tts*ones(1,nlazi) + sin_ttli*sin_tts*cos_phils; % [nlinc,nlazi] +cdo = cos_ttli*cos_tto*ones(1,nlazi) + sin_ttli*sin_tto*cos_philo; % [nlinc,nlazi] +fs = cds/cos_tts; % [nlinc,nlazi] +absfs = abs(fs); % [nlinc,nlazi] +fo = cdo/cos_tto; % [nlinc,nlazi] +absfo = abs(fo); % [nlinc,nlazi] +fsfo = fs.*fo; % [nlinc,nlazi] +absfsfo = abs(fsfo); % [nlinc,nlazi] +foctl = fo.*(cos_ttli*ones(1,nlazi)); % [nlinc,nlazi] +fsctl = fs.*(cos_ttli*ones(1,nlazi)); % [nlinc,nlazi] +ctl2 = cos_ttli.^2*ones(1,nlazi); % [nlinc,nlazi] + +%% calculation of le in observation direction + +% Cx as a function of Kn + +etahi = Kn2Cx(profiles.Knh); +etaur = permute(Kn2Cx(profiles.Knu),[3 1 2]); % make dimensions [nl,nlinc,nlazi] +etaui = reshape(etaur,nl,nlori); % expand orientations in a vector >> [nl,nlori] + +[Fmin_,Fplu_] = deal(zeros(nf,nl+1)); +etah(:) = etahi(:); etau(:) = etaui(:); + +MpluEmin = (RZ*ones(1,nl+1)) .* Eminf_; % [nf,nl+1] = (nf,ne) * (ne,nl+1) +MpluEplu = (RZ*ones(1,nl+1)) .* Epluf_; +MminEmin = (TZ*ones(1,nl+1)) .* Eminf_; +MminEplu = (TZ*ones(1,nl+1)) .* Epluf_; + +MpluEsun = RZ .* Esunf_; % +MminEsun = TZ .* Esunf_; + +xdd2 = mean(ctl2' * lidf); % lidf-weighted cosine squared of leaf inclination +mn_etau = mean(reshape(etau,nl,nlinc,nlazi),3) * lidf; % lidf-weighted mean of etau per layer [nl] + +% we calculate the spectrum for all individual leaves, sunlit and +% shaded + +[Fmin,Fplu] = deal(zeros(nf,nl+1)); +[G1,G2] = deal(zeros(nl+1,1)); +[Mplu_i,Mmin_i] = deal(zeros(nl,1)); + +for i = 1 : nf + + Qso_wfEs = Qso * reshape(absfsfo * MpluEsun(i) + fsfo * MminEsun(i),1,nlori); % [1,nlori] + Qs_sfEs = Qs *reshape(absfs * MpluEsun(i) - fsctl * MminEsun(i),1,nlori); + Qs_sbEs = Qs * reshape(absfs * MpluEsun(i) + fsctl * MminEsun(i),1,nlori); + + Mplu_i(layers) = MpluEmin(i,layers) + MpluEplu(i,layers+1); % [1,nl] + Mmin_i(layers) = MminEmin(i,layers) - MminEplu(i,layers+1); + + sigfEmini_sigbEplui = Mplu_i - xdd2 * Mmin_i; % [nl] + sigbEmini_sigfEplui = Mplu_i + xdd2 * Mmin_i; + + Qso_Mplu = Qso .* Mplu_i; % [nl] + Qso_Mmin = Qso .* Mmin_i; + Qsho_Mplu = Qsho .* Mplu_i; + Qsho_Mmin = Qsho .* Mmin_i; + + Qso_vEd = Qso_Mplu * reshape(absfo,1,nlori) + Qso_Mmin * reshape(foctl,1,nlori); + Qsh_vEd = Qsho_Mplu * reshape(absfo,1,nlori) + Qsho_Mmin * reshape(foctl,1,nlori); + + % Directly observed radiation contributions from sunlit and + % shaded leaves + + piLs = mean(reshape(etau .*(Qso_wfEs + Qso_vEd),nl,nlinc,nlazi),3) * lidf; + piLd = etah .* (mean(reshape(Qsh_vEd,nl,nlinc,nlazi),3) * lidf); + + piLo1 = iLAI * sum(piLs) ; + piLo2 = iLAI * sum(piLd); + + Qs_Fsmin = mean(reshape(etau .* Qs_sfEs,nl,nlinc,nlazi),3) * lidf ... + + Qs .* mn_etau .* sigfEmini_sigbEplui; + Qs_Fsplu = mean(reshape(etau .* Qs_sbEs,nl,nlinc,nlazi),3) * lidf ... + + Qs .* mn_etau .* sigbEmini_sigfEplui; + + Qd_Fdmin = (1-Qs) .* etah .* sigfEmini_sigbEplui; + Qd_Fdplu = (1-Qs) .* etah .* sigbEmini_sigfEplui; + + Fmin(i,layers+1) = Qs_Fsmin + Qd_Fdmin; + Fplu(i,layers) = Qs_Fsplu + Qd_Fdplu; + + t2 = xdd2 * (rho(i)-tau(i))/2; + att = 1-(rho(i)+tau(i))/2+t2; + sig = (rho(i)+tau(i))/2+t2; + m = sqrt(att^2-sig^2); + rinf = (att - m)/sig; + fac = 1 - m * iLAI; + facs = (rs(i)-rinf)/(1-rs(i)*rinf); + + % Transformed radiance calculated numerically + + G1(1) = 2; Gnew = 0; % (to ensure we will enter the loop the first time) + + dF1 = (Fmin(i,layers+1) + rinf * Fplu(i,layers)) * iLAI; % Thanks to JAK + dF2 = (rinf * Fmin(i,layers+1) + Fplu(i,layers)) * iLAI; % These are the source functions + + while abs(Gnew-G1(1)) > 1e-3 + G1(1) = Gnew; + for j=2:nl+1 + G1(j) = fac * G1(j-1) + dF1(j-1); + end + G2(nl+1) = G1(nl+1) * facs; + for j=nl:-1:1 + G2(j) = fac * G2(j+1) + dF2(j); + end + Gnew = -rinf * G2(1); + end + + % Inverse transformation to get back the hemispherical fluxes + + Fplu_(i,:) = (rinf*G1+G2)/(1-rinf^2); + Fmin_(i,:) = (rinf*G2+G1)/(1-rinf^2); + + Zhem_(i) = Fplu_(i,1); + + % The following contributions are coming from: + + % 3) Rescattered radiation of observed leaves + % 4) radiation reflected by observed soil + + piLo3 = iLAI * ((vb(i)*Fmin_(i,layers) + vf(i)*Fplu_(i,layers+1)) * Qo); + piLo4 = rs(i) * Fmin_(i,nl+1) * Po(nl+1); + + piLtoti = piLo1 + piLo2 + piLo3 + piLo4; + LoZ_(i) = piLtoti/pi; + +end + +rad.Lo_(iwlfi) = rad.Lo_(iwlfi)+LoZ_; +rad.Eout_(iwlfi) = rad.Eout_(iwlfi) + Zhem_; + +function Cx = Kn2Cx(Kn) +Cx = 0.70*Kn; % empirical fit by N Vilfan +return \ No newline at end of file diff --git a/src/Root_Fraction_General.m b/src/Root_Fraction_General.m new file mode 100644 index 00000000..7a10142a --- /dev/null +++ b/src/Root_Fraction_General.m @@ -0,0 +1,190 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Subfunction Root_Fraction %%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function[RfH_Zs,RfL_Zs]=Root_Fraction_General(Zs,CASE_ROOT,ZR95_H,ZR50_H,ZR95_L,ZR50_L,ZRmax_H,ZRmax_L) +%%% OUTPUT +%%% ---> Root Distribution ZR_H -ZR_L --- Root Fraction in a given soil layer +%RfH_Zs, [%] Root Fraction for High Vegetation [1...m] +%RfL_Zs [%] Root Fraction for Low Vegetation [1...m] + +%%%% INPUT +%ZR95_H, Root Depth (95 percentile) High Vegetation [mm] +%ZR95_L, Root Depth (95 percentile) Low Vegetation [mm] +%ZR50_H, Root Depth (95 percentile) High Vegetation [mm] +%ZR50_L, Root Depth (95 percentile) Low Vegetation [mm] +%Zs, [mm] Depth Layers [1....m] +%CASE_ROOT [#] Type of desired root profile +%%%%%%%%%%%%%%%%%%%%%% +n=length(Zs)-1; +cc=length(ZR95_H); +RfH_Zs= zeros(cc,n); RfL_Zs= zeros(cc,n); +%%%%%%%%%%%%%%%%%%%%%% +for j=1:cc + if ZR95_H(j) > Zs(n+1) || ZR95_L(j) > Zs(n+1) || ZRmax_H(j) > Zs(n+1) || ZRmax_L(j) > Zs(n+1) + disp('ERROR: LAST LAYER TOO SHALLOW FOR ACCOMODATING ROOTS') + return + end +end +switch CASE_ROOT + case 1 %%%% Exponential Profile + %%%%%%%%%%%%%%%%%%%%%% Arora and Boer 2005 + eta_H=3./ZR95_H; %%[1/mm] Shape of Root Distribution + eta_L=3./ZR95_L; %%[1/mm] + %%%%%%%%%%%%%%%%%%%%% + for j=1:cc + i=1; + if not(ZR95_H(j)==0) + while i <= n + if ZR95_H(j) > Zs(i+1) + RfH_Zs(j,i) = exp(-eta_H(j)*Zs(i)) - exp(-eta_H(j)*Zs(i+1)); + else + RfH_Zs(j,i) = exp(-eta_H(j)*Zs(i)) - exp(-eta_H(j)*ZR95_H(j)); + i=n; + end + i=i+1; + end + end + %%%%%%%%%% + i=1; + if not(ZR95_L(j)==0) + while i <= n + if ZR95_L(j) > Zs(i+1) + RfL_Zs(j,i) = exp(-eta_L(j)*Zs(i)) - exp(-eta_L(j)*Zs(i+1)); + else + RfL_Zs(j,i) = exp(-eta_L(j)*Zs(i)) - exp(-eta_L(j)*ZR95_L(j)); + i=n; + end + i=i+1; + end + end + %%%%%%% Water Content for the Root + Rto1 = 0.9502; + %%%%%%%%% Root Proportion in the Layer + RfH_Zs(j,:)=RfH_Zs(j,:)/Rto1; RfL_Zs(j,:)= RfL_Zs(j,:)/Rto1; + %%%%%%%%%%%%%%% + end + case 2 %%%%% Linear Dose Response + %%% Schenk and Jackson 2002, Collins and Bras 2007 + c_H = 2.94./log(ZR50_H./ZR95_H); + c_L = 2.94./log(ZR50_L./ZR95_L); + %%%%%%%%%%%%%%%%%%%%% + for j=1:cc + i=1; + if not(ZR95_H(j)==0) + while i <= n + if ZR95_H(j) > Zs(i+1) + RfH_Zs(j,i) = 1./(1 + (Zs(i+1)/ZR50_H(j)).^c_H(j) ) - 1./(1 + (Zs(i)/ZR50_H(j)).^c_H(j) ) ; + else + RfH_Zs(j,i) = 1./(1 + (ZR95_H(j)/ZR50_H(j)).^c_H(j) ) - 1./(1 + (Zs(i)/ZR50_H(j)).^c_H(j) ) ; + i=n; + end + i=i+1; + end + end + i=1; + if not(ZR95_L(j)==0) + while i <= n + if ZR95_L(j) > Zs(i+1) + RfL_Zs(j,i) = 1./(1 + (Zs(i+1)/ZR50_L(j)).^c_L(j) ) - 1./(1 + (Zs(i)/ZR50_L(j)).^c_L(j) ) ; + else + RfL_Zs(j,i) = 1./(1 + (ZR95_L(j)/ZR50_L(j)).^c_L(j) ) - 1./(1 + (Zs(i)/ZR50_L(j)).^c_L(j) ) ; + i=n; + end + i=i+1; + end + end + end + Rto1 = 0.9498; + %%%%%%%%% Root Proportion in the Layer + RfH_Zs(j,:)=RfH_Zs(j,:)/Rto1; RfL_Zs(j,:)= RfL_Zs(j,:)/Rto1; + case 3 %%% Constant Profile + for j=1:cc + i=1; + if not(ZR95_H(j)==0) + while i <= n + if ZR95_H(j) > Zs(i+1) + RfH_Zs(j,i) = (Zs(i+1)-Zs(i))/ZR95_H(j) ; + else + RfH_Zs(j,i) = (ZR95_H(j)-Zs(i))/ZR95_H(j); + i=n; + end + i=i+1; + end + end + i=1; + if not(ZR95_L(j)==0) + while i <= n + if ZR95_L(j) > Zs(i+1) + RfL_Zs(j,i) = (Zs(i+1)-Zs(i))/ZR95_L(j) ; + else + RfL_Zs(j,i) = (ZR95_L(j)-Zs(i))/ZR95_L(j); + i=n; + end + i=i+1; + end + end + end + case 4 %%% Deep (Tap) Root Profile + c_H = 2.94./log(ZR50_H./ZR95_H); + c_L = 2.94./log(ZR50_L./ZR95_L); + for j=1:cc + i=1; + if not(ZR95_H(j)==0) + while i <= n + if ZR95_H(j) > Zs(i+1) + RfH_Zs(j,i) = 1./(1 + (Zs(i+1)/ZR50_H(j)).^c_H(j) ) - 1./(1 + (Zs(i)/ZR50_H(j)).^c_H(j) ) ; + elseif ZR95_H(j) <= Zs(i+1) && ZR95_H(j) > Zs(i) + RfH_Zs(j,i) = 1./(1 + (ZR95_H(j)/ZR50_H(j)).^c_H(j) ) - 1./(1 + (Zs(i)/ZR50_H(j)).^c_H(j) ) ; + if ZRmax_H(j) <= Zs(i+1) + RfH_Zs(j,i) = RfH_Zs(j,i) + 0.0502*(ZRmax_H(j)-ZR95_H(j))/(ZRmax_H(j)-ZR95_H(j)); + i=n; + else + RfH_Zs(j,i) = RfH_Zs(j,i) + 0.0502*(Zs(i+1)-ZR95_H(j))/(ZRmax_H(j)-ZR95_H(j)); + end + elseif ZRmax_H(j) > Zs(i+1) + RfH_Zs(j,i) = 0.0502*(Zs(i+1)-Zs(i))/(ZRmax_H(j)-ZR95_H(j)); + else + RfH_Zs(j,i) = 0.0502*(ZRmax_H(j)-Zs(i))/(ZRmax_H(j)-ZR95_H(j)); + i=n; + end + i=i+1; + end + end + i=1; + if not(ZR95_L(j)==0) + while i <= n + if ZR95_L(j) > Zs(i+1) + RfL_Zs(j,i) = 1./(1 + (Zs(i+1)/ZR50_L(j)).^c_L(j) ) - 1./(1 + (Zs(i)/ZR50_L(j)).^c_L(j) ) ; + elseif ZR95_L(j) <= Zs(i+1) && ZR95_L(j) > Zs(i) + RfL_Zs(j,i) = 1./(1 + (ZR95_L(j)/ZR50_L(j)).^c_L(j) ) - 1./(1 + (Zs(i)/ZR50_L(j)).^c_L(j) ) ; + if ZRmax_L(j) <= Zs(i+1) + RfL_Zs(j,i) = RfL_Zs(j,i) + 0.0502*(ZRmax_L(j)-ZR95_L(j))/(ZRmax_L(j)-ZR95_L(j)); + i=n; + else + RfL_Zs(j,i) = RfL_Zs(j,i) + 0.0502*(Zs(i+1)-ZR95_L(j))/(ZRmax_L(j)-ZR95_L(j)); + end + elseif ZRmax_L(j) > Zs(i+1) + RfL_Zs(j,i) = 0.0502*(Zs(i+1)-Zs(i))/(ZRmax_L(j)-ZR95_L(j)); + else + RfL_Zs(j,i) = 0.0502*(ZRmax_L(j)-Zs(i))/(ZRmax_L(j)-ZR95_L(j)); + i=n; + end + i=i+1; + end + end + end +end +%%%%%%%%%%% Cleaning +%for j=1:cc +% if not(ZR95_H(j)==0) +% Rto1 =sum(RfH_Zs(j,:)); +% RfH_Zs(j,:)=RfH_Zs(j,:)/Rto1; +% end +% if not(ZR95_L(j)==0) +% Rto1 =sum(RfL_Zs(j,:)); +% RfL_Zs(j,:)= RfL_Zs(j,:)/Rto1; +% end +%end +return + + diff --git a/src/Root_properties.m b/src/Root_properties.m new file mode 100644 index 00000000..578b15d1 --- /dev/null +++ b/src/Root_properties.m @@ -0,0 +1,47 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Subfunction - Root - Properties % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%REFERENCES +function[Rl]=Root_properties(Rl,Ac,rroot,frac,bbx,KT) +%%% INPUTS +global DeltZ LAI +% BR = 10:1:650; %% [gC /m^2 PFT] +% rroot = 0.5*1e-3 ; % 3.3*1e-4 ;%% [0.5-6 *10^-3] [m] root radius +%%% OUTPUTS + % if KT<3800 + fr=-0.0296*LAI(KT)+0.30; + % else + % fr=0.001; + % end +%elseif KT<3200 + % fr=0.05; +%else + % fr=0.02; +%end +DeltZ0=DeltZ'/100; +BR = Ac*fr*1800*12/1000000; +root_den = 250*1000; %% [gDM / m^3] Root density Jackson et al., 1997 +R_C = 0.488; %% [gC/gDM] Ratio Carbon-Dry Matter in root Jackson et al., 1997 +nn=numel(Rl); +if (~isnan(Ac))||(Ac>0) +Rl=Rl.*DeltZ0; +Delta_Rltot = BR/R_C/root_den/(pi*(rroot^2)); %% %% root length index [m root / m^2 PFT] +for i=1:nn + if Rl(i)>2000 + frac(i)=0; + end +end +frac=frac/sum(sum(frac)); +Delta_Rl=Delta_Rltot*frac.*bbx; +Rl=Rl+Delta_Rl; +Rl=Rl./DeltZ0; +else +Rl=Rl; +end +for i=1:nn + if Rl(i)>2000 + Rl(i)=2000; + end +end +end \ No newline at end of file diff --git a/src/SCOPE.exe b/src/SCOPE.exe new file mode 100644 index 0000000000000000000000000000000000000000..b3a6cbe26827e4f324d1b6583b5225eea86f8bda GIT binary patch literal 1204165 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�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

v$6I)>pK-YDAIOpY&kLIH$E-cb zNvfb8%3Hb$v2x<;HE~rjjVL#3{$43dOzI8`X za7(Mh4}@?2vE~xfJt;0A!c9=m>;~y!4!uC0W^Nk@ff<~I22%7NK<0#HIrOy{s zJv&`c?HjLSI6u;Ek)X=-7lIlmwm6RS4R;m^s(AN8P~)lQCvbj3w^%`qJJSVCO7c7@ z_%EL)sJgCMP~++HNkaYsEd|vdA1bK9ak-!h%}GI(0j~tL_>?$>{zfM+K@Fz9g2oP> zE2#42enHi(ABr4fdm8=CyXpvPI?zQ>%lZj|8p1aVnxMKOXzZU^g2H}0gUhKF_=sv6 zB&Z=LR#3f7qM&BWV?ovDemg6y$D}%fnkse{*%&RVy-`p_(0M`C^WF)n-C9y;kJMW| z1=Y>#Eof}ebV0R6b_g1|`MSt1*@BwpIG@MzbSYd=lVhl$2G=>Fy6+LxT;{fDf0-+2 zRkot|KF1PTL6frk32Ht)OHf7h zPC?=L6VzzT6g0AAS)u(+7}iWs!@gc(d;D~=pt?^R1&#c2PSAvxuLQLmFCx4b(lDu> zp!(XK1T~%*DQF~HE~q6wQBc+Q`+}<3H&F*w5#A%Io$M`Wq@kanmZ38QO=z`E#}+uMRFgR%uxbS^8rpHlDDRMcWY zf-0^@2^u+JrJ%;LM+7yky)USx#1}!;BP(3P{R-!ipt^6tg6eBd5Y*gaji}mVf*Kk= z6x3AWt2qC01>t>{rj^YFHTnb#YDgU?Xk_nIg2vtu--~H!m@4{B%@tHKpq6K0f=0HE64YRvC8#oUxuELiTLra@KPaf~z*#}{>9<6? z<1;~%+%pALwzRo{gpo##EpeBvKphlNqK_d$e7F2gXN>J_gS%T^# zmkVmFzeP}J9|TQWep=83c0*9h<0pbfj(snv-tL>A#zjSL3g=lVXF((9y9%mQG!;}m z#8*($wa$Vn-1~|=IZ{yV)k%WtOU)Nl6}VbZCZXSaEayGvt*r&N&v|gh@#rJBu-<sEy7x!)s)zBUVnA=C(ZhLRa6muziF->zn?fa z;I*cV+UM_-7zNuM?Y^~?tsOgi>wQwW6~D0pZEx=$+itg}n7XNjk158^

_y%eP8g!v(fxaocOCgEMSGF=1@_;LMjspU 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

UiukTY$ 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