Design og modellering af metanolanlæg til VEnzin-visionen Bilag

Design og modellering af metanolanlæg til VEnzin-visionen Bilag Design og modellering af metanolanlæg til VEnzin-visionen Bilag

27.07.2013 Views

methanol.for d:/DTU/Eksamensprojekt/bilag/ if (omega_new*rho_ref.lt.rho_star) then omega_old=omega_new*0.999 else omega_old=omega_new*1.001 endif call calculate(f_old,tau,omega_old,in) error=0 endif df=f_new−f if ((abs(df/f).le.EPSV).or.(abs(df/f).le.1.d−6.and. $ omega_old.eq.omega_new)) then found=.true. goto 10 end if if ((f_new−f_old).eq.0) then dfdomega=(1D−12)/(omega_new−omega_old) else dfdomega=(f_new−f_old)/(omega_new−omega_old) endif c if (fiters) print*,in c $ ,f,f_new,f_old,abs(df/f),1/(omega_old*rho_ref*M)*1.d−6,1 c $ /(omega_new*rho_ref*M)*1.d−6,T_ref/tau−T_0C,i omega_old=omega_new domega=−(df/dfdomega) omega_new=omega_old+domega if (omega_old.lt.1) then if (domega.lt.(−(omega_old*.9))) then omega_new=omega_old−omega_old*.9 elseif (domega.gt.(omega_old*9)) then omega_new=omega_old+omega_old*9 endif else if ((abs(domega)).gt.(abs(omega_old*.05))) $ omega_new=omega_old+domega/abs(domega)*omega_old*.05 endif f_old=f_new i=i+1 goto 5 else goto 10 endif 10 if (.not.found) then error=5 if (fiters) print*,’Warning: No convergence in iterer_omega’,in $ ,f,f_new,abs(df/f),1/(omega_old*rho_ref*M)*1.d−6,1 $ /(omega_new*rho_ref*M)*1.d−6,T_ref/tau−T_0C,i end if omega=omega_new c if (fiters) print*,’iterer_omega. Antal iterationer=’,i return end subroutine iterer_tau(f,tau,omega,in,error) integer in,i,error,IMAX double precision f,tau,omega,tau_old,tau_new,dtau,f_new $ ,f_old,df,dfdtau,EPSV,R,P_c,T_c,T_ref,rho_ref,rho_star,M,T_0C logical found,fiters common/constants/EPSV,R,P_c,T_c,T_ref,rho_ref,rho_star,M,T_0C,IMAX $ ,fiters tau_old=tau call calculate(f_old,tau_old,omega,in) tau_new=tau_old*1.01 i=0 found=.false. 5 if ((i.lt.IMAX).and.(.not.found)) then call calculate(f_new,tau_new,omega,in) df=f_new−f if (abs(df/f).le.EPSV) then found=.true. goto 10 end if dfdtau=(f_new−f_old)/(tau_new−tau_old) tau_old=tau_new dtau=−(df/dfdtau) tau_new=tau_old+dtau if ((abs(dtau)).gt.(abs(tau_old*.2))) tau_new=tau_old+dtau $ /abs(dtau)*tau_old*.2 9/19 19−03−2007

methanol.for d:/DTU/Eksamensprojekt/bilag/ f_old=f_new i=i+1 goto 5 else goto 10 endif 10 if (.not.found) then error=5 if (fiters) print*,’Warning: No convergence in iterer_tau’,in,f $ ,f_new,abs(df/f),T_ref/tau_old−T_0C,T_ref/tau_new−T_0C,1 $ /(omega_new*rho_ref*M)*1.d−6,i end if tau=tau_new c if (fiters) print*,’iterer_tau. Antal iterationer=’,i return end subroutine test_tau_omega(tau,omega,error) integer error,IMAX double precision tau,omega,T,rho,T_trip,theta,P,T_t,P_t,a(3),EPSV $ ,R,P_c,T_c,T_ref,rho_ref,rho_star,M,T_0C logical fiters common/constants/EPSV,R,P_c,T_c,T_ref,rho_ref,rho_star,M,T_0C,IMAX $ ,fiters common/switches/iterate_rho_l T_trip=175.61d0 c K T=T_ref/tau if (T.gt.620) then if (fiters) print* $ ,’Temperature too high: higher than 346.85 C, T=’ $ ,T−T_0C,’ C’ error=4 elseif (T.lt.T_trip) then if (fiters) print* $ ,’Temperature too low: lower than triple point’ $ ,’ (−97.54 C), T=’,T−T_0C,’ C’ error=4 endif rho=omega*rho_ref if (rho.gt.0.032248) then if (fiters) print* $ ,’Specific volume too low: lower than 0.00097 m^3/kg, v=’ $ ,1/(rho*M)*1.d−6,’ m^3/kg’ error=4 elseif (rho.lt.0) then if (fiters) print*,’Negative specific volume: v=’, $ 1/(rho*M)*1.d−6,’ m^3/kg’ error=4 endif call calculate_P(P,tau,omega) P=1.d−5*P if (P.gt.8000) then if (fiters) print* $ ,’Pressure too high: higher than 8000 bar, P=’,P,’ bar’ error=4 elseif ((T.lt.300).and.(P.gt.2500)) then if (fiters) print* $ ,’Pressure too high when temperature is this low:’ $ ,’ Pressure higher than 2500 bar and temperature lower’ $ ,’ than 26.85 C, T=’,T−T_0C,’ C’,’, P=’,P,’ bar’ error=4 elseif ((T.gt.570).and.(P.gt.2)) then if (fiters) print* $ ,’Pressure too high when temperature is this high:’ $ ,’ Pressure higher than 2 bar and temperature higher than’ $ ,’ 296.85 C, T=’,T−T_0C,’ C’,’, P=’,P,’ bar’ error=4 elseif ((T.lt.207).and.(P.lt.2500)) then T_t=175.61d0 theta=(T/T_t)−1 P_t=0.187*1.d−5 a(1)=5.320770*1.d9 a(2)=4.524780*1.d9 a(3)=3.888861*1.d10 P_melt=P_t*(1+a(1)*theta+a(2)*theta**(3./2)+a(3)*theta**(4)) if (P.gt.P_melt) then 10/19 19−03−2007

