Commit d8121365 authored by Marco Ratto's avatar Marco Ratto

1) Renamed options according ti WiKi table;

2) get rid of MasterName and DyMo;
3) more comments;
parent cab8941c
......@@ -54,8 +54,6 @@ M_=myinputs.M_;
if whoiam
Parallel=myinputs.Parallel;
MasterName=myinputs.MasterName;
DyMo=myinputs.DyMo;
end
if ~exist('MhDirectoryName'),
MhDirectoryName = CheckPath('metropolis');
......@@ -70,9 +68,9 @@ if whoiam
if Parallel(ThisMatlab).Local,
waitbarTitle=['Local '];
else
waitbarTitle=[Parallel(ThisMatlab).PcName];
waitbarTitle=[Parallel(ThisMatlab).ComputerName];
end
fMessageStatus(0,whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab), MasterName, DyMo);
fMessageStatus(0,whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab));
end
for j=fpar:npar,
fprintf(' Parameter %d... ',j);
......@@ -121,7 +119,7 @@ for j=fpar:npar,
fprintf('Done! \n');
if whoiam,
waitbarString = [ 'Parameter ' int2str(j) '/' int2str(npar) ' done.'];
fMessageStatus((j-fpar+1)/(npar-fpar+1),whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab), MasterName, DyMo)
fMessageStatus((j-fpar+1)/(npar-fpar+1),whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab))
end
end
......
......@@ -195,7 +195,7 @@ localVars.NumberOfIRFfiles_dsgevar=NumberOfIRFfiles_dsgevar;
localVars.ifil2=ifil2;
% Like sequential execution!
if isnumeric(options_.parallel),% | isunix, % For the moment exclude unix platform from parallel implementation.
if isnumeric(options_.parallel),
[fout] = PosteriorIRF_core1(localVars,1,B,0);
else
% Parallel execution!
......@@ -424,9 +424,9 @@ end
% The others file format are generated in parallel by PosteriorIRF_core2!
% Comment for testing!
% Comment for testing!
if ~exist('OCTAVE_VERSION')
if isnumeric(options_.parallel) % || (M_.exo_nbr*ceil(size(varlist,1)/MaxNumberOfPlotPerFigure))<8,% | isunix, % for the moment exclude unix platform from parallel implementation
if isnumeric(options_.parallel) || (M_.exo_nbr*ceil(size(varlist,1)/MaxNumberOfPlotPerFigure))<8,
[fout] = PosteriorIRF_core2(localVars,1,M_.exo_nbr,0);
else
globalVars = struct('M_',M_, ...
......
......@@ -49,7 +49,6 @@ end
% Reshape 'myinputs' for local computation.
% In order to avoid confusion in the name space, the instruction struct2local(myinputs) is replaced by:
% Da CONTROLLARE con MARCO!
IRUN = myinputs.IRUN;
irun =myinputs.irun;
irun2=myinputs.irun2;
......@@ -77,12 +76,9 @@ MAX_nruns=myinputs.MAX_nruns;
NumberOfIRFfiles_dsge=myinputs.NumberOfIRFfiles_dsge;
NumberOfIRFfiles_dsgevar=myinputs.NumberOfIRFfiles_dsgevar;
ifil2=myinputs.ifil2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if whoiam
Parallel=myinputs.Parallel;
MasterName=myinputs.MasterName;
DyMo=myinputs.DyMo;
end
......@@ -95,10 +91,10 @@ if whoiam
if Parallel(ThisMatlab).Local,
waitbarTitle=['Local '];
else
waitbarTitle=[Parallel(ThisMatlab).PcName];
waitbarTitle=[Parallel(ThisMatlab).ComputerName];
RemoteFlag =1;
end
fMessageStatus(0,whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab), MasterName, DyMo);
fMessageStatus(0,whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab));
else
if exist('OCTAVE_VERSION')
diary off;
......@@ -130,7 +126,9 @@ if whoiam
NumberOfIRFfiles_dsgevar=NumberOfIRFfiles_dsgevar(whoiam);
end
while fpar<npar % Parallel 'while'!!!
% Parallel 'while' very good!!!
while fpar<npar
fpar = fpar + 1;
irun = irun+1;
irun2 = irun2+1;
......@@ -273,11 +271,10 @@ while fpar<npar % Parallel 'while'!!!
elseif ~whoiam
waitbar(fpar/npar,h);
end
% if mod(fpar,10)==0 & whoiam,
if whoiam,
fprintf('Done! \n');
waitbarString = [ 'Subdraw ' int2str(fpar) '/' int2str(npar) ' done.'];
fMessageStatus((fpar-fpar0)/(npar-fpar0),whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab), MasterName, DyMo);
fMessageStatus((fpar-fpar0)/(npar-fpar0),whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab));
end
end
......
......@@ -65,8 +65,6 @@ MaxNumberOfPlotPerFigure=myinputs.MaxNumberOfPlotPerFigure;
% Necessary only for remote computing!
if whoiam
Parallel=myinputs.Parallel;
MasterName=myinputs.MasterName;
DyMo=myinputs.DyMo;
end
% To save the figures where the function is computed!
......@@ -79,10 +77,10 @@ if whoiam,
if Parallel(ThisMatlab).Local,
waitbarTitle=['Local '];
else
waitbarTitle=[Parallel(ThisMatlab).PcName];
waitbarTitle=[Parallel(ThisMatlab).ComputerName];
RemoteFlag = 1;
end
fMessageStatus(0,whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab), MasterName, DyMo);
fMessageStatus(0,whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab));
end
OutputFileName={};
......@@ -164,11 +162,11 @@ for i=fpar:npar,
if whoiam,
fprintf('Done! \n');
waitbarString = [ 'Exog. shocks ' int2str(i) '/' int2str(npar) ' done.'];
fMessageStatus((i-fpar+1)/(npar-fpar+1),whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab), MasterName, DyMo);
fMessageStatus((i-fpar+1)/(npar-fpar+1),whoiam,waitbarString, waitbarTitle, Parallel(ThisMatlab));
end
end% loop over exo_var
myoutput.OutputFileName = OutputFileName;
......@@ -57,14 +57,12 @@ nruns=myinputs.nruns;
NewFile=myinputs.NewFile;
MAX_nruns=myinputs.MAX_nruns;
d=myinputs.d;
InitSizeArray=myinputs.InitSizeArray;
InitSizeArray=myinputs.InitSizeArray;
record=myinputs.record;
varargin=myinputs.varargin;
if whoiam
Parallel=myinputs.Parallel;
MasterName=myinputs.MasterName;
DyMo=myinputs.DyMo;
% initialize persistent variables in priordens()
priordens(xparam1,bayestopt_.pshape,bayestopt_.p6,bayestopt_.p7, ...
bayestopt_.p3,bayestopt_.p4,1);
......@@ -121,13 +119,13 @@ for b = fblck:nblck,
elseif whoiam
% keyboard;
waitbarString = ['Please wait... Metropolis-Hastings (' int2str(b) '/' int2str(options_.mh_nblck) ')...'];
% waitbarTitle=['Metropolis-Hastings ',options_.parallel(ThisMatlab).PcName];
% waitbarTitle=['Metropolis-Hastings ',options_.parallel(ThisMatlab).ComputerName];
if options_.parallel(ThisMatlab).Local,
waitbarTitle=['Local '];
else
waitbarTitle=[options_.parallel(ThisMatlab).PcName];
waitbarTitle=[options_.parallel(ThisMatlab).ComputerName];
end
fMessageStatus(0,whoiam,waitbarString, waitbarTitle, options_.parallel(ThisMatlab), MasterName, DyMo);
fMessageStatus(0,whoiam,waitbarString, waitbarTitle, options_.parallel(ThisMatlab));
else,
hh = waitbar(0,['Please wait... Metropolis-Hastings (' int2str(b) '/' int2str(options_.mh_nblck) ')...']);
set(hh,'Name','Metropolis-Hastings');
......@@ -138,7 +136,7 @@ for b = fblck:nblck,
irun = fline(b);
j = 1;
while j <= nruns(b)
par = feval(ProposalFun, xparam1, d * jscale, n);
par = feval(ProposalFun, xparam1, proposal_covariance, n);
if all( par(:) > mh_bounds(:,1) ) & all( par(:) < mh_bounds(:,2) )
try
logpost = - feval(TargetFun, par(:),varargin{:});
......@@ -149,8 +147,8 @@ for b = fblck:nblck,
logpost = -inf;
end
r = logpost - ilogpo2(b) + ...
log(feval(ProposalDensity, ix2(b,:), xparam1, d * jscale, n)) - ...
log(feval(ProposalDensity, par, xparam1, d * jscale, n));
log(feval(ProposalDensity, ix2(b,:), xparam1, proposal_covariance, n)) - ...
log(feval(ProposalDensity, par, xparam1, proposal_covariance, n));
if (logpost > -inf) && (log(rand) < r)
x2(irun,:) = par;
ix2(b,:) = par;
......@@ -174,7 +172,7 @@ for b = fblck:nblck,
if mod(j,50)==0 & whoiam,
% keyboard;
waitbarString = [ '(' int2str(b) '/' int2str(options_.mh_nblck) '), ' sprintf('accept. %3.f%%%%', 100 * isux/j)];
fMessageStatus(prtfrc,whoiam,waitbarString, '', options_.parallel(ThisMatlab), MasterName, DyMo)
fMessageStatus(prtfrc,whoiam,waitbarString, '', options_.parallel(ThisMatlab))
end
else
if mod(j, 3)==0 & ~whoiam
......@@ -182,7 +180,7 @@ for b = fblck:nblck,
elseif mod(j,50)==0 & whoiam,
% keyboard;
waitbarString = [ '(' int2str(b) '/' int2str(options_.mh_nblck) ') ' sprintf('%f done, acceptation rate %f',prtfrc,isux/j)];
fMessageStatus(prtfrc,whoiam,waitbarString, waitbarTitle, options_.parallel(ThisMatlab), MasterName, DyMo)
fMessageStatus(prtfrc,whoiam,waitbarString, waitbarTitle, options_.parallel(ThisMatlab))
end
end
......
function [ErrorCode] = AnalyseComputationalEnviroment(DataInput)
% PARALLEL CONTEXT
% In a parallel context, this function is used to check the user computational request.
% If no error happen the function return 0.
......@@ -9,19 +10,21 @@ function [ErrorCode] = AnalyseComputationalEnviroment(DataInput)
% DataInput is the strcture option_.parallel, with the follow fields:
%
% Local Define the computation place: 1 is on local machine, 0 remote
% PcName Intuitive: contain the computer name.
% NumCPU Intuitive: contain the CPU number.
% user Intuitive: contain the use name for the PcName.
% passwd Intuitive: contain the password for the user name in PcName.
% ComputerName Intuitive: contain the computer name.
% CPUnbr Intuitive: contain the CPU number.
% UserName Intuitive: contain the use name for the ComputerName.
% passwd Intuitive: contain the password for the user name in ComputerName.
% RemoteDrive Drive used for Local/Remote computation (data exchange, etc) must be contain 'RemoteFolder'.
% RemoteFolder Folder in RemoteDrive used for Local/Remote computation.
% RemoteDirectory Folder in RemoteDrive used for Local/Remote computation.
% MatlabOctavePath []
% DynarePath []
%
% This information is typed by the user using the *.mod file,
% the goal of this function is to check if it correct.
%
%
% The variable ErrorCode is initialized at 0. If there are non problems with
% Local, PcName connections,... in general with parallel software execution,
% Local, ComputerName connections,... in general with parallel software execution,
% the ErrorCode is unchanged, in the others cases 1, 2 , ... The values
% table is below.
%
......@@ -34,7 +37,7 @@ function [ErrorCode] = AnalyseComputationalEnviroment(DataInput)
%
% Value 1: The variable 'Local' has a bad value!
%
% Value 2: The variable 'NumCPU' has a bad value. Parallel Dynare
% Value 2: The variable 'CPUnbr' has a bad value. Parallel Dynare
% require an input data like [s:d] with s<=d, in this case we
% have s>d!
% 2.1 The user asks to use more CPU of those available.
......@@ -91,14 +94,14 @@ end
%%%%%%%%%% Local Machine %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% In this case we need to check only the variable 'NumCPU'.
% In this case we need to check only the variable 'CPUnbr'.
% We run the parallel code on local computer, so the others fields are automatically
% fixed by Dynare. Then the user can also fill them with wrong values.
if (DataInput.Local == 1)
yn=isempty(DataInput.NumCPU);
yn=isempty(DataInput.CPUnbr);
if yn==1
ErrorCode=2;
......@@ -112,23 +115,23 @@ if (DataInput.Local == 1)
[si0 de0]=system(['psinfo \\']);
RealNumCPU=-1;
RealNumCPU=GiveCPUnumber(de0);
RealCPUnbr=-1;
RealCPUnbr=GiveCPUnumber(de0);
% Trasforming the input data provided in a form [n1:n2] in a single numerical
% value.
DataInput.NumCPU=length(DataInput.NumCPU);
DataInput.CPUnbr=length(DataInput.CPUnbr);
if DataInput.NumCPU == RealNumCPU
if DataInput.CPUnbr == RealCPUnbr
% It is Ok!
end
if DataInput.NumCPU > RealNumCPU
if DataInput.CPUnbr > RealCPUnbr
ErrorCode=2.1;
end
if DataInput.NumCPU < RealNumCPU
if DataInput.CPUnbr < RealCPUnbr
ErrorCode=2.2;
end
end
......@@ -143,7 +146,7 @@ if (DataInput.Local == 0)
si1=[];
de1=[];
[si1 de1]=system(['ping ', DataInput.PcName]);
[si1 de1]=system(['ping ', DataInput.ComputerName]);
if si1==1
% It is impossiblie to be connected to the
......@@ -160,7 +163,7 @@ if (DataInput.Local == 0)
% possible to exchange data with them.
if (isempty(DataInput.user)) || (isempty(DataInput.passwd))
if (isempty(DataInput.UserName)) || (isempty(DataInput.Password))
% The fields user name and/or password are/is empty!
......@@ -170,13 +173,21 @@ if (DataInput.Local == 0)
end
% Now we very if RemoteDrive and/or RemoteFolder exist on remote
% Now we very if RemoteDrive and/or RemoteDirectory exist on remote
% computer
StartPwd=pwd;
if (isempty(DataInput.RemoteDirectory))
disp 'Remote Drive and/or Remote Folder not exist!';
ErrorCode=5;
return
end
try
cd(['\\',DataInput.PcName,'\',DataInput.RemoteDrive,'$\',DataInput.RemoteFolder]);
cd(['\\',DataInput.ComputerName,'\',DataInput.RemoteDrive,'$\',DataInput.RemoteDirectory]);
catch
cd ([StartPwd]);
......@@ -187,18 +198,28 @@ if (DataInput.Local == 0)
end
cd ([StartPwd]);
% Now we verify if it possible to exchange data with the remote
% computer:
fT = fopen('WriteTest.txt', 'w+');
fclose(fT);
Status=copyfile('WriteTest.txt', ['\\',DataInput.ComputerName,'\',DataInput.RemoteDrive,'$\',DataInput.RemoteDirectory]);
Status=copyfile('Tracing.m', ['\\',DataInput.PcName,'\',DataInput.RemoteDrive,'$\',DataInput.RemoteFolder]);
if Status==1
% Remote Drive/Folder exist on Remote computer and
% it is possible to exchange data with him.
%Delete Traces (local and remotely)
delete ('WriteTest.txt')
delete(['\\',DataInput.ComputerName,'\',DataInput.RemoteDrive,'$\',DataInput.RemoteDirectory,'\WriteTest.txt']);
else
ErrorCode=6;
......@@ -207,12 +228,12 @@ if (DataInput.Local == 0)
% Now we verify if it is possible execute a matlab section on remote
% machine when the user is .user with password .passwd
% machine when the user is .UserName with password .Password
si2=[];
de2=[];
[si2 de2]=system(['start /B /WAIT psexec \\',DataInput.PcName,' -e -u ',DataInput.user,' -p ',DataInput.passwd,' -W ',DataInput.RemoteDrive,':\',DataInput.RemoteFolder, ' -low matlab -nosplash -nodesktop -minimize -r Tracing']);
[si2 de2]=system(['start /B /WAIT psexec \\',DataInput.ComputerName,' -e -u ',DataInput.UserName,' -p ',DataInput.Password,' -W ',DataInput.RemoteDrive,':\',DataInput.RemoteDirectory, ' -low matlab -nosplash -nodesktop -minimize -r Tracing']);
NoError='error code 0';
......@@ -228,34 +249,34 @@ if (DataInput.Local == 0)
else
% No error it is possible execute a matlab section on remote
% machine when the user is .user with password .passwd
% machine when the user is .UserName with password .Password
end
% At this point we can to analyze the remote computer hardware.
RealNumCPU=-1;
RealCPUnbr=-1;
[si0 de0]=system(['psinfo \\']);
RealNumCPU=GiveCPUnumber(de0);
RealCPUnbr=GiveCPUnumber(de0);
% Trasforming the input data provided in a form [n1:n2] in a single numerical
% value.
DataInput.NumCPU=length(DataInput.NumCPU);
DataInput.CPUnbr=length(DataInput.CPUnbr);
if DataInput.NumCPU == RealNumCPU
if DataInput.CPUnbr == RealCPUnbr
% It is Ok!
end
if DataInput.NumCPU > RealNumCPU
if DataInput.CPUnbr > RealCPUnbr
ErrorCode=2.1;
end
if DataInput.NumCPU < RealNumCPU
if DataInput.CPUnbr < RealCPUnbr
ErrorCode=2.2;
end
......
function [TiSt] = CreateTimeString()
% PARALLEL CONTEXT
% In a parallel context, this is ...
%
%
% INPUT/OUTPUT description:
% In a parallel context, this is a specialized version of clock() function.
%
% INPUTS
% None
%
% OUTPUTS
% o TiSt [] ...
%
% Copyright (C) 2009-2010 Dynare Team
%
......
function [ErrorCode] = InitializeComputationalEnviroment(DataInput)
function InitializeComputationalEnviroment(DataInput)
% PARALLEL CONTEXT
% In a parallel context, this function is used to Initialize the computational enviroment according with
% the user request.
% If no error happen the function return 0.
%
% INPUT/OUTPUT description:
% INPUTS
% o DataInput [] ...
%
% OUTPUTS
% None
%
%
%
% The variable ErrorCode is initialized at 0. If there are non problems
% the ErrorCode is unchanged, in the others cases is set equak to 1, 2 , ... The values
% table is below.
%
%
% Table for ErrorCode Values.
%
%
% Then at the point call of this function it is possible react in a best way, in accord
% with the ErrorCode.
% Copyright (C) 2009-2010 Dynare Team
%
% This file is part of Dynare.
......@@ -38,13 +27,13 @@ function [ErrorCode] = InitializeComputationalEnviroment(DataInput)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
ErrorCode=0;
% Invoke masterParallel with 8 arguments and the last equal to 1. With this shape
% for input data, masterParallel only create a new directory for remote
% computation. The name of this directory is time depending. For local
% parallel computations with Strategy == 1 delete the traces (if exists) of
% previous computations.
% previous computations.
delete(['P_slave_*End.txt'])
masterParallel(DataInput.parallel,[],[],[],[],[],[],DataInput.parallel_info,1);
......
function closeSlave(Parallel,TmpFolder),
% PARALLEL CONTEXT
% In parallel context, this utility closes all remote matlab instances
% called by masterParallel with strategy (1) i.e. always open (which leaves
% called by masterParallel when strategy (1) is active i.e. always open (which leaves
% open remote matlab instances).
%
% INPUTS
% o Parallel [struct vector] copy of options_.parallel.
% o TmpFolder string if islocal==0, is the name of didectory devoted to remote computation.
% This directory is named using current date
% and is used only one time and then deleted.
% If islocal==1, TmpFolder=''.
%
%
% OUTPUTS
% None
......@@ -27,15 +32,17 @@ function closeSlave(Parallel,TmpFolder),
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
for indPC=1:length(Parallel),
if (Parallel(indPC).Local==0),
dynareParallelDelete( 'slaveParallel_input*.mat',TmpFolder,Parallel(indPC));
else
end
%else
delete( 'slaveParallel_input*.mat');
pause(1)
delete(['slaveParallel_*.log']);
end
%end
delete ConcurrentCommand1.bat;
end
while(1)
......
......@@ -14,8 +14,8 @@ function [nCPU, totCPU, nBlockPerCPU, totSLAVES] = distributeJobs(Parallel, fBlo
% threads run on that CPU
% o totCPU [int] total number of CPU used (can be lower than
% the number of CPU declared in "Parallel", if
% the number of required threads is lower)
% o nCPU he number of CPU in user format.
% the number of required threads is lower!)
% o nCPU the number of CPU in user format.
% Copyright (C) 2010 Dynare Team
%
......@@ -36,7 +36,7 @@ function [nCPU, totCPU, nBlockPerCPU, totSLAVES] = distributeJobs(Parallel, fBlo
totCPU=0;
for j=1:length(Parallel),
nCPU(j)=length(Parallel(j).NumCPU);
nCPU(j)=length(Parallel(j).CPUnbr);
totCPU=totCPU+nCPU(j);
end
......
......@@ -2,10 +2,13 @@ function dynareParallelDelete(fname,pname,Parallel)
% PARALLEL CONTEXT
% In a parallel context, this is a specialized version of delete() function.
%
% INPUTS
% o fname [] ...
% o pname [] ...
% o Parallel [] ...
%
% INPUT/OUTPUT description:
%
%
% OUTPUTS
% None
%
%
% Copyright (C) 2009-2010 Dynare Team
......@@ -38,9 +41,9 @@ end
for indPC=1:length(Parallel),
if isunix
system(['ssh ',Parallel(indPC).user,'@',Parallel(indPC).PcName,' rm -f ',Parallel(indPC).RemoteFolder,'/',pname,fname]);
system(['ssh ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,' rm -f ',Parallel(indPC).RemoteDirectory,'/',pname,fname]);
else
delete(['\\',Parallel(indPC).PcName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteFolder,'\',pname,fname]);
delete(['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',pname,fname]);
end
end
function dirlist = dynareParallelDir(filename,PRCDir,Parallel)
% PARALLEL CONTEXT
% In a parallel context, this is ...
%
%
% INPUT/OUTPUT description:
% In a parallel context, this is a specialized version of dir() function.
%
% INPUTS
% o filename [] ...
% o PRCDir [] ...
% o Parallel [] ...
%
% OUTPUTS
% o dirlist [] ...
%
% Copyright (C) 2009-2010 Dynare Team
%
......@@ -28,7 +31,7 @@ dirlist=[];
for indPC=1:length(Parallel),
if isunix || (~matlab_ver_less_than('7.4') && ismac),
if Parallel(indPC).Local==0,
[check, ax]=system(['ssh ',Parallel(indPC).user,'@',Parallel(indPC).PcName,' ls ',Parallel(indPC).RemoteFolder,'/',PRCDir,'/',filename]);
[check, ax]=system(['ssh ',Parallel(indPC).UserName,'@',Parallel(indPC).ComputerName,' ls ',Parallel(indPC).RemoteDirectory,'/',PRCDir,'/',filename]);
if check ~ 0
ax=[];
end
......@@ -43,7 +46,7 @@ for indPC=1:length(Parallel),
dirlist = [dirlist, ax];
else
if Parallel(indPC).Local==0,
ax=ls(['\\',Parallel(indPC).PcName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteFolder,'\',PRCDir,'\',filename]);
ax=ls(['\\',Parallel(indPC).ComputerName,'\',Parallel(indPC).RemoteDrive,'$\',Parallel(indPC).RemoteDirectory,'\',PRCDir,'\',filename]);
else
ax=ls(filename);
end
......
function dynareParallelGetFiles(NamFileInput,PRCDir,Parallel)
% PARALLEL CONTEXT
% In a parallel context, this is ...
% In a parallel context, this is a specialized mono-directional (Remote to Local) version of copy()
% function.