Multiple runs for a user written subroutine

You can perform a maximum of 9999 Analyzer runs within a single thermal solver run by setting the run type in the IR array. The IR array is initialized to –10000, except for IR(1), which is initialized to the Card 2b - Analyzer Control Card – Optional GRADNT parameter. For more information, see the Thermal Solver Reference Manual PDF.

IR(1) defines whether the initial run is steady state or transient.

IRUN is the current run number. To perform subsequent runs, simply set the values in the IR array to the desired Card 2b GRADNT values. The temperatures, heat loads, and total pressures of run n are written on files TEMPFn, QNODEFn, and PRESSFn.

For example, suppose you want to perform three runs in a row: a steady state run to define initial temperatures with the boundary conditions defined at Card 2b TST = 0, then a transient run with Card 2b GRADNT = –3 until TF = 2, then another steady state run with the heat loads and sink element temperatures defined at TIME = 10. This can be achieved with the following example:

 subroutine user1
        +(gg,t,c,q,qd,r,time,dt,it,kode,nocon,maxno,
        +iconv,dum1,dum2,dtp,tf)
        dimension gg(*),qd(*),t(*),c(*),q(*),r(*),iconv(*)
        character*7 name
        common/tdmax/tdmax
        common/prtflg/prtflg
        common/irun/irun,ir(1)
        common/maxnoq/maxn1,maxn2
        common/params/params(80000)
        common/grav/grav,gv(3),tabs,rgas,pstd,tstd,sigma
        save
C
C   Define that we wish to run multiple runs
C
        if (kode.eq.3) then
C
C   Set second run to transient, forward
C   differencing
C
                ir(2)=-3
C
C   Set third run to steady state
C
                ir(3)=0
        end if
C
C   Set final time of transient run for run 2 to 2. 
C   Set the printout interval to 0.5
C
        if (irun.eq.2) then
                tf=2
                dtp=0.5
        end if
C
C   Set steady state iteration parameters for run 3. 
C   The heat loads and sink element temperatures 
C   are defined at time = 10. The maximum number of
C   iterations is set to 100, and only final 
C   printout is requested.
C
        if (irun.eq.3) then
                time=10
                tf=100
                dtp=0
        end if
        return
        end

Another multiple run example

–1 $ ninth –1 delimiter card
        subroutine user1
        +(gg,t,c,q,qd,r,time,dt,it,kode,nocon,maxno,
        +iconv,dum1,dum2,dtp,tf)
        dimension gg(*),qd(*),t(*),c(*),q(*),r(*),iconv(*)
        character*7 name
        common/tdmax/tdmax
        common/prtflg/prtflg
        common/irun/irun,ir(1)
        common/maxnoq/maxn1,maxn2
        common/params/params(80000)
        common/grav/grav,gv(3),tabs,rgas,pstd,tstd,sigma
        save
C
C   Set heat load to element 10 to 20 units 
C   for time > 100 if temperature of
C   element 30 < 15 degrees.
C
        if(kode.eq.1)then
                if(time.gt.100.0.and.t(kconv(30)).lt.15)
                + q(kconv(10)))=20.0
        else
C
C   Postprocessing – temperature of element 20 
C   is 5 degrees above that of 30
C
                t(kconv(20))=t(kconv(30))+5
        end if
        return
        end
–1 $ tenth delimiter card