methanol.for<br />

d:/DTU/Eksamensprojekt/bilag/<br />

f_old=f_new<br />

i=i+1<br />

goto 5<br />

else<br />

goto 10<br />

endif<br />

10 if (.not.found) then<br />

error=5<br />

if (fiters) print*,’Warning: No convergence in iterer_tau’,in,f<br />

$ ,f_new,abs(df/f),T_ref/tau_old−T_0C,T_ref/tau_new−T_0C,1<br />

$ /(omega_new*rho_ref*M)*1.d−6,i<br />

end if<br />

tau=tau_new<br />

c if (fiters) print*,’iterer_tau. Antal iterationer=’,i<br />

return<br />

end<br />

subroutine test_tau_omega(tau,omega,error)<br />

integer error,IMAX<br />

double precision tau,omega,T,rho,T_trip,theta,P,T_t,P_t,a(3),EPSV<br />

$ ,R,P_c,T_c,T_ref,rho_ref,rho_star,M,T_0C<br />

l<strong>og</strong>ical fiters<br />

common/constants/EPSV,R,P_c,T_c,T_ref,rho_ref,rho_star,M,T_0C,IMAX<br />

$ ,fiters<br />

common/switches/iterate_rho_l<br />

T_trip=175.61d0<br />

c K<br />

T=T_ref/tau<br />

if (T.gt.620) then<br />

if (fiters) print*<br />

$ ,’Temperature too high: higher than 346.85 C, T=’<br />

$ ,T−T_0C,’ C’<br />

error=4<br />

elseif (T.lt.T_trip) then<br />

if (fiters) print*<br />

$ ,’Temperature too low: lower than triple point’<br />

$ ,’ (−97.54 C), T=’,T−T_0C,’ C’<br />

error=4<br />

endif<br />

rho=omega*rho_ref<br />

if (rho.gt.0.032248) then<br />

if (fiters) print*<br />

$ ,’Specific volume too low: lower than 0.00097 m^3/kg, v=’<br />

$ ,1/(rho*M)*1.d−6,’ m^3/kg’<br />

error=4<br />

elseif (rho.lt.0) then<br />

if (fiters) print*,’Negative specific volume: v=’,<br />

$ 1/(rho*M)*1.d−6,’ m^3/kg’<br />

error=4<br />

endif<br />

call calculate_P(P,tau,omega)<br />

P=1.d−5*P<br />

if (P.gt.8000) then<br />

if (fiters) print*<br />

$ ,’Pressure too high: higher than 8000 bar, P=’,P,’ bar’<br />

error=4<br />

elseif ((T.lt.300).and.(P.gt.2500)) then<br />

if (fiters) print*<br />

$ ,’Pressure too high when temperature is this low:’<br />

$ ,’ Pressure higher than 2500 bar and temperature lower’<br />

$ ,’ than 26.85 C, T=’,T−T_0C,’ C’,’, P=’,P,’ bar’<br />

error=4<br />

elseif ((T.gt.570).and.(P.gt.2)) then<br />

if (fiters) print*<br />

$ ,’Pressure too high when temperature is this high:’<br />

$ ,’ Pressure higher than 2 bar and temperature higher than’<br />

$ ,’ 296.85 C, T=’,T−T_0C,’ C’,’, P=’,P,’ bar’<br />

error=4<br />

elseif ((T.lt.207).and.(P.lt.2500)) then<br />

T_t=175.61d0<br />

theta=(T/T_t)−1<br />

P_t=0.187*1.d−5<br />

a(1)=5.320770*1.d9<br />

a(2)=4.524780*1.d9<br />

a(3)=3.888861*1.d10<br />

P_melt=P_t*(1+a(1)*theta+a(2)*theta**(3./2)+a(3)*theta**(4))<br />

if (P.gt.P_melt) then<br />

10/19<br />

19−03−2007

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!