C*********************************************************************** ! This component has been assigned Type Number 205. If that number conflicts with ! another user Type number, you will need to change it and recompile the appropriate ! dll. SUBROUTINE TYPE205(TIME,XIN,OUT,T,DTDT,PAR,INFO,ICNTRL,*) !DEC$ATTRIBUTES DLLEXPORT :: TYPE205 C ---------------------------------------------------------------------- C C TYPE 205 : CONUIT MODEL (PIPE or DUCT) C C FLOW: kg/s (Fluid mass flow rate) C TIN: C (Fluid inlet temperature) C TAMB: C (Ambient temperature) C P2: kPa (Pressure at conduit outlet) C HIA: kW/C (Heat transfer coeff*area, inside surface) C HOA: kW/C (Heat transfer coeff*area, outside surface) C CM: kJ/C (Thermal capacitance of conduit material) C VOL: m3 (Volume of conduit) C K: 0.001/(kg-m) (Flow Resistance) C H: m (height of outlet relative to inlet) C (sign convention: positive H --> uphill flow) C C The last parameter, MODE, has the following meaning: C MODE = -2 => water, detailed dynamics (one diff.eq.) C MODE = -1 => air, detailed dynamics (one diff.eq.) C MODE = 1 => air, simple dynamics (no diff.eq.) C MODE = 2 => water, simple dynamics (no diff.eq.) C C*********************************************************************** DOUBLE PRECISION XIN,OUT REAL PAR,S,K INTEGER INFO DIMENSION XIN(5),OUT(2),PAR(7),INFO(15) C REAL PAR,SAVED,K C LOGICAL FRZTO C INTEGER ITIME,IOSTAT C DIMENSION XIN(5),OUT(2),PAR(7),SAVED(11) C DIMENSION IOSTAT(5) C* COMMON /PROPER/ RHOA,RHOW,CPA,CPW C* COMMON /CHRONO/ TIME,TSTEP,TTIME,TMIN,ITIME C* COMMON /SOSCOM/ RTOLX,ATOLX,XTOL C* COMMON /XINIT/ INIT,NSAVED C The RHOA,RHOW,CPA,CPW properties @300 K, 1 atm C The units are: C RHOA,RHOW - kg/m^3 C CPA,CPW - kJ/kg-K COMMON /SIM/ TIME0,TFINAL,DELT,IWARN COMMON /STORE/ NSTORE,IAV,S(5000) DATA RHOA,RHOW,CPA,CPW /1.1614,999,1.007,4.179/ DATA INIT /0/ DATA GRAV /9.80665/ ! Set the version information for TRNSYS IF (INFO(7).EQ.-2) THEN INFO(12) = 15 RETURN 1 ENDIF IF (INFO(7) .EQ. -1) THEN INFO(10)=11 CALL TYPECK(1,INFO,5,7,0) ENDIF ISAV=INFO(10) FLOW= XIN(1) P2= XIN(2) TIN= XIN(3) TAMB= XIN(4) TOUT= XIN(5) C FRZTO=((IOSTAT(1).LT.-1).OR.(IOSTAT(1).EQ.2)) .AND. C & ((IOSTAT(3).LT.-1).OR.(IOSTAT(3).EQ.2)) HIA= PAR(1) HOA= PAR(2) CM= PAR(3) VOL= PAR(4) K= PAR(5) H= PAR(6) MODE= PAR(7) IF (ABS(MODE) .EQ. 1) THEN CP=CPA RHO=RHOA IF (TIN.LE.-30.) TIN=-30. ! added 2/24/94 IF (TIN.GT.65.) TIN=65. ELSE CP=CPW RHO=RHOW IF (TIN.LE.0.) TIN=0. IF (TIN.GT.120.) TIN=120. ENDIF IF ((HIA.GT.0.).AND.(HOA.GT.0.)) THEN UA=(HIA*HOA)/(HIA+HOA) ELSE UA=0. ENDIF C* IF (ITIME .EQ.1) THEN IF (INFO(7).EQ.-1) THEN IF (INIT.EQ.0) THEN C SAVED(9)=0. C SAVED(11)=TIN S(ISAV+8)=0. S(ISAV+10)=TIN ENDIF C IF (SAVED(9).GT.TIME) THEN C SAVED(9)=0. IF (S(ISAV+8) .GT. TIME) THEN S(ISAV+8)=0. ENDIF ENDIF C IF (TIME.GT.SAVED(9)) SAVED(10)=SAVED(11) C TOLD=SAVED(10) IF (TIME .GT. S(ISAV+8)) S(ISAV+9)=S(ISAV+10) TOLD=S(ISAV+9) P1=P2+(RHO*GRAV*H*0.001)+K*FLOW*ABS(FLOW) C---multiplication by 0.001 converts from Pa to kPa. IF (FLOW .LE. 0.00001) THEN IF (ABS(MODE).EQ.MODE)THEN OUT(1)=TIN C SAVED(11)=TOLD S(ISAV+10)=TOLD ELSE OUT(1)=0. C SAVED(11)=TIN S(ISAV+10)=TIN ENDIF OUT(2)=P1 C IOSTAT(1)=1 C IOSTAT(2)=1 RETURN 1 ENDIF 100 TSS=TAMB A=UA/(FLOW*CP) DT=TIN-TAMB IF (A.LE.20. .AND. ABS(DT).GE.1.E-10) THEN TSS=TAMB+DT*EXP(-A) ENDIF TAUX=RHO*VOL/FLOW IF (ABS(MODE).EQ.MODE) THEN C simplified dynamics (no differential equations) 250 T=TSS IF ((CM.GT.0.) .AND. (HIA.GT.0.)) THEN C* A=FLOW*CP*TSTEP*(1.+HOA/HIA)/CM A=FLOW*CP*DELT*(1.+HOA/HIA)/CM DT=TOLD-TSS IF (A.LE.20. .AND. ABS(DT).GE.1.E-10) THEN T=TSS+DT*EXP(-A) ENDIF ENDIF C TOUT=DELAY(T,TAUX,SAVED(1),SAVED(7),SAVED(8),SAVED(9)) TOUT=DELAY(T,TAUX,S(ISAV),S(ISAV+6),S(ISAV+7),S(ISAV+8),INFO) OUT(1)=TOUT C SAVED(11)=T S(ISAV+10)=T ELSE C detailed dynamics (one differential equation) C* DTINDT=(TIN-TOLD)/TSTEP DTINDT=(TIN-TOLD)/DELT ALPHA=0.5*A*HIA/HOA TAUC=CM/(HIA+HOA) ALAG=TSS-TAMB+TAUC*EXP(-A-ALPHA)*DTINDT C DTODT=(EXP(-ALPHA)/TAUC)*(TAMB-TOUT+DELAY(ALAG,TAUX,SAVED(1), C & SAVED(7),SAVED(8),SAVED(9))) DTODT=(EXP(-ALPHA)/TAUC)*(TAMB-TOUT+DELAY(ALAG,TAUX,S(ISAV), & S(ISAV+6),S(ISAV+7),S(ISAV+8),INFO)) IF (ABS(DTODT).LT.1.E-6) DTODT=0.0 ! added 2/24/94 OUT(1)=DTODT C SAVED(11)=TIN S(ISAV+10)=TIN ENDIF OUT(2)=P1 C IOSTAT(2)=1 C IOSTAT(1)=0 C IF ((ABS(TSS-TOUT).LE.RTOLX*ABS(TSS)+ATOLX).AND.FRZTO) C & IOSTAT(1)=1 RETURN 1 END C*********************************************************************** C FUNCTION DELAY(TINEW,TAU,A,TIN,DZOLD,TIME0) FUNCTION DELAY(TINEW,TAU,A,TIN,DZOLD,TIMEZERO,INFO) C --------------------------------------------------------------------- C C Models transport delays in ducting components. C The temperature distribution in the duct is modeled by a fifth C order time dependent polynomial. The coefficients of the C polynomial are calculated at each time step. C C Modified: March 5, 1987 C.P. C C*********************************************************************** C PARAMETER (M=5,N=M+1) C DIMENSION A(N),AM(M,N) DIMENSION A(6),AM(5,6),INFO(15) C COMMON /CHRONO/ TIME,TSTEP,TTIME,TMIN,ITIME C COMMON /SOSCOM/ RTOLX,ATOLX,XTOL C COMMON /XINIT/ INIT,NSAVED COMMON /SIM/ TIME0,TFINAL,DELT,IWARN DATA INIT,M,N /0,5,6/ C Initialize coefficients if this is the first call. C If the transport delay is zero, return the input value. C IF (ITIME.EQ.1 .AND. INIT.EQ.0) THEN IF (INFO(7) .EQ. -1 .AND. INIT .EQ. 0) THEN TIN=TINEW A(1)=TIN C TIME0=TIME TIMEZERO=TIME DELAY=TIN IF (TAU.GT.0.) THEN C DZOLD=TSTEP/TAU DZOLD=DELT/TAU ELSE DZOLD=2.0 ENDIF DO 10 I=2,N A(I)=0. 10 CONTINUE RETURN ENDIF C Set the time step equal to minimum time step if TSTEP < TMIN C IF (TSTEP.LT.TMIN) THEN C TSTEP=TMIN C ENDIF IF (TAU.GT.0.) THEN IF (TAU.GT.1.0E+10) THEN TAU=1.0E+10 ENDIF C DZ=TSTEP/TAU DZ=DELT/TAU ELSE DZ=2.0 ENDIF C If first call of the timestep, evaluate new coefficients. C IF (TIME.GT.TIME0) THEN IF (TIME .GT. TIMEZERO) THEN C Set up matrix and constant vector to solve for new set of C coefficients. IF (DZOLD .LE. 0.5) THEN DO 30 I=1,M AM(I,N)=0. X=1. XX=1. IF (I.EQ.1) THEN IF (DZOLD.GE.0.2) THEN Z=0.5*DZOLD ELSE Z=DZOLD ENDIF ELSEIF (I.EQ.2 .AND. DZOLD.GE.0.2) THEN Z=DZOLD ELSE I2=I Z=0.2*REAL(I2) ENDIF DO 20 J=1,M XX=XX*Z AM(I,J)=XX IF (Z.GT.DZOLD) THEN X=X*(Z-DZOLD) AM(I,N)=AM(I,N)+A(J+1)*X ENDIF 20 CONTINUE IF (Z.LE.DZOLD) THEN AM(I,N)=(A(1)-TIN)*Z/DZOLD ELSE AM(I,N)=AM(I,N)+A(1)-TIN ENDIF 30 CONTINUE C Solve for coefficients by Gaussian elimination. DO 40 I=2,M DO 40 J=I,M R=AM(J,I-1)/AM(I-1,I-1) DO 40 K=I,N AM(J,K)=AM(J,K)-R*AM(I-1,K) 40 CONTINUE DO 50 I=2,M K=N+1-I R=AM(K,N)/AM(K,K) DO 50 J=I,M L=N-J AM(L,N)=AM(L,N)-R*AM(L,K) 50 CONTINUE A(1)=TIN DO 60 I=1,M A(I+1)=AM(I,N)/AM(I,I) 60 CONTINUE C Last DZ between 0.5 and 1: reset to linear temperature C distribution. ELSEIF (DZOLD .GT. 0.5 .AND. DZOLD .LT. 1.0) THEN DO 70 I=2,N A(I)=0. 70 CONTINUE A(2)=A(1)-TIN A(1)=TIN C Last DZ beyond inlet: reset to uniform temperature. ELSE DO 80 I=2,N A(I)=0. 80 CONTINUE A(1)=TIN ENDIF ENDIF C Calculate output. C TIME0=TIME TIMEZERO=TIME TIN=TINEW DZOLD=DZ IF (DZ.GE.1.0) THEN DELAY=TINEW ELSE DELAY=A(1) X=1. DO 90 I=2,N X=X*(1.-DZ) DELAY=DELAY+A(I)*X 90 CONTINUE ENDIF RETURN END