function [J]=proce(perfil,inter),
%
% Programa que simula la fermentacion de la cerveza.  
% 6 de abril 2001
%
% USO: 	J=PROCE(PERFIL,INTER)
%
%	PERFIL,	(Lch)x1 Perfil de temperaturas.
%	INTER,	(N-1)x1 Intervalo temperaturas.
%  J=[EA e sumamulb vdk distancia calor];
%

% APRENDIZAJE AUTOMÁTICO (G. Pajares y J. M. de la Cruz, Eds.)
% Editorial: RA-MA
% Capítulo 9: El Aprendizaje con Algoritmos Genéticos
% Autores: Bonifacio de Andres y Toro


[fila,jmax]=size(perfil);
v=ones(fila,1);

PASOTIEMPO=.1;
ENTALPIA=122.0;
DENSIDAD=0.987;
CEMOSTO=1.0;

%Inicializar las variables
s_ini=135*v;sc_old=0*v;s_old=s_ini-sc_old; 
e_old=1.0*v; EA_old=0*v; vdk_old=0.0*v;
sumamulb=0*v; suma_old=0*v; sumae=0*v; eaux=0*v;

t=0; dt=PASOTIEMPO;
x(1)=4.0;
xactiva_old=0.02*x(1)*v; 
xlat_ini=0.48*x(1)*v; xlat_old=0.48*x(1)*v;

T=perfil(:,1);

Grad=(diff(perfil'))'./(v*inter);

inc=round(inter/dt);
dti=inter./inc;

calor=0;
j=1; 
lastcalor=0;
% Ejecución de los tramos de temperatura
for j=1:jmax-1
  % Interv=inter(j);
  
   calorazucar=0.0; calorsistema=0.0;
    
   T=cumsum([perfil(:,j),Grad(:,j)*dti(j)*ones(1,inc(j))]')';
   expo=(1.99536*(T+273.15));
   T2=T.*T;
   mux0=1.095e47*exp((-6.372e4)./expo);  
   Km=3.377e56*exp((-7.645e4)./expo);    
   Yeas=1.1290e39*exp((-5.3056e4)./expo); 
   mus0=6.232e-19*exp((2.3254e4)./expo);
   mua0=2.63865e1*exp((-2.52859e3)./expo);
   mul=2.2041e13*exp((-1.8959e4)./expo); 
   ks=1.1081e-52*exp((6.82492e4)./expo);
   
   kd1=-6.1344e-8*T2+8.4266e-6*T-1.7672e-5;
   kd2=-9.1384e-7*T2+6.7071e-5*T-0.1251e-3; 
   
   
   mulb=9.91e-17*exp(2.31*T);
   
   dt=dti(j);
 
   for i=2:inc(j)+1; 

%   while (Interv >=0.1),
%    T=T+Grad(:,j)*dt;  
%    expo=(1.99536*(T+273.15));
%    T2=T.*T;
    t=t+dt;

    mux=(mux0(:,i).*s_old)./(0.5*s_ini + e_old);   
    mus=(mus0(:,i).*s_old)./(ks(:,i)+s_old);
    factor=(1*v-(2.0*e_old./s_ini));
    mua=(mua0(:,i).*s_old)./(ks(:,i)+s_old);
    sumamulb=sumamulb+mulb(:,i)*dt;
    
    xactiva=xactiva_old+(mux.*xactiva_old-Km(:,i).*xactiva_old+mul(:,i).*xlat_old)*dt;
    Er=find( (xactiva<(0.5*v))&(t>30) ); 
    
    if ~(isempty(Er)), xactiva(Er)=0.5*ones(size(Er)); end; 
        
    Ytest=find((xactiva_old<(0.384*x(1)))&(t<30));     
    
    if  any(Ytest),   
       xactiva(Ytest)=xactiva_old(Ytest)+mul(Ytest,i).*(xlat_ini(Ytest)-xactiva_old(Ytest))*dt;
    end;

    sc=sc_old+(mus.*xactiva)*dt;
    s=s_ini-sc;
    Ers=find(s<0.2); if ~(isempty(Ers)), s(Ers)=0.2*ones(size(Ers)); end;
    e=e_old+(mua.*factor).*(xactiva*dt);
    EA=EA_old+ Yeas(:,i).*(s_old-s);
    vdk= vdk_old+(kd1(:,i).*s.*xactiva-kd2(:,i).*vdk_old.*e)*dt;
	 Erv=find(vdk<0.0); if ~(isempty(Erv)), vdk(Erv)=zeros(size(Erv)); end;
    xlat=xlat_old-(mul(:,i).*xlat_old)*dt;
    
        dcalorazucar=ENTALPIA*mus.*xactiva*dt;
        dcalorsistema=1000.0*DENSIDAD*CEMOSTO*Grad(:,j)*dt;
        %calorazucar=calorazucar+dcalorazucar;
        %calorsistema=calorsistema+dcalorsistema;
        %calor=abs(calorsistema-calorazucar);
        dcalor=dcalorsistema-dcalorazucar;
  		  difcalor=(dcalor-lastcalor);
        expon= (dcalor > 0 & lastcalor < 0) | (dcalor < 0 & lastcalor > 0);
        calor=calor+4.^(dcalor<0).*(dcalor.^2)+floor(1+2.^(lastcalor<0).*abs(lastcalor)/5).*2.^expon.*(difcalor).^2;

%        calor=calor+(3.^(dcalor<0)).*(dcalor.^2)+(3.^expon).*(difcalor.^2);
        lastcalor=dcalor;
       
    e_old=e;
    sc_old=sc;
    EA_old=EA;
    vdk_old=vdk;
    s_old=s;
    xactiva_old=xactiva;
    xlat_old=xlat;
    Er=[]; Ers=[]; Erv=[];
%   i,EA,vdk,sumamulb,e,pause,
 
   
end;
%disp('dfasdf'),pause;

end;

% redondeo de decimales:
tempaux=([zeros(fila,1), perfil]-[perfil, zeros(fila,1)]);
distancia=sum(abs( (tempaux(:,2:jmax-1))' ))';


J=[EA e sumamulb vdk distancia calor];


