[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[TRNSYS-users] Storage Vars problem
Hello TRNSYS-Users,
i want to create a Type to describe an adsorbent packed bed, but i
think have a problem with the storage vars. I used it to update two
values of the output (obtained by solving the system of equation for a
time step) to two initial values of the equation's system, to solve
it for the next time step. But really this operation to save a value
of the output and update to an initial value, functions only for one
of these values (t_letto), and only for three time step. After this
time TRNSYS gives me a flat characteristics. Instead for the other
value (wst) TRNSYS calculates it only for the first time step, and
keeps it costant for the rest of simualtion.
I attached the source code for the case anybody would like to look through.
I appreciate every advice to solve this problem.
Thanks in advance.
Vincenzo
PS: t0_letto and w0_letto are the initial values of these two otuput
(t_letto, wst) for the initial timestep, they are inserted like
parameters in the proforma.
SUBROUTINE TYPE161 (TIME,XIN,OUT,T,DTDT,PAR,INFO,ICNTRL,*)
C************************************************************************
C Object: letto_adsorbente
C Simulation Studio Model: 161
C
C Author:
C Editor:
C Date: marzo 26, 2012 last modified: marzo 26, 2012
C
C
C ***
C *** Model Parameters
C ***
C l - [-Inf;+Inf]
C grad_vuoto - [-Inf;+Inf]
C Sezione - [-Inf;+Inf]
C d_silicagel - [-Inf;+Inf]
C rho_silicagel - [-Inf;+Inf]
C t0_letto - [-Inf;+Inf]
C w0_letto - [-Inf;+Inf]
C ***
C *** Model Inputs
C ***
C t_amb - [-Inf;+Inf]
C equi - [-Inf;+Inf]
C ads - [-Inf;+Inf]
C portata - [-Inf;+Inf]
C x_amb - [-Inf;+Inf]
C ***
C *** Model Outputs
C ***
C intervallo - [-Inf;+Inf]
C velocit - [-Inf;+Inf]
C area_sup - [-Inf;+Inf]
C massa - [-Inf;+Inf]
C t_aria_in - [-Inf;+Inf]
C num_part - [-Inf;+Inf]
C miu - [-Inf;+Inf]
C k1 - [-Inf;+Inf]
C k2 - [-Inf;+Inf]
C w_eq - [-Inf;+Inf]
C x_aria_out - [-Inf;+Inf]
C wst_prec - [-Inf;+Inf]
C wst - [-Inf;+Inf]
C H_ads - [-Inf;+Inf]
C i - [-Inf;+Inf]
C g - [-Inf;+Inf]
C t0_letto_K - [-Inf;+Inf]
C t_letto_prec_k - [-Inf;+Inf]
C t_letto - [-Inf;+Inf]
C t_aria - [-Inf;+Inf]
C dx - [-Inf;+Inf]
C t_equilibrata - [-Inf;+Inf]
C c - [-Inf;+Inf]
C d - [-Inf;+Inf]
C e - [-Inf;+Inf]
C perdita_carico - [-Inf;+Inf]
C ***
C *** Model Derivatives
C ***
C (Comments and routine interface generated by TRNSYS Studio)
C************************************************************************
C TRNSYS acess functions (allow to acess TIME etc.)
USE TrnsysConstants
USE TrnsysFunctions
C-----------------------------------------------------------------------------------------------------------------------
C REQUIRED BY THE MULTI-DLL VERSION OF TRNSYS
!DEC$ATTRIBUTES DLLEXPORT :: TYPE161 !SET THE CORRECT TYPE NUMBER HERE
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C TRNSYS DECLARATIONS
IMPLICIT NONE !REQUIRES THE USER TO DEFINE ALL VARIABLES
BEFORE USING THEM
DOUBLE PRECISION XIN !THE ARRAY FROM WHICH THE INPUTS TO THIS TYPE
WILL BE RETRIEVED
DOUBLE PRECISION OUT !THE ARRAY WHICH WILL BE USED TO STORE THE
OUTPUTS FROM THIS TYPE
DOUBLE PRECISION TIME !THE CURRENT SIMULATION TIME - YOU MAY USE THIS
VARIABLE BUT DO NOT SET IT!
DOUBLE PRECISION PSYDAT(1)
DOUBLE PRECISION PAR !THE ARRAY FROM WHICH THE PARAMETERS FOR THIS
TYPE WILL BE RETRIEVED
DOUBLE PRECISION STORED !THE STORAGE ARRAY FOR HOLDING VARIABLES FROM
TIMESTEP TO TIMESTEP
DOUBLE PRECISION T !AN ARRAY CONTAINING THE RESULTS FROM THE
DIFFERENTIAL EQUATION SOLVER
DOUBLE PRECISION DTDT !AN ARRAY CONTAINING THE DERIVATIVES TO BE
PASSED TO THE DIFF.EQ. SOLVER
DOUBLE PRECISION StorageArray(1)
INTEGER StorageSize
INTEGER*4 INFO(15),IUNITS,MODE,WBMODE,EMODE,STATUS !THE IFO ARRAY
STORES AND PASSES VALUABLE INFORMATION TO AND FROM THIS TYPE
INTEGER*4 NP,NI,NOUT,ND !VARIABLES FOR THE MAXIMUM NUMBER OF
PARAMETERS,INPUTS,OUTPUTS AND DERIVATIVES
INTEGER*4 NPAR,NIN,NDER !VARIABLES FOR THE CORRECT NUMBER OF
PARAMETERS,INPUTS,OUTPUTS AND DERIVATIVES
INTEGER*4 IUNIT,ITYPE !THE UNIT NUMBER AND TYPE NUMBER FOR THIS COMPONENT
INTEGER*4 ICNTRL !AN ARRAY FOR HOLDING VALUES OF CONTROL FUNCTIONS
WITH THE NEW SOLVER
INTEGER*4 NSTORED !THE NUMBER OF VARIABLES THAT WILL BE PASSED INTO
AND OUT OF STORAGE
CHARACTER*3 OCHECK !AN ARRAY TO BE FILLED WITH THE CORRECT VARIABLE
TYPES FOR THE OUTPUTS
CHARACTER*3 YCHECK !AN ARRAY TO BE FILLED WITH THE CORRECT VARIABLE
TYPES FOR THE INPUTS
CHARACTER*50 valore non valido
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C USER DECLARATIONS - SET THE MAXIMUM NUMBER OF PARAMETERS (NP), INPUTS (NI),
C OUTPUTS (NOUT), AND DERIVATIVES (ND) THAT MAY BE SUPPLIED FOR THIS TYPE
PARAMETER (NP=7,NI=5,NOUT=26,ND=0,NSTORED=4)
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C REQUIRED TRNSYS DIMENSIONS
DIMENSION XIN(NI),OUT(NOUT),PAR(NP),YCHECK(NI),OCHECK(NOUT),
1 STORED(NSTORED),T(ND),DTDT(ND)
INTEGER NITEMS
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C ADD DECLARATIONS AND DEFINITIONS FOR THE USER-VARIABLES HERE
C PARAMETERS
DOUBLE PRECISION l
DOUBLE PRECISION grad_vuoto
DOUBLE PRECISION Sezione
DOUBLE PRECISION d_silicagel
DOUBLE PRECISION rho_silicagel
DOUBLE PRECISION t0_letto
DOUBLE PRECISION w0_letto
DOUBLE PRECISION PATM
C INPUTS
DOUBLE PRECISION t_amb
DOUBLE PRECISION equi
DOUBLE PRECISION ads
DOUBLE PRECISION portata
DOUBLE PRECISION x_amb
c OUTPUTS
DOUBLE PRECISION intervallo,
&velocit,
&area_sup,
&massa,
&t_aria_in,
&num_particelle,
&miu,
&k1,
&k2,
&w_eq,
&x_out,
&wst_prec,
&w0_letto_ads,
&wst,
&H_ads,
&i,
&g,
&t0_letto_K,
&t_letto_prec_k,
&t_letto,
&t_aria,
&dx,
&t_equilibrata,
&c,
&d,
&e,
&perdita_carico,
&TWET,
&RELHUM,
&TDEW,
&ENTHAL,
&DELT
DATA PATM/1.0/
C GET GLOBAL TRNSYS SIMULATION VARIABLES
DELT = getSimulationTimeStep()
C-----------------------------------------------------------------------------------------------------------------------
C READ IN THE VALUES OF THE PARAMETERS IN SEQUENTIAL ORDER
l=PAR(1)
grad_vuoto=PAR(2)
Sezione=PAR(3)
d_silicagel=PAR(4)
rho_silicagel=PAR(5)
t0_letto=PAR(6)
w0_letto=PAR(7)
C-----------------------------------------------------------------------------------------------------------------------
C RETRIEVE THE CURRENT VALUES OF THE INPUTS TO THIS MODEL FROM THE
XIN ARRAY IN SEQUENTIAL ORDER
t_amb=XIN(1)
equi=XIN(2)
ads=XIN(3)
portata=XIN(4)
x_amb=XIN(5)
IUNIT=INFO(1)
ITYPE=INFO(2)
C-----------------------------------------------------------------------------------------------------------------------
C SET THE VERSION INFORMATION FOR TRNSYS
IF(INFO(7).EQ.-2) THEN
INFO(12)=16
RETURN 1
ENDIF
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C DO ALL THE VERY LAST CALL OF THE SIMULATION MANIPULATIONS HERE
IF (INFO(8).EQ.-1) THEN
RETURN 1
ENDIF
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C PERFORM ANY 'AFTER-ITERATION' MANIPULATIONS THAT ARE REQUIRED HERE
C e.g. save variables to storage array for the next timestep
IF (INFO(13).GT.0) THEN
CALL getStorageVars(Stored,StorageSize,INFO)
Stored(1)=t_letto
Stored(3)=wst
call getStorageVars(Stored,StorageSize,INFO)
C STORED(1)=... (if NITEMS > 0)
C CALL setStorageVars(STORED,NITEMS,INFO)
ENDIF
C
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C DO ALL THE VERY FIRST CALL OF THE SIMULATION MANIPULATIONS HERE
IF (INFO(7).EQ.-1) THEN
C SET SOME INFO ARRAY VARIABLES TO TELL THE TRNSYS ENGINE HOW
THIS TYPE IS TO WORK
INFO(6)=NOUT
INFO(9)=1
INFO(10)=0 !STORAGE FOR VERSION 16 HAS BEEN CHANGED
C SET THE REQUIRED NUMBER OF INPUTS, PARAMETERS AND DERIVATIVES
THAT THE USER SHOULD SUPPLY IN THE INPUT FILE
C IN SOME CASES, THE NUMBER OF VARIABLES MAY DEPEND ON THE VALUE
OF PARAMETERS TO THIS MODEL....
NIN=NI
NPAR=NP
NDER=ND
C CALL THE TYPE CHECK SUBROUTINE TO COMPARE WHAT THIS COMPONENT
REQUIRES TO WHAT IS SUPPLIED IN
C THE TRNSYS INPUT FILE
CALL TYPECK(1,INFO,NIN,NPAR,NDER)
C SET THE NUMBER OF STORAGE SPOTS NEEDED FOR THIS COMPONENT
StorageSize=4
CALL setStorageSize(StorageSize,INFO)
C CALL setStorageSize(NITEMS,INFO)
C RETURN TO THE CALLING PROGRAM
RETURN 1
ENDIF
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C DO ALL OF THE INITIAL TIMESTEP MANIPULATIONS HERE - THERE ARE NO
ITERATIONS AT THE INTIAL TIME
IF (TIME .LT. (getSimulationStartTime() +
. getSimulationTimeStep()/2.D0)) THEN
C SET THE UNIT NUMBER FOR FUTURE CALLS
IUNIT=INFO(1)
ITYPE=INFO(2)
C CHECK THE PARAMETERS FOR PROBLEMS AND RETURN FROM THE
SUBROUTINE IF AN ERROR IS FOUND
C IF(...) CALL TYPECK(-4,INFO,0,"BAD PARAMETER #",0)
C PERFORM ANY REQUIRED CALCULATIONS TO SET THE INITIAL VALUES OF
THE OUTPUTS HERE
C intervallo
OUT(1)= delt*3600
C velocit
OUT(2)=portata/(sezione*3600)
C area_sup
OUT(3)=6*(((3.14*(D_silicagel)**2)/4)*(L*sezione*
&(1-grad_vuoto))/(3.14*d_silicagel**3))/(L*Sezione)
C massa
OUT(4)=sezione*l*(1-grad_vuoto)*rho_silicagel
C t_aria_in
OUT(5)=t_amb
C num_part
OUT(6)=(L*sezione*(1-grad_vuoto))/(3.14*d_silicagel**3)
C miu
OUT(7)=((((0.622/(0.622+x_amb))*(7.801*(
&(t_amb+273)/100)-0.626*((
&(t_amb+273)/100)**2)+0.02942*(((t_amb+273)/100)**3)+0.0076
&9*(1.293*(273/(t_amb+273))))+(x_amb/(0.622+x_amb))*(40.407/(
&((t_amb+273)/100)**2)-18.473/((t_amb+273)/100)+3.853*((
&t_amb+273)/100)+(0.006*exp(0.05*t_amb))*(RELHUM/100)*
&(0.0407-(1.988/((t_amb+273)/100))))))*((((x_amb/(0.622+x_amb))
&-((x_amb/(0.622+x_amb))**2))/2.75)+1))/1000000
C k1
OUT(8)=0.000000011*(t_amb)**4-0.000001901*(t_amb)**3
&+0.000119197*(t_amb)**2-0.003107449*(t_amb)+
&0.027364286
C k2
OUT(9)=-0.00000017*(t_amb)**4+0.000033428*(t_amb)**3-
&0.002105473*(t_amb)**2+0.05610934*(t_amb)-
&0.496785714
C w_eq
OUT(10)=(x_amb-(0.000000011*(t_amb)**4-0.000001901*
&(t_amb)**3+0.000119197*(t_amb)**2-0.003107449
&*t_amb+0.027364286))/(-0.00000017*(t_amb)**4+0.000033428
&*(t_amb)**3-0.002105473*(t_amb)**2+0.05610934*t_amb-
&0.496785714)
C x_aria_out
OUT(11)=x_amb
C wst_prec
OUT(12)=w0_letto
C wst
OUT(13)=w0_letto
C H_ads
OUT(14)=0
C i
OUT(15)=0.1263
C g
OUT(16)=7.833
C t0_letto_K
OUT(17)=t0_letto_K
C t_letto_prec_k
OUT(18)=t0_letto
C t_letto
OUT(19)=t0_letto
C t_aria
OUT(20)=t0_letto+(t_amb-t0_letto)*exp(-0.1263)
C dx
OUT(21)=0
C t_equilibrata
OUT(22)=(t0_letto)+(t_amb-t0_letto)*exp(-0.1263)
C c
OUT(23)=c
C d
OUT(24)=d
C e
OUT(25)=e
C perdita_carico
OUT(26)=perdita_carico
C PERFORM ANY REQUIRED CALCULATIONS TO SET THE INITIAL STORAGE
VARIABLES HERE
STORED(1)=t0_letto
STORED(2)=t_letto
STORED(3)=w0_letto
STORED(4)=wst
C STORED(1)=...
C PUT THE STORED ARRAY IN THE GLOBAL STORED ARRAY
CALL setStorageVars(STORED,StorageSize,INFO)
c CALL PSYCHROMETRICS SUBROUTINE
PSYDAT(1) = PATM
PSYDAT(2) = t_amb
PSYDAT(3) = TWET
PSYDAT(4) = RELHUM
PSYDAT(5) = TDEW
PSYDAT(6) = x_amb
PSYDAT(7) = ENTHAL
C DO NOT PRINT ERROR WARNINGS ON THE FIRST CALL
CALL PSYCHROMETRICS(TIME,INFO,1,MODE,WBMODE,PSYDAT,0,STATUS,
1 *10)
CALL LINKCK('TYPE 33','PSYCHROMETRICS',1,99)
10 CONTINUE
C GET INFO FROM PSYCH
MODE=4
PATM = PSYDAT(1)
t_amb = PSYDAT(2)
TWET = PSYDAT(3)
RELHUM = PSYDAT(4)
TDEW = PSYDAT(5)
x_amb = PSYDAT(6)
ENTHAL = PSYDAT(7)
C RETURN TO THE CALLING PROGRAM
RETURN 1
ENDIF
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C *** ITS AN ITERATIVE CALL TO THIS COMPONENT ***
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C C CHECK DEI PARAMETRI
if(l.gt.1) then
write (valore non valido,'("Par(1)=",G",which is ok")')PAR(1)
call Messages(-1,trim(valore non valido),'Fatal',info(1),info(2))
return 1
endif
C CHECK THE INPUTS FOR VALIDITY AND RETURN IF PROBLEMS ARE FOUND
IF(portata.lt.0) CALL TYPECK(-3,INFO,4,0,0)
if(equi.lt.0) call typeck(-3,info,2,0,0)
if(equi.gt.1) call typeck(-3,info,2,0,0)
if(ads.lt.0) call typeck(-3,info,3,0,0)
if(ads.gt.1) call typeck(-3,info,3,0,0)
IF(ErrorFound() ) RETURN 1
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C *** PERFORM ALL THE CALCULATION HERE FOR THIS MODEL. ***
C-----------------------------------------------------------------------------------------------------------------------
C ADD YOUR COMPONENT EQUATIONS HERE; BASICALLY THE EQUATIONS THAT WILL
C CALCULATE THE OUTPUTS BASED ON THE PARAMETERS AND THE INPUTS. REFER TO
C CHAPTER 3 OF THE TRNSYS VOLUME 1 MANUAL FOR DETAILED INFORMATION ON
C WRITING TRNSYS COMPONENTS.
C ACTIVE CONDITION
C RETRIEVE THE VALUES IN THE STORAGE ARRAY FOR THIS ITERATION
C
CALL getStorageVars(STORED,StorageSize,INFO)
StorageSize=4
STORED(1)=t0_letto
STORED(3)=w0_letto
intervallo = DELT*3600
velocit=portata/(sezione*3600)
num_particelle=(L*sezione*(1-grad_vuoto))/(3.14*d_silicagel**3)
area_sup=6*(((3.14*(D_silicagel)**2)/4)*num_particelle)/(l*Sezione)
massa=sezione*l*(1-grad_vuoto)*rho_silicagel
t_aria_in=t_amb
w0_letto_ads=w0_letto
miu=((((0.622/(0.622+x_amb))*(7.801*((t_aria_in+273)/100)-0.626*((
&(t_aria_in+273)/100)**2)+0.02942*(((t_aria_in+273)/100)**3)+0.0076
&9*(1.293*(273/(t_aria_in+273))))+(x_amb/(0.622+x_amb))*(40.407/(
&((t_aria_in+273)/100)**2)-18.473/((t_aria+273)/100)+3.853*((
&t_aria_in+273)/100)+(0.006*exp(0.05*t_aria_in))*(RELHUM/100)*
&(0.0407-(1.988/((t_aria_in+273)/100))))))*((((x_amb/(0.622+x_amb))
&-((x_amb/(0.622+x_amb))**2))/2.75)+1))/1000000
k1=0.000000011*(t_amb)**4-0.000001901*(t_amb)**3
&+0.000119197*(t_amb)**2-0.003107449*(t_amb)+
&0.027364286
k2=-0.00000017*(t_amb)**4+0.000033428*(t_amb)**3
&-0.002105473*(t_amb)**2+0.05610934*(t_amb)-
&0.496785714
w_eq=(x_amb-k1)/k2
x_out=x_amb-(k2*(w_eq-w0_letto)*exp(-(portata*(1.293*(273/(t_aria
&+273)))/(3600*massa))*k2*(intervallo)))
wst = w_eq -(w_eq-w0_letto)*exp(-(portata*(1.293*(273/(t_aria_in+
&273)))/(3600*massa))*k2*intervallo)
wst_prec=wst
H_ads=(2950-1400*wst)*(0.704*(velocit*(1.293*(273/(t_aria_in+
&273))))*(d_silicagel*portata*(1.293*(273/(t_aria_in+273)))/(miu*
&sezione*3600))**(-0.51))*area_sup*dx/1000
i=0.1263
g=(0.683*(velocit*(1.293*(273/(t_aria_in+273))))*(1.884*(x_amb/(1
&+x_amb))+1.005*(1-(x_amb/(1+x_amb))))*(d_silicagel*portata*(1.293*
&(273/(t_aria_in+273)))/(miu*sezione*3600))**(-0.51))*area_sup*(1+
&exp(-i))
t0_letto_k=t0_letto+273
t_letto=(((t_amb)*g+2*H_ads+(g*(t0_letto-
&(t_amb))-2*H_ads)*exp(-g*(intervallo)/(2*(4.178*wst+
&0.921)*(1-grad_vuoto)*rho_silicagel)))/g)
t_aria=t_letto+(t_amb-t_letto)*exp(-i)
t_letto_prec_K=t_letto+273
dx=(x_amb-x_out)*1000
t_equilibrata=t_amb
c=150/((d_silicagel*portata*(1.293*(273/(t_aria_in+273)))/(miu*
&sezione*3600))/(1-grad_vuoto))+1.75
d=((1.293*(273/(t_aria_in+273)))*velocit)**2
e=l*(1-grad_vuoto)/((1.293*(273/(t_aria_in+273)))*d_silicagel*
&grad_vuoto**3)
perdita_carico=c*d*e
C-----------------------------------------------------------------------------------------------------------------------
C SET THE STORAGE ARRAY AT THE END OF THIS ITERATION IF NECESSARY
STORED(2)=t_letto
STORED(4)=wst
CALL setStorageVars(STORED,StorageSize,INFO)
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C REPORT ANY PROBLEMS THAT HAVE BEEN FOUND USING CALLS LIKE THIS:
C CALL MESSAGES(-1,'put your message here','MESSAGE',IUNIT,ITYPE)
C CALL MESSAGES(-1,'put your message here','WARNING',IUNIT,ITYPE)
C CALL MESSAGES(-1,'put your message here','SEVERE',IUNIT,ITYPE)
C CALL MESSAGES(-1,'put your message here','FATAL',IUNIT,ITYPE)
C-----------------------------------------------------------------------------------------------------------------------
C-----------------------------------------------------------------------------------------------------------------------
C SET THE OUTPUTS FROM THIS MODEL IN SEQUENTIAL ORDER AND GET OUT
C intervallo
OUT(1)=intervallo
C velocit
OUT(2)=velocit
C area_sup
OUT(3)=area_sup
C massa
OUT(4)=massa
C t_aria_in
OUT(5)=t_aria_in
C num_part
OUT(6)=num_particelle
C miu
OUT(7)=miu
C k1
OUT(8)=k1
C k2
OUT(9)=k2
C w_eq
OUT(10)=w_eq
C x_aria_out
OUT(11)=x_out
C wst_prec
OUT(12)=wst_prec
C wst
OUT(13)=wst
C H_ads
OUT(14)=H_ads
C i
OUT(15)=i
C g
OUT(16)=g
C t0_letto_K
OUT(17)=t0_letto_K
C t_letto_prec_k
OUT(18)=t_letto_prec_K
C t_letto
OUT(19)=t_letto
C t_aria
OUT(20)=t_aria
C dx
OUT(21)=dx
C t_equilibrata
OUT(22)=t_equilibrata
C c
OUT(23)=c
C d
OUT(24)=d
C e
OUT(25)=e
C perdita_carico
OUT(26)=perdita_carico
C-----------------------------------------------------------------------------------------------------------------------
C EVERYTHING IS DONE - RETURN FROM THIS SUBROUTINE AND MOVE ON
RETURN 1
END
C-----------------------------------------------------------------------------------------------------------------------