
function DSteam_Linear_Fresnel22
	function [result] = ssccall(action, arg0, arg1, arg2 )
    [pathstr, fn, fext] = fileparts(mfilename('fullpath'));
        ssclibpath = './';
        ssclib = 'ssc';
        
    if ~libisloaded(ssclib)
        oldFolder = cd(pathstr);
        loadlibrary(strcat(ssclibpath,ssclib),strcat(ssclibpath,'sscapi.h'));
        cd(oldFolder);
    end
    if strcmp(action,'load')
        if ~libisloaded(ssclib)
            oldFolder = cd(pathstr);
            loadlibrary(strcat(ssclibpath,ssclib),strcat(ssclibpath,'../sscapi.h'));
            cd(oldFolder);
        end
    elseif strcmp(action,'unload')
        if libisloaded(ssclib)
            unloadlibrary(ssclib)    
        end
    elseif strcmp(action,'version')
        result = calllib(ssclib,'ssc_version');
    elseif strcmp(action,'build_info')
        result = calllib(ssclib, 'ssc_build_info');
    elseif strcmp(action,'data_create')
        result = calllib(ssclib, 'ssc_data_create');
        if ( isnullpointer(result) )
            result = 0;
        end
    elseif strcmp(action,'data_free')
        result = calllib(ssclib, 'ssc_data_free', arg0);
    elseif strcmp(action,'data_unassign')
        result = calllib(ssclib, 'ssc_data_unassign', arg0, arg1);
    elseif strcmp(action,'data_query')
        result = calllib(ssclib, 'ssc_data_query', arg0, arg1 );
    elseif strcmp(action,'data_first')
        result = calllib(ssclib, 'ssc_data_first', arg0 );
    elseif strcmp(action,'data_next')
        result = calllib(ssclib, 'ssc_data_next', arg0 );
    elseif strcmp(action,'data_set_string')
        result = calllib(ssclib, 'ssc_data_set_string', arg0, arg1, arg2 );
    elseif strcmp(action,'data_set_number')
        result = calllib(ssclib, 'ssc_data_set_number', arg0, arg1, single(arg2) );
    elseif strcmp(action,'data_set_array')
        len = length(arg2);
        arr = libpointer( 'singlePtr', arg2 );
        result = calllib(ssclib,'ssc_data_set_array',arg0,arg1,arr,len);
    elseif strcmp(action,'data_set_matrix')
        [nr nc] = size(arg2);
        mat = zeros(nr*nc, 1);
        ii = 1;
        for a=1:nr,
            for c=1:nc,
                mat(ii) = arg2(a,c);
                ii=ii+1;
            end
        end
        arr = libpointer( 'singlePtr', mat );
        result = calllib(ssclib,'ssc_data_set_matrix',arg0,arg1,arr,nr,nc);
    elseif strcmp(action,'data_set_table')
        result = calllib(ssclib,'ssc_data_set_table',arg0,arg1,arg2);
    elseif strcmp(action,'data_get_string')
        result = calllib(ssclib,'ssc_data_get_string',arg0,arg1);
    elseif strcmp(action,'data_get_number')
         p = libpointer('singlePtr',0);
         calllib(ssclib,'ssc_data_get_number', arg0,arg1,p);
         result = get(p,'Value');
    elseif strcmp(action,'data_get_array')
        p_count = libpointer('int32Ptr',0);   
        [xobj] = calllib(ssclib,'ssc_data_get_array',arg0,arg1,p_count);
        setdatatype(xobj,'int32Ptr',p_count.Value,1);
        len = p_count.Value;
        result = zeros( len, 1 );
        for i=1:len,
            pidx = xobj+(i-1);
            setdatatype(pidx,'singlePtr',1,1);
            result(i) = pidx.Value;
        end
    elseif strcmp(action,'data_get_matrix')
        p_rows = libpointer('int32Ptr',0);
        p_cols = libpointer('int32Ptr',0);
        [xobj] = calllib(ssclib,'ssc_data_get_matrix',arg0,arg1,p_rows,p_cols);
        setdatatype(xobj,'int32Ptr',p_rows.Value*p_cols.Value,1);
        nrows = p_rows.Value;
        ncols = p_cols.Value;
        if ( nrows*ncols > 0 )
            result = zeros( nrows, ncols );
            ii=1;
            for a=1:nrows,
                for c=1:ncols,
                    pidx = xobj+(ii-1);
                    setdatatype(pidx,'singlePtr',1,1);
                    result(a,c) = pidx.Value;
                    ii=ii+1;
                end
            end
        end
    elseif strcmp(action,'data_get_table')
        result = calllib(ssclib,'ssc_data_get_table',arg0,arg1);
    elseif strcmp(action,'module_entry')
        result = calllib(ssclib,'ssc_module_entry',arg0);
        if isnullpointer( result ),
            result = 0;
        end
    elseif strcmp(action,'entry_name')
        result = calllib(ssclib,'ssc_entry_name',arg0);
    elseif strcmp(action,'entry_description')
        result = calllib(ssclib,'ssc_entry_description',arg0);
    elseif strcmp(action,'entry_version')
        result = calllib(ssclib,'ssc_entry_version',arg0);
    elseif strcmp(action,'module_var_info')
        result = calllib(ssclib,'ssc_module_var_info',arg0,arg1);
        if isnullpointer( result ),
            result = 0;
        end
    elseif strcmp(action,'info_var_type')
        ty = calllib(ssclib,'ssc_info_var_type',arg0);
        if (ty == 1)
            result = 'input';
        elseif ( ty==2 )
            result = 'output';
        else
            result = 'inout';
        end
    elseif strcmp(action,'info_data_type')
        dt = calllib(ssclib,'ssc_info_data_type',arg0);
        if (dt == 1)
            result = 'string';
        elseif (dt == 2)
            result = 'number';
        elseif (dt == 3)
            result = 'array';
        elseif (dt == 4)
            result = 'matrix';
        elseif (dt == 5)
            result = 'table';
        else
            result = 'invalid';
        end
    elseif strcmp(action,'info_name')
        result = calllib(ssclib,'ssc_info_name',arg0);
    elseif strcmp(action,'info_label')
        result = calllib(ssclib,'ssc_info_label',arg0);
    elseif strcmp(action,'info_units')
        result = calllib(ssclib,'ssc_info_units',arg0);
    elseif strcmp(action,'info_meta')
        result = calllib(ssclib,'ssc_info_meta',arg0);
    elseif strcmp(action,'info_group')
        result = calllib(ssclib,'ssc_info_group',arg0);
    elseif strcmp(action,'info_required')
        result = calllib(ssclib,'ssc_info_required',arg0);
    elseif strcmp(action,'info_constraints')
        result = calllib(ssclib,'ssc_info_constraints',arg0);
    elseif strcmp(action,'info_uihint')
        result = calllib(ssclib,'ssc_info_uihint',arg0);
    elseif strcmp(action,'exec_simple')
        result = calllib(ssclib,'ssc_module_exec_simple',arg0,arg1);
    elseif strcmp(action,'exec_simple_nothread')
        result = calllib(ssclib,'ssc_module_exec_simple_nothread',arg0,arg1);
    elseif strcmp(action,'module_create')
        result = calllib(ssclib,'ssc_module_create',arg0);
        if ( isnullpointer(result) )
            result = 0;
        end
    elseif strcmp(action,'module_free')
        result = calllib(ssclib,'ssc_module_free',arg0);
    elseif strcmp(action,'module_exec_set_print')
        calllib(ssclib,'ssc_module_exec_set_print',arg0);
        result = 0;
    elseif strcmp(action,'module_exec')
        result = calllib(ssclib,'ssc_module_exec',arg0,arg1);
    elseif strcmp(action,'module_log')
        p_type = libpointer('int32Ptr',1);
        p_time = libpointer('singlePtr',1);
        result = calllib(ssclib,'ssc_module_log', arg0, arg1, p_type, p_time);
    elseif strcmp(action,'module_log_detailed')
        p_type = libpointer('int32Ptr',1);
        p_time = libpointer('singlePtr',1);
        text = calllib(ssclib,'ssc_module_log', arg0, arg1, p_type, p_time);
        typetext = 'notice';
        if (p_type.Value == 2)
            typetext = 'warning';
        elseif (p_type.Value == 3)
            typetext = 'error';
        end
        if ( strcmp(text,'') )
            result = 0;
        else
            result = {text , typetext , p_time.Value};
        end
    else
        disp( sprintf('ssccall: invalid action %s', action) );        
        result = 0;
    end
	end
	function bb = isnullpointer(p)
    bb = false;
    try
        setdatatype(p, 'voidPtr', 1, 1);
        deref = get(p);
    catch
        e = lasterror();
        if strcmp(e.identifier, 'MATLAB:libpointer:ValueNotDefined')
            bb = true;
        end
    end
	end
	clear
     load ('SIF.mat','sys_cap','q_max_out','x_b_des','q_des','sm','I_bn_des','nModBoil','latitude','m_dot_min','T_amb_des_sf','RFA','LCM','T_cold_ref','T_hot','T_amb_des', 'dvar');
    matfileObj = matfile ('SIF.mat');
	ssccall('load');
	disp('Current folder = G:/Thesis');
	disp(sprintf('SSC Version = %d', ssccall('version')));
	disp(sprintf('SSC Build Information = %s', ssccall('build_info')));
	ssccall('module_exec_set_print',0);
    data = ssccall('data_create');
	ssccall('data_set_string', data, 'file_name', 'C:/Users/labuser/SAM Downloaded Weather Files/OMN_ZU_Thumrait.AB.413140_TMYx.epw');
	ssccall('data_set_number', data, 'track_mode', 1);
	ssccall('data_set_number', data, 'tilt', 0);
	ssccall('data_set_number', data, 'azimuth', 0);
    b= matfileObj.sys_cap;
	ssccall('data_set_number', data, 'system_capacity', 'b');  % Changing
	weekday_schedule =[ 6   6   6   6   6   6   5   5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5 ; 6   6   6   6   6   6   5   5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5 ; 6   6   6   6   6   6   5   5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5 ; 6   6   6   6   6   6   5   5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5 ; 6   6   6   6   6   6   5   5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5 ; 3   3   3   3   3   3   3   3   2   2   2   2   1   1   1   1   1   1   2   2   2   3   3   3 ; 3   3   3   3   3   3   3   3   2   2   2   2   1   1   1   1   1   1   2   2   2   3   3   3 ; 3   3   3   3   3   3   3   3   2   2   2   2   1   1   1   1   1   1   2   2   2   3   3   3 ; 3   3   3   3   3   3   3   3   2   2   2   2   1   1   1   1   1   1   2   2   2   3   3   3 ; 6   6   6   6   6   6   5   5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5 ; 6   6   6   6   6   6   5   5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5 ; 6   6   6   6   6   6   5   5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5 ];
	ssccall( 'data_set_matrix', data, 'weekday_schedule', weekday_schedule );
	weekend_schedule =[ 6   6   6   6   6   6   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 ; 6   6   6   6   6   6   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 ; 6   6   6   6   6   6   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 ; 6   6   6   6   6   6   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 ; 6   6   6   6   6   6   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 ; 3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3 ; 3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3 ; 3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3 ; 3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3 ; 6   6   6   6   6   6   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 ; 6   6   6   6   6   6   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 ; 6   6   6   6   6   6   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 ];
	ssccall( 'data_set_matrix', data, 'weekend_schedule', weekend_schedule );
	ssccall('data_set_number', data, 'tes_hours', 'd');
    d= matfileObj.q_max_out;
	ssccall('data_set_number', data, 'q_max_aux','d');  % Changing
	ssccall('data_set_number', data, 'LHV_eff', 0.9);
    f= matfileObj.x_b_des;
	ssccall('data_set_number', data, 'x_b_des', 'f');  % Changing
	ssccall('data_set_number', data, 'P_turb_des', 100);  
	ssccall('data_set_number', data, 'fP_hdr_c', 0.01);
	ssccall('data_set_number', data, 'fP_sf_boil', 0.25);
	ssccall('data_set_number', data, 'fP_boil_to_sh', 0.005);
	ssccall('data_set_number', data, 'fP_sf_sh', 0.050);
	ssccall('data_set_number', data, 'fP_hdr_h', 0.095);
    g= matfileObj.q_des;
	ssccall('data_set_number', data, 'q_pb_des', 'g');  % Changing
	ssccall('data_set_number', data, 'cycle_max_fraction', 1.05);
	ssccall('data_set_number', data, 'cycle_cutoff_frac', 0.20);
	ssccall('data_set_number', data, 't_sby', 2);
	ssccall('data_set_number', data, 'q_sby_frac', 0.100);
    h= matfileObj.sm;
	ssccall('data_set_number', data, 'solarm', 'h'); % Changing
	ssccall('data_set_number', data, 'PB_pump_coef', 0);
	ssccall('data_set_number', data, 'PB_fixed_par', 0.0055);
	bop_array =[ 0; 1; 0.4830; 0.571; 0 ];
	ssccall( 'data_set_array', data, 'bop_array', bop_array );
	aux_array =[ 0; 1; 0.4830; 0.571; 0 ]; 
	ssccall( 'data_set_array', data, 'aux_array', aux_array );
	ssccall('data_set_number', data, 'fossil_mode', 2);
    j= matfileObj.I_bn_des;
	ssccall('data_set_number', data, 'I_bn_des', 'j'); % Changing
	ssccall('data_set_number', data, 'is_sh', 1); 
	ssccall('data_set_number', data, 'is_oncethru', 1);
	ssccall('data_set_number', data, 'is_multgeom', 1);
    k= matfileObj.nModBoil;
	ssccall('data_set_number', data, 'nModBoil', 'k');  % Changing
	ssccall('data_set_number', data, 'nModSH', 0);
	ssccall('data_set_number', data, 'nLoops', 1);  % Changing 
	ssccall('data_set_number', data, 'eta_pump', 0.850);
    L= matfileObj.latitude;
	ssccall('data_set_number', data, 'latitude', 'L'); % Changing
	ssccall('data_set_number', data, 'theta_stow', 10);  % Changing?
	ssccall('data_set_number', data, 'theta_dep', 10); % Changing?
    m= matfileObj.m_dot_min;
	ssccall('data_set_number', data, 'm_dot_min','m'); % Changing
	ssccall('data_set_number', data, 'T_fp', 10);
	ssccall('data_set_number', data, 'Pipe_hl_coef', 0.00350);
	ssccall('data_set_number', data, 'SCA_drives_elec', 0.10);
	ssccall('data_set_number', data, 'ColAz', 0);
	ssccall('data_set_number', data, 'e_startup', 2.70);
    n= matfileObj.T_amb_des_sf;
	ssccall('data_set_number', data, 'T_amb_des_sf', 35); % Changing
	ssccall('data_set_number', data, 'V_wind_max', 20);
    o= matfileObj.water_per_wash;
    q= matfileObj.washes_per_year;
	ssccall('data_set_number', data, 'csp.lf.sf.water_per_wash', 'o'); % Changing
	ssccall('data_set_number', data, 'csp.lf.sf.washes_per_year', 'q'); % Changing
	ffrac =[ 0; 0; 0; 0; 0; 0; 0; 0; 0 ];
	ssccall( 'data_set_array', data, 'ffrac', ffrac );
	A_aperture =[ matfileObj.RFA ; matfileObj.RFA ]; % Changing
	ssccall( 'data_set_matrix', data, 'A_aperture', A_aperture );
	L_col =[ matfileObj.LCM  ;matfileObj.LCM  ]; % Changing
	ssccall( 'data_set_matrix', data, 'L_col', L_col );
	OptCharType =[ 3 ; 3 ];
	ssccall( 'data_set_matrix', data, 'OptCharType', OptCharType );
	IAM_T =[ 0.9896   0.044   -0.0721   -0.2327   0 ; 0.9896   0.044   -0.0721   -0.2327   0 ];
	ssccall( 'data_set_matrix', data, 'IAM_T', IAM_T );
	IAM_L =[ 1.0031   -0.2259   0.5368   -1.643   0.7222 ; 1.0031   -0.2259   0.5368   -1.6434   0.7222 ];
	ssccall( 'data_set_matrix', data, 'IAM_L', IAM_L );
	TrackingError =[ 0.9 ; 1 ];
	ssccall( 'data_set_matrix', data, 'TrackingError', TrackingError );
	GeomEffects =[ 0.7 ; 0 ];
	ssccall( 'data_set_matrix', data, 'GeomEffects', GeomEffects );
	rho_mirror_clean =[ 0.9 ; 0 ];
	ssccall( 'data_set_matrix', data, 'rho_mirror_clean', rho_mirror_clean );
	dirt_mirror =[ 0.9 ; 0 ];
	ssccall( 'data_set_matrix', data, 'dirt_mirror', dirt_mirror );
	error =[ 0.9 ; 1 ];
	ssccall( 'data_set_matrix', data, 'error', error );
	HLCharType =[ 1 ; 1 ];
	ssccall( 'data_set_matrix', data, 'HLCharType', HLCharType );
	HL_dT =[ 0   0.672   0.002556   0   0 ; 0   0.672   0.002556   0   0 ];
	ssccall( 'data_set_matrix', data, 'HL_dT', HL_dT );
	HL_W =[ 1   0   0   0   0 ; 1   0   0   0   0 ];
	ssccall( 'data_set_matrix', data, 'HL_W', HL_W );
	D_2 =[ 0.066 ; 0.066 ];
	ssccall( 'data_set_matrix', data, 'D_2', D_2 );
	D_3 =[ 0.070 ; 0.070 ];
	ssccall( 'data_set_matrix', data, 'D_3', D_3 );
	D_4 =[ 0.115 ; 0.115 ];
	ssccall( 'data_set_matrix', data, 'D_4', D_4 );
	D_5 =[ 0.12 ; 0.12 ];
	ssccall( 'data_set_matrix', data, 'D_5', D_5 );
	D_p =[ 0 ; 0 ];
	ssccall( 'data_set_matrix', data, 'D_p', D_p );
	Rough =[ 4.50e-05 ; 4.50e-05 ];
	ssccall( 'data_set_matrix', data, 'Rough', Rough );
	Flow_type =[ 2 ; 2 ];
	ssccall( 'data_set_matrix', data, 'Flow_type', Flow_type );
	AbsorberMaterial =[ 3 ; 3 ];
	ssccall( 'data_set_matrix', data, 'AbsorberMaterial', AbsorberMaterial );
	HCE_FieldFrac =[ 0.985   0.01   0.005   0 ; 0.985   0.01   0.005   0 ];
	ssccall( 'data_set_matrix', data, 'HCE_FieldFrac', HCE_FieldFrac );
	alpha_abs =[ 0.96   0.96   0.80   0 ; 0.96   0.96   0.80   0 ];
	ssccall( 'data_set_matrix', data, 'alpha_abs', alpha_abs );
	b_eps_HCE1 =[ 0 ; 0.1384 ];
	ssccall( 'data_set_matrix', data, 'b_eps_HCE1', b_eps_HCE1 );
	b_eps_HCE2 =[ 0 ; 0.65 ];
	ssccall( 'data_set_matrix', data, 'b_eps_HCE2', b_eps_HCE2 );
	b_eps_HCE3 =[ 0 ; 0.65 ];
	ssccall( 'data_set_matrix', data, 'b_eps_HCE3', b_eps_HCE3 );
	b_eps_HCE4 =[ 0 ; 0.1384 ];
	ssccall( 'data_set_matrix', data, 'b_eps_HCE4', b_eps_HCE4 );
	sh_eps_HCE1 =[ 0 ; 0.1384 ];
	ssccall( 'data_set_matrix', data, 'sh_eps_HCE1', sh_eps_HCE1 );
	sh_eps_HCE2 =[ 0 ; 0.65 ];
	ssccall( 'data_set_matrix', data, 'sh_eps_HCE2', sh_eps_HCE2 );
	sh_eps_HCE3 =[ 0 ; 0.65 ];
	ssccall( 'data_set_matrix', data, 'sh_eps_HCE3', sh_eps_HCE3 );
	sh_eps_HCE4 =[ 0 ; 0.1384 ];
	ssccall( 'data_set_matrix', data, 'sh_eps_HCE4', sh_eps_HCE4 );
	alpha_env =[ 0.02   0.02   0   0 ; 0.02   0.02   0   0 ];
	ssccall( 'data_set_matrix', data, 'alpha_env', alpha_env );
	EPSILON_4 =[ 0.860   0.860   1   0 ; 0.860   0.860   1   0 ];
	ssccall( 'data_set_matrix', data, 'EPSILON_4', EPSILON_4 );
	Tau_envelope =[ 0.963   0.963   1   0 ; 0.963   0.963   1   0 ];
	ssccall( 'data_set_matrix', data, 'Tau_envelope', Tau_envelope );
	GlazingIntactIn =[ 1   1   0   1 ; 1   1   0   1 ];
	ssccall( 'data_set_matrix', data, 'GlazingIntactIn', GlazingIntactIn );
	AnnulusGas =[ 1   1   1   26 ; 1   1   1   1 ];
	ssccall( 'data_set_matrix', data, 'AnnulusGas', AnnulusGas );
	P_a =[ 750   9.9999997473787516e-05   750   0 ; 750   9.9999997473787516e-05   750   0 ];
	ssccall( 'data_set_matrix', data, 'P_a', P_a );
	Design_loss =[ 150   1100   1500   0 ; 150   1100   1500   0 ];
	ssccall( 'data_set_matrix', data, 'Design_loss', Design_loss );
	Shadowing =[ 0.970   0.96   0.96   0 ; 0.96   0.96   0.96   0 ];
	ssccall( 'data_set_matrix', data, 'Shadowing', Shadowing );
	Dirt_HCE =[ 0.980   0.980   1   0 ; 0.980   0.980   1   0 ];
	ssccall( 'data_set_matrix', data, 'Dirt_HCE', Dirt_HCE );
	b_OpticalTable =[ -180   -160   -140   -120   -100   -80   -60   -40   -20   0   20   40   60   80   100   120   140   160   180   -999.9000244140625 ; 0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 ; 10   0.98000001907348633   0.97444498538970947   0.97197598218917847   0.97284698486328125   0.97690999507904053   0.97690999507904053   0.97284698486328125   0.97197598218917847   0.97444498538970947   0.98000001907348633   0.97444498538970947   0.97197598218917847   0.97284698486328125   0.97690999507904053   0.97690999507904053   0.97284698486328125   0.97197598218917847   0.97444498538970947   0.98000001907348633 ; 20   0.93000000715255737   0.92297601699829102   0.92892998456954956   0.94600498676300049   0.95401901006698608   0.95401901006698608   0.94600498676300049   0.92892998456954956   0.92297601699829102   0.93000000715255737   0.92297601699829102   0.92892998456954956   0.94600498676300049   0.95401901006698608   0.95401901006698608   0.94600498676300049   0.92892998456954956   0.92297601699829102   0.93000000715255737 ; 30   0.8399999737739563   0.83861798048019409   0.87069100141525269   0.9130210280418396   0.94091099500656128   0.94091099500656128   0.9130210280418396   0.87069100141525269   0.83861798048019409   0.8399999737739563   0.83861798048019409   0.87069100141525269   0.9130210280418396   0.94091099500656128   0.94091099500656128   0.9130210280418396   0.87069100141525269   0.83861798048019409   0.8399999737739563 ; 40   0.72000002861022949   0.72994697093963623   0.80368697643280029   0.86696100234985352   0.90003901720046997   0.90003901720046997   0.86696100234985352   0.80368697643280029   0.72994697093963623   0.72000002861022949   0.72994697093963623   0.80368697643280029   0.86696100234985352   0.90003901720046997   0.90003901720046997   0.86696100234985352   0.80368697643280029   0.72994697093963623   0.72000002861022949 ; 50   0.55000001192092896   0.59125500917434692   0.70745402574539185   0.79350900650024414   0.83955997228622437   0.83955997228622437   0.79350900650024414   0.70745402574539185   0.59125500917434692   0.55000001192092896   0.59125500917434692   0.70745402574539185   0.79350900650024414   0.83955997228622437   0.83955997228622437   0.79350900650024414   0.70745402574539185   0.59125500917434692   0.55000001192092896 ; 60   0.34000000357627869   0.43217799067497253   0.59747797250747681   0.66400599479675293   0.69351100921630859   0.69351100921630859   0.66400599479675293   0.59747797250747681   0.43217799067497253   0.34000000357627869   0.43217799067497253   0.59747797250747681   0.66400599479675293   0.69351100921630859   0.69351100921630859   0.66400599479675293   0.59747797250747681   0.43217799067497253   0.34000000357627869 ; 70   0.12999999523162842   0.26525399088859558   0.42558598518371582   0.46449598670005798   0.4771060049533844   0.4771060049533844   0.46449598670005798   0.42558598518371582   0.26525399088859558   0.12999999523162842   0.26525399088859558   0.42558598518371582   0.46449598670005798   0.4771060049533844   0.4771060049533844   0.46449598670005798   0.42558598518371582   0.26525399088859558   0.12999999523162842 ; 80   0.0099999997764825821   0.11369399726390839   0.20891000330448151   0.23325499892234802   0.23882800340652466   0.23882800340652466   0.23325499892234802   0.20891000330448151   0.11369399726390839   0.0099999997764825821   0.11369399726390839   0.20891000330448151   0.23325499892234802   0.23882800340652466   0.23882800340652466   0.23325499892234802   0.20891000330448151   0.11369399726390839   0.0099999997764825821 ; 90   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ];
	ssccall( 'data_set_matrix', data, 'b_OpticalTable', b_OpticalTable );
	sh_OpticalTable =[ -180   -160   -140   -120   -100   -80   -60   -40   -20   0   20   40   60   80   100   120   140   160   180   -999.9000244140625 ; 0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 ; 10   0.98000001907348633   0.97444498538970947   0.97197598218917847   0.97284698486328125   0.97690999507904053   0.97690999507904053   0.97284698486328125   0.97197598218917847   0.97444498538970947   0.98000001907348633   0.97444498538970947   0.97197598218917847   0.97284698486328125   0.97690999507904053   0.97690999507904053   0.97284698486328125   0.97197598218917847   0.97444498538970947   0.98000001907348633 ; 20   0.93000000715255737   0.92297601699829102   0.92892998456954956   0.94600498676300049   0.95401901006698608   0.95401901006698608   0.94600498676300049   0.92892998456954956   0.92297601699829102   0.93000000715255737   0.92297601699829102   0.92892998456954956   0.94600498676300049   0.95401901006698608   0.95401901006698608   0.94600498676300049   0.92892998456954956   0.92297601699829102   0.93000000715255737 ; 30   0.8399999737739563   0.83861798048019409   0.87069100141525269   0.9130210280418396   0.94091099500656128   0.94091099500656128   0.9130210280418396   0.87069100141525269   0.83861798048019409   0.8399999737739563   0.83861798048019409   0.87069100141525269   0.9130210280418396   0.94091099500656128   0.94091099500656128   0.9130210280418396   0.87069100141525269   0.83861798048019409   0.8399999737739563 ; 40   0.72000002861022949   0.72994697093963623   0.80368697643280029   0.86696100234985352   0.90003901720046997   0.90003901720046997   0.86696100234985352   0.80368697643280029   0.72994697093963623   0.72000002861022949   0.72994697093963623   0.80368697643280029   0.86696100234985352   0.90003901720046997   0.90003901720046997   0.86696100234985352   0.80368697643280029   0.72994697093963623   0.72000002861022949 ; 50   0.55000001192092896   0.59125500917434692   0.70745402574539185   0.79350900650024414   0.83955997228622437   0.83955997228622437   0.79350900650024414   0.70745402574539185   0.59125500917434692   0.55000001192092896   0.59125500917434692   0.70745402574539185   0.79350900650024414   0.83955997228622437   0.83955997228622437   0.79350900650024414   0.70745402574539185   0.59125500917434692   0.55000001192092896 ; 60   0.34000000357627869   0.43217799067497253   0.59747797250747681   0.66400599479675293   0.69351100921630859   0.69351100921630859   0.66400599479675293   0.59747797250747681   0.43217799067497253   0.34000000357627869   0.43217799067497253   0.59747797250747681   0.66400599479675293   0.69351100921630859   0.69351100921630859   0.66400599479675293   0.59747797250747681   0.43217799067497253   0.34000000357627869 ; 70   0.12999999523162842   0.26525399088859558   0.42558598518371582   0.46449598670005798   0.4771060049533844   0.4771060049533844   0.46449598670005798   0.42558598518371582   0.26525399088859558   0.12999999523162842   0.26525399088859558   0.42558598518371582   0.46449598670005798   0.4771060049533844   0.4771060049533844   0.46449598670005798   0.42558598518371582   0.26525399088859558   0.12999999523162842 ; 80   0.0099999997764825821   0.11369399726390839   0.20891000330448151   0.23325499892234802   0.23882800340652466   0.23882800340652466   0.23325499892234802   0.20891000330448151   0.11369399726390839   0.0099999997764825821   0.11369399726390839   0.20891000330448151   0.23325499892234802   0.23882800340652466   0.23882800340652466   0.23325499892234802   0.20891000330448151   0.11369399726390839   0.0099999997764825821 ];
	ssccall( 'data_set_matrix', data, 'sh_OpticalTable', sh_OpticalTable );
	ssccall('data_set_number', data, 'dnifc', 0);
	ssccall('data_set_number', data, 'I_bn', 0);
	ssccall('data_set_number', data, 'T_db', 15);
	ssccall('data_set_number', data, 'T_dp', 10);
	ssccall('data_set_number', data, 'P_amb', 930.5);
	ssccall('data_set_number', data, 'V_wind', 0);
	ssccall('data_set_number', data, 'm_dot_htf_ref', 0);
	ssccall('data_set_number', data, 'm_pb_demand', 0);
	ssccall('data_set_number', data, 'shift', 0);
	ssccall('data_set_number', data, 'SolarAz_init', 0);
	ssccall('data_set_number', data, 'SolarZen', 0);
	ssccall('data_set_number', data, 'T_pb_out_init', 290);
	ssccall('data_set_number', data, 'eta_ref', 0.9);%set to 0.9 since EE is not priority
    t = matfileObj.T_cold_ref ;
    s = matfileObj.T_amb_des;
    T = matfileObj.T_hot;
    D = matfileObj.dvar;
	ssccall('data_set_number', data, 'T_cold_ref', 't'); % Changing
	ssccall('data_set_number', data, 'dT_cw_ref', 10);
	ssccall('data_set_number', data, 'T_amb_des', 's'); % Changing
	ssccall('data_set_number', data, 'P_boil_des', 100);
	ssccall('data_set_number', data, 'P_rh_ref', 50);
	ssccall('data_set_number', data, 'rh_frac_ref', 0);
	ssccall('data_set_number', data, 'CT', 2);
	ssccall('data_set_number', data, 'startup_time', 0.35);
	ssccall('data_set_number', data, 'startup_frac', 0.35);
	ssccall('data_set_number', data, 'T_approach', 5);
	ssccall('data_set_number', data, 'T_ITD_des', 16);
	ssccall('data_set_number', data, 'P_cond_ratio', 1.0028);
	ssccall('data_set_number', data, 'pb_bd_frac', 0.02);
	ssccall('data_set_number', data, 'P_cond_min', 1.25);
	ssccall('data_set_number', data, 'n_pl_inc', 8);
	F_wc =[ 0; 0; 0; 0; 0; 0; 0; 0; 0 ];
	ssccall( 'data_set_array', data, 'F_wc', F_wc );
	ssccall('data_set_number', data, 'pc_mode', 1);
	ssccall('data_set_number', data, 'T_hot', 310); % Changing 
	ssccall('data_set_number', data, 'm_dot_st', 0);
	ssccall('data_set_number', data, 'T_wb', 12.80);
	ssccall('data_set_number', data, 'demand_var', 'd'); % Changing
	ssccall('data_set_number', data, 'standby_control', 0);
	ssccall('data_set_number', data, 'T_db_pwb', 12.80);
	ssccall('data_set_number', data, 'P_amb_pwb', 960);
	ssccall('data_set_number', data, 'relhum', 0.25);
	ssccall('data_set_number', data, 'f_recSU', 1);
	ssccall('data_set_number', data, 'dp_b', 0);
	ssccall('data_set_number', data, 'dp_sh', 5);
	ssccall('data_set_number', data, 'dp_rh', 0);
	ssccall('data_set_number', data, 'adjust:constant', 4);
	module = ssccall('module_create', 'tcslinear_fresnel'); 
	ok = ssccall('module_exec', module, data);
	if ~ok,
		disp('tcslinear_fresnel errors:'); 
		ii=0;
		while 1,
			err = ssccall('module_log', module, ii);
			if strcmp(err,''),
			      break;
			end
			disp( err );
			ii=ii+1;
		end
		return 
	end
	ssccall('module_free', module);
	annual_energy = ssccall('data_get_number', data, 'annual_energy' );
	disp(sprintf('%s = %g', 'Annual energy (year 1)', annual_energy));
	capacity_factor = ssccall('data_get_number', data, 'capacity_factor' );
	disp(sprintf('%s = %g', 'Capacity factor (year 1)', capacity_factor));
	annual_total_water_use = ssccall('data_get_number', data, 'annual_total_water_use' );
	disp(sprintf('%s = %g', 'Annual Water Usage', annual_total_water_use));
    time = ssccall('data_get_array', data, 'hour' );%Daily Hour
    Temp_in = ssccall('data_get_array', data, 't_field_in' ); %Field Steam Temperature at Header Inlet degC
    %fprintf('%s = %g\n', 'Field steam temperature header inlet(hourly)', t_field_in);
    Temp_out = ssccall('data_get_array', data, 't_field_out' ); %Field Steam Temperature at Header Outlet degC
    %fprintf('%s = %g\n', 'Field steam temperature header outlet(hourly)', t_field_out);
    t_loop_out = ssccall('data_get_array', data, 't_loop_out' ); %Field Steam Temperature at Collector degC
    mass_flowrate = ssccall('data_get_array', data, 'm_dot_field' ); %Field Steam Mass Flowrate kg/hr
    Steam_pres_in = ssccall('data_get_array', data, 'P_sf_in' ); %Field Steam Inlet Pressure bar
    Steam_pres_loss = ssccall('data_get_array', data, 'dP_tot' ); %Field Steam Pressure Loss bar
    %fprintf('%s = %g\n', 'Field steam pressure loss(hourly)', field_steam_pres_loss);
    thermal_eff = ssccall('data_get_array', data, 'eta_thermal' ); %Field Thermal Efficiency
    optical_eff = ssccall('data_get_array', data, 'eta_opt_ave' ); %Field Optical Efficiency
    
	ssccall('data_free', data);
	ssccall('unload');
    
     %.mat file saving
    save('XLF.mat');
    load ('XLF.mat');
    
end
