Parallel tool (parfor) and COM objects
Ältere Kommentare anzeigen
Dear All,
I am trying to optimize the run time of my model by using the parallel tool. In my model, I am working with a COM object as follow:
iphreeqc = actxserver('IPhreeqcCOM.Object'); % calling the COM object
iphreeqc.LoadDatabase('database\phreeqc.dat'); % adding the prefered database to the COM object
n = 100;
Temp = [1:1:100];
R = 0.082057366080960;
OUTPUT = cell(100,1);
parfor i=1:n
IPCstringCell= {'SOLUTION 1', ...
['-temp ', num2str(Temp(i))], ...
'-pressure 10', ...
'-units mmol/L', ...
'Na 0',...
'Cl 0',...
'-water 1', ...
'pH 7 charge',...
'Gas_phase',...
'-pressure 10',...
['volume ',num2str(R*(Temp(i)+273.15)/10)],...
'fixed_volume',...
['-temp ',num2str(Temp(i))],...
'H2(g) 10',...
'SELECTED_OUTPUT', ...
'-saturation_indices H2(g)', ...
'sim true',...
'step true',...
'soln true', ...
'pH true', ...
'-equilibrium_phases H2(g)',...
'-molalities H2', ...
'state false', ...
'time false', ...
'distance false'};
IPCstring = sprintf('%s\n', IPCstringCell{:});
iphreeqc.RunString( IPCstring );
output = iphreeqc.GetSelectedOutputArray;
OUTPUT{i,1} = output;
end
However, I am facing with the below error:

It seems I cannot use dot (.) index to work with the iphreeqc object in the above code. In this case, what should I do?
Kind regards,
Ahmad
2 Kommentare
Mario Malic
am 17 Apr. 2024
Try to open your COM application within parfor loop and see what happens.
Ahmadreza
am 17 Apr. 2024
Akzeptierte Antwort
Weitere Antworten (1)
Edric Ellis
am 18 Apr. 2024
0 Stimmen
The general approach to fixing cases where a variable is needed inside parfor, but cannot be directly sent there, is to use parallel.pool.Constant. You give the Constant constructor a function handle which gets run once on the workers to build the COM object, and then inside parfor, you access the .Value field of the Constant which has the value that got built.
1 Kommentar
Ahmadreza
am 18 Apr. 2024
Kategorien
Mehr zu Use COM Objects in MATLAB finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!