Dateiname = 'C:\Users\gk676.UNISIEGEN\Documents\Mo-Si-B_edit_2015_06_08.mph';		% Name der COMSOL-Datei die gespeichert werden soll

%Druck = 1.01325;				% Druck in bar
%Temperatur = 1000;				% Temperatur in K
%Phasen = int32([1,18,19,1,1,17,8,9]);		% Indices der berücksichtigten Phasen im Datenbankfile
%Konstituenten = int32([1,1,1,5,3,1,1,1]); % Indices der Phasenkonstituenten

%Anzahl = length(Phasen);			% Anzahl der Phasen
Anzahl = 7;
t = 0;								% Interne Hilfsvariable fuer Zeit

loadlibrary('ChemApp_DLL', 'header2'); % ChemApp laden

import com.comsol.model.*   % Modelutil laden
import com.comsol.model.util.*


model = mphload (Dateiname);           %Model laden

info = mphsolinfo(model,'solname','sol1');      %Zeitinformationen der Simulation abrufen

tlist = info.solvals;
Zeit = tlist(end);

Intervall = tlist(2)-tlist(1);
%Intervall = Zeit/20;
Zeitliste = colon(0,Intervall,Zeit);

u = mphgetu(model);                                         % Lösungsmatrix der Stoffmengen
u = u (:,1);
u_x = sparse(zeros(size(mphgetu(model),1),length(Zeitliste)));	% Lösungsmatrix der Stoffmengenanteile




while t < Zeit
model.study('std1').feature('time').set('tlist',['range(',num2str(t),',',num2str(Intervall),',',num2str(t),'+',num2str(Intervall),')']); 
%model.study('std1').feature('time').set('tlist',['range(num2str(t),',num2str(Intervall),',t+',num2str(Intervall),')']);  %Simulationszeiten setzen
model.sol('sol1').runAll;                               % Simulation starten
Schritt = round(t/Intervall)+1;	
x=mphgetu(model);
u = [u,x(:,end)];

 

for i=1:(length(mphgetu(model))/Anzahl)				% Start der Schleife für die chemische Reaktion
		for j=1:Anzahl
			v(j) = max(u(j+(i-1)*Anzahl,end),0);		% Auslesen der Punktzusammensetzung im Gitter als Vektor
        end
        
a = libpointer('doublePtr',v);
%b = libpointer('int32Ptr',Phasen);
%c = libpointer('int32Ptr',Konstituenten);


[x] = calllib('ChemApp_DLL', 'gleichgewicht', a);% Übergeben der Punktzusammensetzung in externe Datenbank
%[x] = calllib('ChemApp_DLL', 'gleichgewicht', v, Phasen, Konstituenten, Temperatur, Druck);

setdatatype(x,'doublePtr',1,7);
r=x.Value;


		for j=1:Anzahl
			u((j+(i-1)*Anzahl),end) = r(j);		      		% Rückgabe der Gleichgewichtsstoffmengen
			u_x(j+(i-1)*Anzahl,Schritt+1) = r(j)/sum(r);		% Berechnung der Stoffmengenanteile
		end
	end


model.sol('sol1').setU(u(:,end));       %Stoffmengen an Comsol übergeben
model.sol('sol1').setPVals(Zeitliste(size(u,2)));
model.sol('sol1').createSolution();

t = t + Intervall;

end

unloadlibrary 'ChemApp_DLL';


for i = 1:size(u,2)
model.sol('sol1').setU(i,u(:,i));
end
model.sol('sol1').setPVals(Zeitliste);
model.sol('sol1').createSolution();

mphplot(model,'pg1'); %Grafik der Konzentrationsverteilung plotten
