c
C
SUBROUTINE GXRSTM
C-----------------------------------------------------------------------
C SUBROUTINE GXRSTM is called from groups 1, 8, 9, 13 and 19 of
C GREX3 by setting RSTM=T in the Q1 file.
C-----------------------------------------------------------------------
INCLUDE 'grdear'
COMMON/NAMFN/NAMFUN,NAMSUB
CHARACTER*6 NAMFUN,NAMSUB
NAMSUB='GXRSTM'
C
IF(IGR.EQ.1) THEN
IF(ISC.EQ.2) THEN
CALL UST12
ELSEIF(ISC.EQ.3) THEN
C.... Group 1 section 3, Preliminary.
CALL UPRELM('RSTMGR OF 110310 VISITED ')
ENDIF
ELSEIF(IGR.EQ.8) THEN
IF(ISC.EQ.10) THEN
C.... Group 8 section 10, Convection neighbours UCONNE=GRND
CALL UCNMOD
ELSEIF(ISC.EQ.9) THEN
C.... Group 8 section 9, Diffusion coefficients UDIFF=GRND
CALL UDFMOD
ELSEIF(ISC.EQ.12) THEN
C.... Group 8 section 12, Linearised sources USOURC=GRND
CALL UTURSO
ENDIF
ELSEIF(IGR.EQ.9) THEN
C.... Group 9 section 12, Phase-1 length scale EL1=GRND
IF(ISC.EQ.12) THEN
CALL URSLEN
C.... Group 9 section 5, Turbulent viscosity ENUT=GRND
ELSEIF(ISC.EQ.5) THEN
CALL URSVIS
ENDIF
ELSEIF(IGR.EQ.13) THEN
IF(ISC.EQ.2) THEN
C.... Group 13 section 2, Boundary conditions CO=GRND1
CALL UCOGND
ELSEIF(ISC.EQ.13) THEN
C.... Group 13 section 13, Boundary conditions VAL=GRND1
CALL UVLGND
ENDIF
ELSEIF(IGR.EQ.19) THEN
IF(ISC.EQ.3) THEN
C.... Group 19 section 3, Start of iz slab.
CALL UST193
ELSEIF(ISC.EQ.4) THEN
C.... Group 19 section 4, Start of iterations.
CALL UST194
ELSEIF(ISC.EQ.9) THEN
C.... Group 19 section 9, Start of solution sequence for a variable
CALL UST199
ENDIF
ENDIF
NAMSUB='gxrstm'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C.... UPRELM is called from Gr.1 Sec.3 to provide necessary memory
C allocation and RSTM constants setting.
C
SUBROUTINE UPRELM(STRNG)
include 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'grdbfc'
INCLUDE 'rsmcmn'
COMMON/GENI/ IGNF1(42),NFTOT,IGNF2(17)
1 /LBDFDL/IDUDX,IDUDY,IDUDZ,IDVDX,IDVDY,IDVDZ,IDWDX,IDWDY,
1 IDWDZ,IDSDX,IDSDY,IDSDZ,IDU2X,IDU2Y,IDU2Z,IDV2X,
1 IDV2Y,IDV2Z,IDW2X,IDW2Y,IDW2Z
1 /LRNTM3/L0UTAU,NMWALL,L0WALL,L0DSKN,IVPRST
1 /LRSTM/ LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
1 /JRSTM/ JPK,JEPDK,JDZ,JAH,JPU2,JPV2,JPW2,JPUV,JPUW,JPVW,
1 JDU2,JDV2,JDW2,JDUV,JDUW,JDVW,JFWAL,JU2DK,JV2DK,
1 JW2DK,JUVDK,JUWDK,JVWDK,JPUS1,JPVS1,JPWS1,JPUS2,
1 JPVS2,JPWS2,JBU2,JBV2,JBW2,JBUV,JBUW,JBVW,JSU2,
1 JSV2,JSW2,JSUV,JSUW,JSVW,JOU2,JOV2,JOW2,JOUV,
1 JOUW,JOVW
1 /RSTMCM/L0GTRS,L0PRTR
1 /RSTTNC/L0TURB,L0NORM,L0CROS
COMMON/INDAUX/L0ISL,L0IST,L0SL,L0ST,NSTO,NSOL,IFL(14)
LOGICAL GRN,LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
CHARACTER STRNG*40,NM12*2,NM23*2
CHARACTER*6 NAMFUN,NAMSUB
C
NAMSUB='UPRELM'
C.... Preliminaries (MAKE's below work as precaution only)
NXNY= NX*NY
NXM1NY= NXNY-NY
CALL WRYT40(STRNG)
CALL MAKE(LVOL)
CALL MAKE(LXYXU)
CALL MAKE(LXYXG)
CALL MAKE(LXYDX)
CALL MAKE(LXYDXG)
CALL MAKE(LXYYV)
CALL MAKE(LXYYG)
CALL MAKE(LXYDY)
CALL MAKE(LXYDYG)
CALL MAKE(LXYDZ)
IF(.NOT.CARTES) CALL MAKE(LXYR)
IF(.NOT.CARTES) CALL MAKE(LXYRV)
IF(NX.NE.1) CALL MAKE(LAEX)
IF(NY.NE.1) CALL MAKE(LANY)
IF(NZ.NE.1 .AND. .NOT.PARAB) CALL MAKE(LAHZ)
IF(USOURC) CALL GXMAKE(L0GTRS,NSOL,'GTOTRS')
CALL GXMAKE(L0PRTR,NSOL,'GPRTRS')
CALL GXMAKE(L0GCRT,NSOL,'GCSRAT')
CALL GXMAKE(L0GCRS,NSOL,'GC1RS')
CALL GXMAKE(L0TURB,NSOL,'GTURB')
CALL GXMAKE(L0NORM,NSOL,'GNORM')
CALL GXMAKE(L0CROS,NSOL,'GCROS')
C.... Set auxiliary logicals:
CALL SUB3L( LSTU1,STORE(U1), LSTV1, STORE(V1), LSTW1, STORE(W1) )
CALL SUB3L( LSTKE,STORE(KE), LSTREP,STORE(EP), LSTRHO,GRN(RHO1) )
CALL SUB3( J0U1,0, J0V1,0, J0W1,0 )
CALL SUB2( J0KE,0, J0EP,0)
C.... Find LB-indices of stored variables:
CALL SUB2( JU2RS,LBNAME('U2RS'), JV2RS,LBNAME('V2RS') )
CALL SUB2( JW2RS,LBNAME('W2RS'), JUVRS,LBNAME('UVRS') )
CALL SUB2( JUWRS,LBNAME('UWRS'), JVWRS,LBNAME('VWRS') )
CALL SUB4( J0U2RS,0, J0V2RS,0, J0W2RS,0, J0DFRS,0)
CALL SUB3( J0UVRS,0, J0UWRS,0, J0VWRS,0)
C.... Set RSTM constants and provide additional memory:
JTURML= 0
IF(LSTREP) JTURML= 1
IF(JVWRS.NE.0 .OR. JUVRS.NE.0 .OR. JUWRS.NE.0) JTURML= 2
IF(JTURML.EQ.2 .AND. .NOT.SOLVE(EP)) JTURML= 3
TAUDKE= 0.3
IF(JTURML.EQ.2) THEN
TAUDKE= 0.255
IF(IRSMSM.EQ.0 .AND. NMWALL.EQ.0) TAUDKE= 0.339
ENDIF
IF(IRSMHM.EQ.3) TAUDKE= 0.332
CALL SUB3R( CMUCD,TAUDKE*TAUDKE, CD,TAUDKE**1.5, C1E,1.44 )
CALL SUB4R( CMU,CMUCD/CD, C2E,1.92, AK,0.41, EWAL,8.6 )
CALL SUB3R( GA1,0.5, GA2,0.5, GA3,1.0 )
IF(IRSMHM.EQ.0) THEN
CALL WRIT40('RSTM: IPM Pressure-Strain model ')
CALL SUB3R(GCS ,0.22, GC1 , 1.8, GC2 ,0.6 )
CALL SUB3R(GCE1,1.45, GCE2, 1.9, PRT(EP),1.22 )
CALL SUB3R(GC1W,0.5 , GC2W, 0.3, GALF ,0.6 )
CALL SUB4R(GCST,0.15, GC1T, 3.0, GC2T ,0.5, GC1TW, 0.5)
ELSEIF(IRSMHM.EQ.1) THEN
CALL WRIT40('RSTM: IPY Pressure-Strain model ')
CALL SUB3R(GCS ,0.22, GC1 , 3.0 , GC2 , 0.3 )
CALL SUB3R(GCE1,1.4 , GCE2, 1.8 , PRT(EP), 1.47 )
CALL SUB3R(GC1W,0.75, GC2W, 0.5 , GALF , 0.3 )
CALL SUB4R(GCST,0.15, GC1T, 2.85, GC2T , 0.55, GC1TW, 1.2)
ELSEIF(IRSMHM.EQ.2) THEN
CALL WRIT40('RSTM: QIM Pressure-Strain model ')
CALL SUB3R(GCS ,0.21, GC1 , 1.5 , GC2 , 0.4 )
CALL SUB3R(GCE1,1.44, GCE2, 1.9 , PRT(EP), 1.4 )
CALL SUB3R(GC1W,0.5 , GC2W, 0.06, GALF , (GC2+8.)/11. )
CALL SUB2R(GBET,(8.*GC2-2.)/11. , GGAM , (30.*GC2-2.)/55.)
CALL SUB4R(GCST,0.11, GC1T,2.45 , GC2T , 0.66, GC1TW,0.8)
ELSEIF(IRSMHM.EQ.3) THEN
CALL WRIT40('RSTM: SSG Pressure-Strain model ')
CALL SUB4R(GCS ,0.22, GC1 , 3.4, GC2 ,4.2 , GC3ST,1.30)
CALL SUB4R(GCE1 ,1.44, GCE2, 1.83, PRT(EP),1.22, GALF, 4.2 )
CALL SUB4R(GC1ST,1.80, GC3 , 0.8, GC4 ,1.25, GC5, 0.4 )
CALL SUB3R(GCST, 0.15, GC1T, 3.62, GC2T ,0.05)
C.... The following values recover the IPM & QIM models without wall
C dumping:
C CALL SUB4R(GC1ST,0.0, GC3ST,0.0, GC2,0.0, GALF,0.0)
C.... IPM model:
C CALL SUB3R(GCE1,1.45, GCE2,1.9, PRT(EP),1.22 )
C CALL SUB4R(GC1, 3.6, GC3, 0.8, GC4, 1.2, GC5,1.2)
C.... QIM model:
C CALL SUB3R(GCE1,1.44, GCE2,1.9, PRT(EP),1.4)
C CALL SUB3R(GC1, 3.0, GC3, 0.8, GC4, 1.75)
C CALL SUB2R(GC5, 1.31, GCS, 0.21)
ENDIF
IF(IRSMSM.EQ.1) GCST= 0.3
RTTDKE= CMUCD**0.25
IF(JTURML.EQ.1) GCS= 0.09
JSTO= NSTO
DO 10 I=1,NSOL
MPH=MSL(I)
F(L0GCRT+ I)= 1.0
F(L0GCRS+ I)= GC1
IF(IRSMHM.EQ.3) F(L0GCRS+ I)= 0.5*GC1
F(L0PRTR+ I)= PRT(MPH)
10 CONTINUE
CALL SUB3( JUMPX,NY, JUMPY,1, JUMPZ,JSTO*NXNY )
CALL GXMAKE(J0NXY ,NXNY,'NXY ')
CALL GXMAKE(J0NXY2,NXNY,'NXY2')
CALL GXMAKE(J0NXY3,NXNY,'NXY3')
C.... Find LB's for stored variables:
CALL SUB2( JPK, LBNAME('PK '), JEPDK,LBNAME('EPDK') )
CALL SUB2( JDZ, LBNAME('DZ '), JAH, LBNAME('AH ') )
CALL SUB2( JPU2, LBNAME('PU2 '), JPV2, LBNAME('PV2 ') )
CALL SUB2( JPW2, LBNAME('PW2 '), JPUV, LBNAME('PUV ') )
CALL SUB2( JPUW, LBNAME('PUW '), JPVW, LBNAME('PVW ') )
CALL SUB2( JDU2, LBNAME('DU2 '), JDV2, LBNAME('DV2 ') )
CALL SUB2( JDW2, LBNAME('DW2 '), JDUV, LBNAME('DUV ') )
CALL SUB2( JDUW, LBNAME('DUW '), JDVW, LBNAME('DVW ') )
CALL SUB2( JFWAL,LBNAME('FWAL'), JU2DK,LBNAME('U2DK') )
CALL SUB2( JV2DK,LBNAME('V2DK'), JW2DK,LBNAME('W2DK') )
CALL SUB2( JUVDK,LBNAME('UVDK'), JUWDK,LBNAME('UWDK') )
JVWDK= LBNAME('VWDK')
C.... LB's for SSG pressure-strain model:
CALL SUB2( JBU2,LBNAME('BU2 '), JBV2,LBNAME('BV2 ') )
CALL SUB2( JBW2,LBNAME('BW2 '), JBUV,LBNAME('BUV ') )
CALL SUB2( JBUW,LBNAME('BUW '), JBVW,LBNAME('BVW ') )
CALL SUB2( JSU2,LBNAME('SU2 '), JSV2,LBNAME('SV2 ') )
CALL SUB2( JSW2,LBNAME('SW2 '), JSUV,LBNAME('SUV ') )
CALL SUB2( JSUW,LBNAME('SUW '), JSVW,LBNAME('SVW ') )
CALL SUB2( JOU2,LBNAME('OU2 '), JOV2,LBNAME('OV2 ') )
CALL SUB2( JOW2,LBNAME('OW2 '), JOUV,LBNAME('OUV ') )
CALL SUB2( JOUW,LBNAME('OUW '), JOVW,LBNAME('OVW ') )
IF(JTURML.NE.0) THEN
C.... Provide slab-wise storage if there is no 3D-storage:
C.... Note! LB-indices IDUDX,...,IDWDZ are defined in EARTH
IF(IDUDX.EQ.0) CALL GXMAKE(J0DUDX,NXNY,'DUDX')
IF(IDUDY.EQ.0) CALL GXMAKE(J0DUDY,NXNY,'DUDY')
IF(IDUDZ.EQ.0) CALL GXMAKE(J0DUDZ,NXNY,'DUDZ')
IF(IDVDX.EQ.0) CALL GXMAKE(J0DVDX,NXNY,'DVDX')
IF(IDVDY.EQ.0) CALL GXMAKE(J0DVDY,NXNY,'DVDY')
IF(IDVDZ.EQ.0) CALL GXMAKE(J0DVDZ,NXNY,'DVDZ')
IF(IDWDX.EQ.0) CALL GXMAKE(J0DWDX,NXNY,'DWDX')
IF(IDWDY.EQ.0) CALL GXMAKE(J0DWDY,NXNY,'DWDY')
IF(IDWDZ.EQ.0) CALL GXMAKE(J0DWDZ,NXNY,'DWDZ')
IF(JPK .EQ.0) CALL GXMAKE(J0PK ,NXNY,'PK ')
IF(JEPDK.EQ.0) CALL GXMAKE(J0EPDK,NXNY,'EPDK')
IF(JDZ .EQ.0) CALL GXMAKE(J0DZ ,NXNY,'DZ ')
IF(PARAB .AND. JAH.EQ.0) CALL GXMAKE(J0AH ,NXNY,'AH ')
IF(.NOT.LSTRHO) CALL GXMAKE(J0DEN1,NXNY,'DEN1')
IF(JTURML.GT.1) THEN
IF(JPU2 .EQ.0) CALL GXMAKE(J0PU2 ,NXNY,'PU2 ')
IF(JPV2 .EQ.0) CALL GXMAKE(J0PV2 ,NXNY,'PV2 ')
IF(JPW2 .EQ.0) CALL GXMAKE(J0PW2 ,NXNY,'PW2 ')
IF(JPUV .EQ.0) CALL GXMAKE(J0PUV ,NXNY,'PUV ')
IF(JPUW .EQ.0) CALL GXMAKE(J0PUW ,NXNY,'PUW ')
IF(JPVW .EQ.0) CALL GXMAKE(J0PVW ,NXNY,'PVW ')
IF(JDU2 .EQ.0) CALL GXMAKE(J0DU2 ,NXNY,'DU2 ')
IF(JDV2 .EQ.0) CALL GXMAKE(J0DV2 ,NXNY,'DV2 ')
IF(JDW2 .EQ.0) CALL GXMAKE(J0DW2 ,NXNY,'DW2 ')
IF(JDUV .EQ.0) CALL GXMAKE(J0DUV ,NXNY,'DUV ')
IF(JDUW .EQ.0) CALL GXMAKE(J0DUW ,NXNY,'DUW ')
IF(JDVW .EQ.0) CALL GXMAKE(J0DVW ,NXNY,'DVW ')
IF(JFWAL.EQ.0) CALL GXMAKE(J0WDPC,NXNY,'WDPC')
IF(JU2DK.EQ.0) CALL GXMAKE(J0U2DK,NXNY,'U2DK')
IF(JV2DK.EQ.0) CALL GXMAKE(J0V2DK,NXNY,'V2DK')
IF(JW2DK.EQ.0) CALL GXMAKE(J0W2DK,NXNY,'W2DK')
IF(JUVDK.EQ.0) CALL GXMAKE(J0UVDK,NXNY,'UVDK')
IF(JUWDK.EQ.0) CALL GXMAKE(J0UWDK,NXNY,'UWDK')
IF(JVWDK.EQ.0) CALL GXMAKE(J0VWDK,NXNY,'VWDK')
C.... Memory allocation for SSG pressure-strain model
IF(IRSMHM.EQ.3) THEN
IF(JBU2.EQ.0) CALL GXMAKE(J0BU2 ,NXNY,'BU2 ')
IF(JBV2.EQ.0) CALL GXMAKE(J0BV2 ,NXNY,'BV2 ')
IF(JBW2.EQ.0) CALL GXMAKE(J0BW2 ,NXNY,'BW2 ')
IF(JBUV.EQ.0) CALL GXMAKE(J0BUV ,NXNY,'BUV ')
IF(JBUW.EQ.0) CALL GXMAKE(J0BUW ,NXNY,'BUW ')
IF(JBVW.EQ.0) CALL GXMAKE(J0BVW ,NXNY,'BVW ')
IF(JSU2.EQ.0) CALL GXMAKE(J0SU2 ,NXNY,'SU2 ')
IF(JSV2.EQ.0) CALL GXMAKE(J0SV2 ,NXNY,'SV2 ')
IF(JSW2.EQ.0) CALL GXMAKE(J0SW2 ,NXNY,'SW2 ')
IF(JSUV.EQ.0) CALL GXMAKE(J0SUV ,NXNY,'SUV ')
IF(JSUW.EQ.0) CALL GXMAKE(J0SUW ,NXNY,'SUW ')
IF(JSVW.EQ.0) CALL GXMAKE(J0SVW ,NXNY,'SVW ')
IF(JOU2.EQ.0) CALL GXMAKE(J0OU2 ,NXNY,'OU2 ')
IF(JOV2.EQ.0) CALL GXMAKE(J0OV2 ,NXNY,'OV2 ')
IF(JOW2.EQ.0) CALL GXMAKE(J0OW2 ,NXNY,'OW2 ')
IF(JOUV.EQ.0) CALL GXMAKE(J0OUV ,NXNY,'OUV ')
IF(JOUW.EQ.0) CALL GXMAKE(J0OUW ,NXNY,'OUW ')
IF(JOVW.EQ.0) CALL GXMAKE(J0OVW ,NXNY,'OVW ')
CALL GXMAKE(J0R3U2 ,NXNY,'R3U2')
CALL GXMAKE(J0R3V2 ,NXNY,'R3V2')
CALL GXMAKE(J0R3W2 ,NXNY,'R3W2')
CALL GXMAKE(J0R3UV ,NXNY,'R3UV')
CALL GXMAKE(J0R3UW ,NXNY,'R3UW')
CALL GXMAKE(J0R3VW ,NXNY,'R3VW')
CALL GXMAKE(J0R4U2 ,NXNY,'R4U2')
CALL GXMAKE(J0R4V2 ,NXNY,'R4V2')
CALL GXMAKE(J0R4W2 ,NXNY,'R4W2')
CALL GXMAKE(J0R4UV ,NXNY,'R4UV')
CALL GXMAKE(J0R4UW ,NXNY,'R4UW')
CALL GXMAKE(J0R4VW ,NXNY,'R4VW')
CALL GXMAKE(J0R5U2 ,NXNY,'R5U2')
CALL GXMAKE(J0R5V2 ,NXNY,'R5V2')
CALL GXMAKE(J0R5W2 ,NXNY,'R5W2')
CALL GXMAKE(J0R5UV ,NXNY,'R5UV')
CALL GXMAKE(J0R5UW ,NXNY,'R5UW')
CALL GXMAKE(J0R5VW ,NXNY,'R5VW')
ENDIF
ENDIF
ENDIF
DO 22 I= 1,NSOL
F(L0TURB+ I)= 0.
F(L0NORM+ I)= 0.
F(L0CROS+ I)= 0.
22 CONTINUE
crj
IF(SOLVE(KE)) THEN
F(L0TURB+ ISL(KE))= 1.
F(L0NORM+ ISL(KE))= 1.
ENDIF
crj
IF(SOLVE(EP)) F(L0TURB+ ISL(EP))= 1.
IF(JTURML.GT.1) THEN
IF(JU2RS.NE.0) F(L0TURB+ ISL(JU2RS))= 1.
IF(JU2RS.NE.0) F(L0NORM+ ISL(JU2RS))= 1.
IF(JV2RS.NE.0) F(L0TURB+ ISL(JV2RS))= 1.
IF(JV2RS.NE.0) F(L0NORM+ ISL(JV2RS))= 1.
IF(JW2RS.NE.0) F(L0TURB+ ISL(JW2RS))= 1.
IF(JW2RS.NE.0) F(L0NORM+ ISL(JW2RS))= 1.
IF(JDFRS.NE.0) F(L0TURB+ ISL(JDFRS))= 1.
IF(JDFRS.NE.0) F(L0NORM+ ISL(JDFRS))= 1.
IF(JUVRS.NE.0) F(L0TURB+ ISL(JUVRS))= 1.
IF(JUVRS.NE.0) F(L0CROS+ ISL(JUVRS))= 1.
IF(JUWRS.NE.0) F(L0TURB+ ISL(JUWRS))= 1.
IF(JUWRS.NE.0) F(L0CROS+ ISL(JUWRS))= 1.
IF(JVWRS.NE.0) F(L0TURB+ ISL(JVWRS))= 1.
IF(JVWRS.NE.0) F(L0CROS+ ISL(JVWRS))= 1.
ENDIF
IF(JTURML.GT.1) THEN
PRT(U1)= 1.E10
PRT(V1)= 1.E10
PRT(W1)= 1.E10
PRNDTL(EP)= 1.E10
VARMIN(EP)= 1.E-10
PRNDTL(JU2RS)= 1.E10
VARMIN(JU2RS)= 1.E-10
PRNDTL(JV2RS)= 1.E10
VARMIN(JV2RS)= 1.E-10
PRNDTL(JW2RS)= 1.E10
VARMIN(JW2RS)= 1.E-10
IF(JUVRS.NE.0) PRNDTL(JUVRS)= 1.E10
IF(JUWRS.NE.0) PRNDTL(JUWRS)= 1.E10
IF(JVWRS.NE.0) PRNDTL(JVWRS)= 1.E10
ENDIF
NUMSCM=0
DO 23 I=1,NSOL
MPH=MSL(I)
IF(MPH.GE.14) THEN
NM12=NAME(MPH)(1:2)
NM23=NAME(MPH)(2:3)
IF(MPH.EQ.H1.OR.NAME(MPH).EQ.'TEM1'.OR.NM12.EQ.'SC') THEN
NUMSCM=NUMSCM+1
F(L0GCRT+ I)=CMUCD/GCS
ELSEIF(NM23.EQ.'SC'.OR.NM23.EQ.'TR') THEN
CRJ IF(SOLVE(MPH)) THEN
F(L0TURB+ I)=1.
F(L0GCRT+ I)=GCST/GCS
F(L0GCRS+ I)=GC1T
PRNDTL(MPH)=1.E10
CRJ ENDIF
ENDIF
ENDIF
23 CONTINUE
C.... JSCAML=0 - no heat/mass transfer
C JSCAML=1 - simple gradient model for turbulent fluxes
C =2 - generalised gradient model for fluxes
C =3 - full transport model for fluxes
JSCAML=0
IF(NUMSCM.GT.0) JSCAML=IRSMSM+1
C.... Find LB's for stored variables:
JTEM1= LBNAME('TEM1')
CALL SUB2( JUTRS,LBNAME('UTRS'), JVTRS,LBNAME('VTRS') )
CALL SUB2( JWTRS,LBNAME('WTRS'), IDSDX,LBNAME('DSDX') )
CALL SUB2( IDSDY,LBNAME('DSDY'), IDSDZ,LBNAME('DSDZ') )
CALL SUB2( JPUS1,LBNAME('PUS1'), JPVS1,LBNAME('PVS1') )
CALL SUB2( JPWS1,LBNAME('PWS1'), JPUS2,LBNAME('PUS2') )
CALL SUB2( JPVS2,LBNAME('PVS2'), JPWS2,LBNAME('PWS2') )
IF(JSCAML.GT.1) THEN
C.... Create slab-wise storage for scalar gradient:
IF(IDSDX.EQ.0) CALL GXMAKE(J0DSDX,NXNY,'DSDX')
IF(IDSDY.EQ.0) CALL GXMAKE(J0DSDY,NXNY,'DSDY')
IF(IDSDZ.EQ.0) CALL GXMAKE(J0DSDZ,NXNY,'DSDZ')
DO 24 I=H1,NPHI
IF(STORE(I)) THEN
NM12=NAME(I)(1:2)
IF(I.EQ.H1.OR.NAME(I).EQ.'TEM1'.OR.NM12.EQ.'SC')
1 PRT(I)=1.E10
ENDIF
24 CONTINUE
ENDIF
IF(JSCAML.EQ.3) THEN
IF(JPUS1.EQ.0) CALL GXMAKE(J0PUS1,NXNY,'PUS1')
IF(JPVS1.EQ.0) CALL GXMAKE(J0PVS1,NXNY,'PVS1')
IF(JPWS1.EQ.0) CALL GXMAKE(J0PWS1,NXNY,'PWS1')
IF(JPUS2.EQ.0) CALL GXMAKE(J0PUS2,NXNY,'PUS2')
IF(JPVS2.EQ.0) CALL GXMAKE(J0PVS2,NXNY,'PVS2')
IF(JPWS2.EQ.0) CALL GXMAKE(J0PWS2,NXNY,'PWS2')
ENDIF
NAMSUB= 'uprelm'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
SUBROUTINE UST12
C-----------------------------------------------------------------------
C SUBROUTINE UST12 is called from section 2, group 1 of GXRSTM
C to define
C-----------------------------------------------------------------------
include 'farray'
INCLUDE 'satear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'rsmcmn'
COMMON /NAMFN/NAMFUN,NAMSUB
CHARACTER*6 NAMFUN,NAMSUB
C
NAMSUB = 'UST12'
CALL SUB2(J0DX,L0F(LXYDX), J0DY,L0F(LXYDY))
IF(NX.NE.1) THEN
CALL SUB3(J0DXG,L0F(LXYDXG), J0XG,L0F(LXYXG), J0XU,L0F(LXYXU))
J0AE= L0F(LAEX)
ENDIF
IF(NY.NE.1) THEN
CALL SUB3(J0DYG,L0F(LXYDYG), J0YG,L0F(LXYYG), J0YV,L0F(LXYYV))
J0AN= L0F(LANY)
ENDIF
IF(.NOT.CARTES) CALL SUB2(J0R,L0F(LXYR), J0RV,L0F(LXYRV))
IF(NZ.NE.1 .AND. .NOT.PARAB) J0AH= L0F(LAHZ)
J0VOL= L0F(LVOL)
NAMSUB = 'ust12'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C.... UST193 is called from Gr.19 Sec.3 to set addresses for a slab.
C
SUBROUTINE UST193
include 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'grdbfc'
INCLUDE 'rsmcmn'
COMMON/LGRND/ LG(20)/IGRND/IG(20)/RGRND/RG(100)/CGRND/CG(10)
1 /LBDFDL/IDUDX,IDUDY,IDUDZ,IDVDX,IDVDY,IDVDZ,IDWDX,IDWDY,
1 IDWDZ,IDSDX,IDSDY,IDSDZ,IDU2X,IDU2Y,IDU2Z,IDV2X,
1 IDV2Y,IDV2Z,IDW2X,IDW2Y,IDW2Z
1 /GENI/ IGSP1(42),NFTOT,IGSP44(17) /NAMFN/NAMFUN,NAMSUB
1 /LRSTM/ LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
1 /JRSTM/ JPK,JEPDK,JDZ,JAH,JPU2,JPV2,JPW2,JPUV,JPUW,JPVW,
1 JDU2,JDV2,JDW2,JDUV,JDUW,JDVW,JFWAL,JU2DK,JV2DK,
1 JW2DK,JUVDK,JUWDK,JVWDK,JPUS1,JPVS1,JPWS1,JPUS2,
1 JPVS2,JPWS2,JBU2,JBV2,JBW2,JBUV,JBUW,JBVW,JSU2,
1 JSV2,JSW2,JSUV,JSUW,JSVW,JOU2,JOV2,JOW2,JOUV,
1 JOUW,JOVW
LOGICAL LG,LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
CHARACTER CG*4,NAMFUN*6,NAMSUB*6
C
NAMSUB= 'UST193'
IF(LSTU1) J0U1= L0F(U1)
IF(LSTV1) J0V1= L0F(V1)
IF(LSTW1) J0W1= L0F(W1)
IF(LSTRHO) J0DEN1= L0F(DEN1)
IF(JTURML.NE.0) THEN
IF(LSTKE) J0KE= L0F(KE)
IF(LSTREP) J0EP= L0F(EP)
IF(JU2RS.NE.0) J0U2RS= L0F(JU2RS)
IF(JV2RS.NE.0) J0V2RS= L0F(JV2RS)
IF(JW2RS.NE.0) J0W2RS= L0F(JW2RS)
IF(JUVRS.NE.0) J0UVRS= L0F(JUVRS)
IF(JUWRS.NE.0) J0UWRS= L0F(JUWRS)
IF(JVWRS.NE.0) J0VWRS= L0F(JVWRS)
IF(JDFRS.NE.0) J0DFRS= L0F(JDFRS)
IF(JUTRS.NE.0) J0UTRS= L0F(JUTRS)
IF(JVTRS.NE.0) J0VTRS= L0F(JVTRS)
IF(JWTRS.NE.0) J0WTRS= L0F(JWTRS)
IF(IDUDX.NE.0) J0DUDX= L0F(IDUDX)
IF(IDUDY.NE.0) J0DUDY= L0F(IDUDY)
IF(IDUDZ.NE.0) J0DUDZ= L0F(IDUDZ)
IF(IDVDX.NE.0) J0DVDX= L0F(IDVDX)
IF(IDVDY.NE.0) J0DVDY= L0F(IDVDY)
IF(IDVDZ.NE.0) J0DVDZ= L0F(IDVDZ)
IF(IDWDX.NE.0) J0DWDX= L0F(IDWDX)
IF(IDWDY.NE.0) J0DWDY= L0F(IDWDY)
IF(IDWDZ.NE.0) J0DWDZ= L0F(IDWDZ)
IF(JPK .NE.0) J0PK = L0F(JPK)
IF(JEPDK.NE.0) J0EPDK= L0F(JEPDK)
IF(JDZ .NE.0) J0DZ = L0F(JDZ)
IF(JAH .NE.0) J0AH = L0F(JAH)
IF(JFWAL.NE.0) J0WDPC= L0F(JFWAL)
IF(JU2DK.NE.0) J0U2DK= L0F(JU2DK)
IF(JV2DK.NE.0) J0V2DK= L0F(JV2DK)
IF(JW2DK.NE.0) J0W2DK= L0F(JW2DK)
IF(JUVDK.NE.0) J0UVDK= L0F(JUVDK)
IF(JUWDK.NE.0) J0UWDK= L0F(JUWDK)
IF(JVWDK.NE.0) J0VWDK= L0F(JVWDK)
DO 10 I= 1,NXNY
10 F(J0DZ+I)= DZ
IF(PARAB) THEN
DO 20 I= 1,NXNY
20 F(J0AH+I)= F(J0VOL+I)/F(J0DZ+I)
ENDIF
C.... Zeroise storage for velocity gradients at first sweep:
IF(ISWEEP.EQ.FSWEEP) THEN
CALL ZERNM3(J0DUDX,J0DUDY,J0DUDZ,NXNY)
CALL ZERNM3(J0DVDX,J0DVDY,J0DVDZ,NXNY)
CALL ZERNM3(J0DWDX,J0DWDY,J0DWDZ,NXNY)
ENDIF
ENDIF
IF(JTURML.GT.1) THEN
IF(JPU2.NE.0) J0PU2= L0F(JPU2)
IF(JPV2.NE.0) J0PV2= L0F(JPV2)
IF(JPW2.NE.0) J0PW2= L0F(JPW2)
IF(JPUV.NE.0) J0PUV= L0F(JPUV)
IF(JPUW.NE.0) J0PUW= L0F(JPUW)
IF(JPVW.NE.0) J0PVW= L0F(JPVW)
IF(JDU2.NE.0) J0DU2= L0F(JDU2)
IF(JDV2.NE.0) J0DV2= L0F(JDV2)
IF(JDW2.NE.0) J0DW2= L0F(JDW2)
IF(JDUV.NE.0) J0DUV= L0F(JDUV)
IF(JDUW.NE.0) J0DUW= L0F(JDUW)
IF(JDVW.NE.0) J0DVW= L0F(JDVW)
IF(IRSMHM.EQ.3) THEN
IF(JBU2.NE.0) J0BU2= L0F(JBU2)
IF(JBV2.NE.0) J0BV2= L0F(JBV2)
IF(JBW2.NE.0) J0BW2= L0F(JBW2)
IF(JBUV.NE.0) J0BUV= L0F(JBUV)
IF(JBUW.NE.0) J0BUW= L0F(JBUW)
IF(JBVW.NE.0) J0BVW= L0F(JBVW)
IF(JSU2.NE.0) J0SU2= L0F(JSU2)
IF(JSV2.NE.0) J0SV2= L0F(JSV2)
IF(JSW2.NE.0) J0SW2= L0F(JSW2)
IF(JSUV.NE.0) J0SUV= L0F(JSUV)
IF(JSUW.NE.0) J0SUW= L0F(JSUW)
IF(JSVW.NE.0) J0SVW= L0F(JSVW)
IF(JOU2.NE.0) J0OU2= L0F(JOU2)
IF(JOV2.NE.0) J0OV2= L0F(JOV2)
IF(JOW2.NE.0) J0OW2= L0F(JOW2)
IF(JOUV.NE.0) J0OUV= L0F(JOUV)
IF(JOUW.NE.0) J0OUW= L0F(JOUW)
IF(JOVW.NE.0) J0OVW= L0F(JOVW)
ENDIF
ENDIF
IF(JSCAML.GT.1) THEN
IF(IDSDX.NE.0) J0DSDX= L0F(IDSDX)
IF(IDSDY.NE.0) J0DSDY= L0F(IDSDY)
IF(IDSDZ.NE.0) J0DSDZ= L0F(IDSDZ)
ENDIF
IF(JSCAML.EQ.3) THEN
IF(JPUS1.NE.0) J0PUS1= L0F(LBNAME('PUS1'))
IF(JPVS1.NE.0) J0PVS1= L0F(LBNAME('PVS1'))
IF(JPWS1.NE.0) J0PWS1= L0F(LBNAME('PWS1'))
IF(JPUS2.NE.0) J0PUS2= L0F(LBNAME('PUS2'))
IF(JPVS2.NE.0) J0PVS2= L0F(LBNAME('PVS2'))
IF(JPWS2.NE.0) J0PWS2= L0F(LBNAME('PWS2'))
ENDIF
NAMSUB= 'ust193'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C.... UST194 is called from Gr.19 Sec.4
C
SUBROUTINE UST194
include 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'grdbfc'
INCLUDE 'rsmcmn'
COMMON/LGRND/LG(20)/IGRND/IG(20)/RGRND/RG(100)/CGRND/CG(10)
1 /GENI/IGSP1(42),NFTOT,IGSP44(17) /NAMFN/NAMFUN,NAMSUB
1 /LRSTM/ LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
LOGICAL LG,NEZ,LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
CHARACTER CG*4,NAMFUN*6,NAMSUB*6
C
NAMSUB= 'UST194'
IF(JTURML.EQ.0) RETURN
IF(.NOT.LSTRHO) THEN
DO 10 I= 1,NXNY
10 F(J0DEN1+I)= RHO1
ENDIF
C.... Note! Velocity derivatives had been already calculated in GXGENF
C subroutine and put into J0DUDX, etc.
IF(JTURML.EQ.1) THEN
CALL UPRODK
DO 20 I= 1,NXNY
20 F(J0EPDK+I)= F(J0EP+I)/F(J0KE+I)
ELSE
IF(.NOT.(SOLVE(JU2RS).OR.SOLVE(JV2RS).OR.SOLVE(JW2RS))) THEN
DO 30 I= 1,NXNY
F(J0U2RS+I)= GA1*F(J0KE+I)
F(J0V2RS+I)= GA2*F(J0KE+I)
F(J0W2RS+I)= GA3*F(J0KE+I)
30 CONTINUE
ELSEIF(JDFRS.NE.0) THEN
DO 40 I= 1,NXNY
TERM= F(J0KE+I) - 0.5*(F(J0W2RS+I)-F(J0DFRS+I))
F(J0V2RS+I)= TERM
F(J0U2RS+I)= TERM
40 CONTINUE
ELSEIF(.NOT.SOLVE(KE)) THEN
DO 50 I=1,NXNY
F(J0U2RS+I)= AMAX1(F(J0U2RS+I),1.E-10)
F(J0V2RS+I)= AMAX1(F(J0V2RS+I),1.E-10)
F(J0W2RS+I)= AMAX1(F(J0W2RS+I),1.E-10)
F(J0KE+I)= 0.5*(F(J0U2RS+I)+F(J0V2RS+I)+F(J0W2RS+I))
F(J0EP+I)= AMAX1(F(J0EP+I),1.E-10)
50 CONTINUE
ENDIF
CALL UPRDCT
IF(NEZ(GBET)) CALL UPROD2
CALL UREDIS
IF(.NOT.SOLVE(EP)) THEN
DO 60 I= 1,NXNY
60 F(J0EP+I)= AMAX1(TINY,F(J0PK+I))
ENDIF
DO 70 I= 1,NXNY
RGFKEI= 1.0/F(J0KE+I)
F(J0U2DK+I)= F(J0U2RS+I)*RGFKEI
F(J0V2DK+I)= F(J0V2RS+I)*RGFKEI
F(J0W2DK+I)= F(J0W2RS+I)*RGFKEI
F(J0UWDK+I)= F(J0UWRS+I)*RGFKEI
F(J0UVDK+I)= F(J0UVRS+I)*RGFKEI
F(J0VWDK+I)= F(J0VWRS+I)*RGFKEI
F(J0EPDK+I)= F(J0EP+I)*RGFKEI
70 CONTINUE
ENDIF
NAMSUB='ust194'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C.... UST199 is called from Gr.19 Sec.9 of GXRSTM
C
SUBROUTINE UST199
include 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'grdbfc'
INCLUDE 'rsmcmn'
COMMON /GENI/IGFIL1(49),ITEM1,IGFIL2(10) /NAMFN/NAMFUN,NAMSUB
LOGICAL GTURB
CHARACTER*4 NMPH,NMSC,NM11*1,NM23*2,NM24*3,NAMFUN*6,NAMSUB*6
C
IF(JSCAML.LE.1) RETURN
NAMSUB= 'UST199'
IF(JSCAML.EQ.2 .AND. INDVAR.GE.H1.AND. .NOT.GTURB(INDVAR)) THEN
C.... Generalised gradient-diffusion model for the scalar fluxes
J0SC= L0F(INDVAR)
C.... Compute scalar gradients
IF(NX.NE.1) THEN
CALL FNDFDX(J0SC,J0DSDX,IZ,INDVAR.EQ.ITEM1)
ELSE
CALL ZERNUM(J0DSDX,NXNY)
ENDIF
IF(NY.NE.1) THEN
CALL FNDFDY(J0SC,J0DSDY,IZ,INDVAR.EQ.ITEM1)
ELSE
CALL ZERNUM(J0DSDY,NXNY)
ENDIF
IF(NZ.EQ.1 .OR. PARAB) THEN
CALL ZERNUM(J0DSDZ,NXNY)
ELSE
CALL FNDFDZ(J0SC,J0DSDZ,IZ,INDVAR.EQ.ITEM1)
ENDIF
C
IF(NX.GT.1) THEN
J0USCR= J0SCRS(INDVAR,J0UTRS,'U')
CALL FN0(-J0NXY,-J0USCR)
DO 10 I= 1,NXNY
10 F(J0USCR+I)= -F(J0U2RS+I)*F(J0DSDX+I)
IF(NY.GT.1) THEN
DO 11 I= 1,NXNY
11 F(J0USCR+I)= F(J0USCR+I) - F(J0UVRS+I)*F(J0DSDY+I)
ENDIF
IF(NZ.GT.1) THEN
DO 12 I= 1,NXNY
12 F(J0USCR+I)= F(J0USCR+I) - F(J0UWRS+I)*F(J0DSDZ+I)
ENDIF
RELFAC= RELSCR(INDVAR,JUTRS,'U')
DO 13 I= 1,NXNY
F(J0USCR+I)= GCST*F(J0USCR+I)/F(J0EPDK+I)
F(J0USCR+I)= RELFAC*F(J0USCR+I) + (1.-RELFAC)*F(J0NXY+I)
13 CONTINUE
ENDIF
C
IF(NY.GT.1) THEN
J0VSCR= J0SCRS(INDVAR,J0VTRS,'V')
CALL FN0(-J0NXY,-J0VSCR)
DO 20 I= 1,NXNY
20 F(J0VSCR+I)= -F(J0V2RS+I)*F(J0DSDY+I)
IF(NX.GT.1) THEN
DO 21 I= 1,NXNY
21 F(J0VSCR+I)= F(J0VSCR+I) - F(J0UVRS+I)*F(J0DSDX+I)
ENDIF
IF(NZ.GT.1) THEN
DO 22 I= 1,NXNY
22 F(J0VSCR+I)= F(J0VSCR+I) - F(J0VWRS+I)*F(J0DSDZ+I)
ENDIF
RELFAC= RELSCR(INDVAR,JVTRS,'V')
DO 23 I= 1,NXNY
F(J0VSCR+I)= GCST*F(J0VSCR+I)/F(J0EPDK+I)
F(J0VSCR+I)= RELFAC*F(J0VSCR+I) + (1.-RELFAC)*F(J0NXY+I)
23 CONTINUE
ENDIF
C
IF(NZ.GT.1) THEN
J0WSCR= J0SCRS(INDVAR,J0WTRS,'W')
CALL FN0(-J0NXY,-J0WSCR)
DO 30 I= 1,NXNY
30 F(J0WSCR+I)= -F(J0W2RS+I)*F(J0DSDZ+I)
IF(NX.GT.1) THEN
DO 31 I= 1,NXNY
31 F(J0WSCR+I)=F(J0WSCR+I)-F(J0UWRS+I)*F(J0DSDX+I)
ENDIF
IF(NY.GT.1) THEN
DO 32 I= 1,NXNY
32 F(J0WSCR+I)=F(J0WSCR+I)-F(J0VWRS+I)*F(J0DSDY+I)
ENDIF
RELFAC= RELSCR(INDVAR,JWTRS,'W')
DO 33 I= 1,NXNY
F(J0WSCR+I)= GCST*F(J0WSCR+I)/F(J0EPDK+I)
F(J0WSCR+I)= RELFAC*F(J0WSCR+I) + (1.-RELFAC)*F(J0NXY+I)
33 CONTINUE
ENDIF
C
ELSEIF(JSCAML.EQ.3 .AND. GTURB(INDVAR)) THEN
C.... Full transport model for the turbulent scalar fluxes
NMPH= NAME(INDVAR)
NM11= NAME(INDVAR)(1:1)
NM23= NAME(INDVAR)(2:3)
NM24= NAME(INDVAR)(2:4)
IF(NM23.EQ.'SC') THEN
NMSC= NM23//NAME(INDVAR)(4:4)
J0SC= L0F(LBNAME(NMSC))
ELSEIF(NM24.EQ.'TRS') THEN
JSCAL= ITWO(H1,ITEM1,SOLVE(H1))
J0SC = L0F(JSCAL)
ENDIF
IF(NM23.EQ.'SC' .OR. NM24.EQ.'TRS') THEN
C.... Compute scalar gradients
IF(NX.NE.1) THEN
CALL FNDFDX(J0SC,J0DSDX,IZ,INDVAR.EQ.ITEM1)
ELSE
CALL ZERNUM(J0DSDX,NXNY)
ENDIF
IF(NY.NE.1) THEN
CALL FNDFDY(J0SC,J0DSDY,IZ,INDVAR.EQ.ITEM1)
ELSE
CALL ZERNUM(J0DSDY,NXNY)
ENDIF
IF(NZ.EQ.1 .OR. PARAB) THEN
CALL ZERNUM(J0DSDZ,NXNY)
ELSE
CALL FNDFDZ(J0SC,J0DSDZ,IZ,INDVAR.EQ.ITEM1)
ENDIF
IF(NM11.EQ.'U') THEN
C.... Compute Prod,1 & Prod2
J0USCR= L0F(INDVAR)
DO 40 I= 1,NXNY
F(J0PUS1+I)= -F(J0U2RS+I)*F(J0DSDX+I)
F(J0PUS2+I)= -F(J0USCR+I)*F(J0DUDX+I)
40 CONTINUE
IF(NY.GT.1) THEN
J0VSCR= L0F(LBNAME('V'//NM24))
DO 41 I= 1,NXNY
F(J0PUS1+I)= F(J0PUS1+I) - F(J0UVRS+I)*F(J0DSDY+I)
F(J0PUS2+I)= F(J0PUS2+I) - F(J0VSCR+I)*F(J0DUDY+I)
41 CONTINUE
ENDIF
IF(NZ.GT.1) THEN
J0WSCR= L0F(LBNAME('W'//NM24))
DO 42 I= 1,NXNY
F(J0PUS1+I)= F(J0PUS1+I) - F(J0UWRS+I)*F(J0DSDZ+I)
F(J0PUS2+I)= F(J0PUS2+I) - F(J0WSCR+I)*F(J0DUDZ+I)
42 CONTINUE
ENDIF
ELSEIF(NM11.EQ.'V') THEN
C.... Compute Prod,1 & Prod,2
J0VSCR= L0F(INDVAR)
DO 50 I= 1,NXNY
F(J0PVS1+I)= -F(J0V2RS+I)*F(J0DSDY+I)
F(J0PVS2+I)= -F(J0VSCR+I)*F(J0DVDY+I)
50 CONTINUE
IF(NX.GT.1 .OR. J0UVRS.NE.0) THEN
J0USCR= L0F(LBNAME('U'//NM24))
DO 51 I= 1,NXNY
F(J0PVS1+I)= F(J0PVS1+I) - F(J0UVRS+I)*F(J0DSDX+I)
F(J0PVS2+I)= F(J0PVS2+I) - F(J0USCR+I)*F(J0DVDX+I)
51 CONTINUE
ENDIF
IF(NZ.GT.1) THEN
J0WSCR= L0F(LBNAME('W'//NM24))
DO 52 I= 1,NXNY
F(J0PVS1+I)= F(J0PVS1+I) - F(J0VWRS+I)*F(J0DSDZ+I)
F(J0PVS2+I)= F(J0PVS2+I) - F(J0WSCR+I)*F(J0DVDZ+I)
52 CONTINUE
ENDIF
ELSEIF(NM11.EQ.'W') THEN
C... Compute Prod,1 & Prod,2
J0WSCR= L0F(INDVAR)
DO 60 I= 1,NXNY
F(J0PWS1+I)= -F(J0W2RS+I)*F(J0DSDZ+I)
F(J0PWS2+I)= -F(J0WSCR+I)*F(J0DWDZ+I)
60 CONTINUE
IF(NX.GT.1) THEN
J0USCR= L0F(LBNAME('U'//NM24))
DO 61 I= 1,NXNY
F(J0PWS1+I)= F(J0PWS1+I) - F(J0UWRS+I)*F(J0DSDX+I)
F(J0PWS2+I)= F(J0PWS2+I) - F(J0USCR+I)*F(J0DWDX+I)
61 CONTINUE
ENDIF
IF(NY.GT.1) THEN
J0VSCR= L0F(LBNAME('V'//NM24))
F(J0PWS1+I)= F(J0PWS1+I) - F(J0VWRS+I)*F(J0DSDY+I)
F(J0PWS2+I)= F(J0PWS2+I) - F(J0VSCR+I)*F(J0DWDY+I)
62 CONTINUE
ENDIF
ENDIF
ENDIF
ENDIF
NAMSUB= 'ust199'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C.... UPRODK is called from UST194
C
SUBROUTINE UPRODK
include 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'rsmcmn'
COMMON/NAMFN/NAMFUN,NAMSUB
CHARACTER*6 NAMFUN,NAMSUB
NAMSUB='UPRODK'
J0VT=L0F(VIST)
DO 1 I=1,NXNY
F(J0PK+I)=F(J0VT+I)*
1 ( 2.*(F(J0DUDX+I)**2+F(J0DVDY+I)**2+F(J0DWDZ+I)**2)
1 +(F(J0DUDY+I)+F(J0DVDX+I))**2
1 +(F(J0DUDZ+I)+F(J0DWDX+I))**2
1 +(F(J0DWDY+I)+F(J0DVDZ+I))**2 )
1 CONTINUE
NAMSUB = 'uprodk'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C.... UPRDCT is called by UST194
C
SUBROUTINE UPRDCT
include 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'rsmcmn'
COMMON /LRSTM/LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
1 /NAMFN/NAMFUN,NAMSUB
LOGICAL LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
CHARACTER*6 NAMFUN,NAMSUB
C
NAMSUB= 'UPRDCT'
DO 10 I= 1,NXNY
F(J0PU2+I)= -2.*F(J0U2RS+I)*F(J0DUDX+I)
F(J0PV2+I)= -2.*F(J0V2RS+I)*F(J0DVDY+I)
F(J0PW2+I)= -2.*F(J0W2RS+I)*F(J0DWDZ+I)
10 CONTINUE
IF(IRSMHM.EQ.3) THEN
ONETRD= 1./3.
DO 11 I= 1,NXNY
F(J0BU2+I)= 0.5*F(J0U2RS+I)/F(J0KE+I)-ONETRD
F(J0BV2+I)= 0.5*F(J0V2RS+I)/F(J0KE+I)-ONETRD
F(J0BW2+I)= 0.5*F(J0W2RS+I)/F(J0KE+I)-ONETRD
C.... Buv= 0.5*uvrs/k
F(J0BUV+I)= 0.0
C.... Buw= 0.5*uwrs/k
F(J0BUW+I)= 0.0
C.... Bvw= 0.5*vwrs/k
F(J0BVW+I)= 0.0
F(J0SU2+I)= F(J0DUDX+I)
F(J0SV2+I)= F(J0DVDY+I)
F(J0SW2+I)= F(J0DWDZ+I)
C.... Suv= 0.5*(du/dy+dv/dx)
F(J0SUV+I)= 0.0
C.... Svw= 0.5*(dv/dz+dw/dy)
F(J0SVW+I)= 0.0
C.... Suw= 0.5*(du/dz+dw/dx)
F(J0SUW+I)= 0.0
F(J0OU2+I)= 0.0
F(J0OV2+I)= 0.0
F(J0OW2+I)= 0.0
C.... Ouv= 0.5*(du/dy-dv/dx)
F(J0OUV+I)= 0.0
C.... Ovw= 0.5*(dv/dz-dw/dy)
F(J0OVW+I)= 0.0
C.... Ouw= 0.5*(du/dz-dw/dx)
F(J0OUW+I)= 0.0
11 CONTINUE
ENDIF
IF(J0UVRS.NE.0) THEN
DO 20 I= 1,NXNY
F(J0PU2+I)= F(J0PU2+I) - 2.*F(J0UVRS+I)*F(J0DUDY+I)
F(J0PV2+I)= F(J0PV2+I) - 2.*F(J0UVRS+I)*F(J0DVDX+I)
F(J0PUV+I)=-F(J0U2RS+I)*F(J0DVDX+I) - F(J0V2RS+I)*F(J0DUDY+I)
1 +F(J0UVRS+I)*F(J0DWDZ+I)
20 CONTINUE
IF(IRSMHM.EQ.3) THEN
DO 21 I= 1,NXNY
F(J0BUV+I)= 0.5*F(J0UVRS+I)/F(J0KE+I)
F(J0SUV+I)= 0.5*(F(J0DUDY+I) + F(J0DVDX+I))
F(J0OUV+I)= 0.5*(F(J0DUDY+I) - F(J0DVDX+I))
21 CONTINUE
ENDIF
IF(LSTW1) THEN
DO 30 I= 1,NXNY
F(J0PUV+I)= F(J0PUV+I) - F(J0UWRS+I)*F(J0DVDZ+I)
1 - F(J0VWRS+I)*F(J0DUDZ+I)
30 CONTINUE
ENDIF
ENDIF
IF(J0UWRS.NE.0) THEN
DO 40 I= 1,NXNY
F(J0PU2+I)= F(J0PU2+I) - 2.*F(J0UWRS+I)*F(J0DUDZ+I)
F(J0PW2+I)= F(J0PW2+I) - 2.*F(J0UWRS+I)*F(J0DWDX+I)
F(J0PUW+I)=-F(J0U2RS+I)*F(J0DWDX+I) - F(J0W2RS+I)*F(J0DUDZ+I)
1 +F(J0UWRS+I)*F(J0DVDY+I)
40 CONTINUE
IF(IRSMHM.EQ.3) THEN
DO 41 I= 1,NXNY
F(J0BUW+I)= 0.5*F(J0UWRS+I)/F(J0KE+I)
F(J0SUW+I)= 0.5*(F(J0DUDZ+I) + F(J0DWDX+I))
F(J0OUW+I)= 0.5*(F(J0DUDZ+I) - F(J0DWDX+I))
41 CONTINUE
ENDIF
IF(LSTV1) THEN
DO 50 I= 1,NXNY
F(J0PUW+I)= F(J0PUW+I) - F(J0UVRS+I)*F(J0DWDY+I)
1 - F(J0VWRS+I)*F(J0DUDY+I)
50 CONTINUE
ENDIF
ENDIF
IF(J0VWRS.NE.0) THEN
DO 60 I= 1,NXNY
F(J0PV2+I)= F(J0PV2+I) - 2.*F(J0VWRS+I)*F(J0DVDZ+I)
F(J0PW2+I)= F(J0PW2+I) - 2.*F(J0VWRS+I)*F(J0DWDY+I)
F(J0PVW+I)=-F(J0V2RS+I)*F(J0DWDY+I) - F(J0W2RS+I)*F(J0DVDZ+I)
1 +F(J0VWRS+I)*F(J0DUDX+I)
60 CONTINUE
IF(IRSMHM.EQ.3) THEN
DO 61 I= 1,NXNY
F(J0BVW+I)= 0.5*F(J0VWRS+I)/F(J0KE+I)
F(J0SVW+I)= 0.5*(F(J0DVDZ+I) + F(J0DWDY+I))
F(J0OVW+I)= 0.5*(F(J0DVDZ+I) - F(J0DWDY+I))
61 CONTINUE
ENDIF
IF(LSTU1) THEN
DO 70 I= 1,NXNY
F(J0PVW+I)= F(J0PVW+I) - F(J0UVRS+I)*F(J0DWDX+I)
1 - F(J0UWRS+I)*F(J0DVDX+I)
70 CONTINUE
ENDIF
ENDIF
DO 80 I= 1,NXNY
GGPK= 0.5*(F(J0PU2+I) + F(J0PV2+I) + F(J0PW2+I))
F(J0PK+I)= AMAX1(GGPK,0.0)
80 CONTINUE
NAMSUB= 'uprdct'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C.... UPROD2 is called from UST194
C
SUBROUTINE UPROD2
include 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'rsmcmn'
COMMON /LRSTM/LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
1 /NAMFN/NAMFUN,NAMSUB
LOGICAL LSTU1,LSTV1,LSTW1,LSTKE,LSTREP,LSTRHO
CHARACTER*6 NAMFUN,NAMSUB
C
NAMSUB= 'UPROD2'
DO 10 I= 1,NXNY
F(J0DU2+I)= -2.*F(J0U2RS+I)*F(J0DUDX+I)
F(J0DV2+I)= -2.*F(J0V2RS+I)*F(J0DVDY+I)
F(J0DW2+I)= -2.*F(J0W2RS+I)*F(J0DWDZ+I)
10 CONTINUE
IF(J0UVRS.NE.0) THEN
DO 20 I= 1,NXNY
F(J0DU2+I)= F(J0DU2+I) - 2.*F(J0UVRS+I)*F(J0DVDX+I)
F(J0DV2+I)= F(J0DV2+I) - 2.*F(J0UVRS+I)*F(J0DUDY+I)
F(J0DUV+I)=-F(J0U2RS+I)*F(J0DUDY+I) - F(J0V2RS+I)*F(J0DVDX+I)
1 +F(J0UVRS+I)*F(J0DWDZ+I)
20 CONTINUE
IF(LSTW1) THEN
DO 30 I= 1,NXNY
F(J0DUV+I)= F(J0DUV+I) - F(J0UWRS+I)*F(J0DWDY+I)
1 - F(J0VWRS+I)*F(J0DWDX+I)
30 CONTINUE
ENDIF
ENDIF
IF(J0UWRS.NE.0) THEN
DO 40 I= 1,NXNY
F(J0DU2+I)= F(J0DU2+I) - 2.*F(J0UWRS+I)*F(J0DWDX+I)
F(J0DW2+I)= F(J0DW2+I) - 2.*F(J0UWRS+I)*F(J0DUDZ+I)
F(J0DUW+I)=-F(J0U2RS+I)*F(J0DUDZ+I) - F(J0W2RS+I)*F(J0DWDX+I)
1 +F(J0UWRS+I)*F(J0DVDY+I)
40 CONTINUE
IF(LSTV1) THEN
DO 50 I= 1,NXNY
F(J0DUW+I)= F(J0DUW+I) - F(J0UVRS+I)*F(J0DVDZ+I)
1 - F(J0VWRS+I)*F(J0DVDX+I)
50 CONTINUE
ENDIF
ENDIF
IF(J0VWRS.NE.0) THEN
DO 60 I= 1,NXNY
F(J0DV2+I)= F(J0DV2+I) - 2.*F(J0VWRS+I)*F(J0DWDY+I)
F(J0DW2+I)= F(J0DW2+I) - 2.*F(J0VWRS+I)*F(J0DVDZ+I)
F(J0DVW+I)=-F(J0V2RS+I)*F(J0DVDZ+I) - F(J0W2RS+I)*F(J0DWDY+I)
1 +F(J0VWRS+I)*F(J0DUDX+I)
60 CONTINUE
IF(LSTU1) THEN
DO 70 I= 1,NXNY
F(J0DVW+I)= F(J0DVW+I) - F(J0UVRS+I)*F(J0DUDZ+I)
1 - F(J0UWRS+I)*F(J0DUDY+I)
70 CONTINUE
ENDIF
ENDIF
NAMSUB= 'uprod2'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C.... UREDIS called from UST194.
C
SUBROUTINE UREDIS
include 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'satgrd'
INCLUDE 'grdloc'
INCLUDE 'rsmcmn'
COMMON/NAMFN/NAMFUN,NAMSUB
LOGICAL EQZ
CHARACTER*6 NAMFUN,NAMSUB
DATA G2D3/0.66666667/
C
NAMSUB= 'UREDIS'
C.... SSG pressure-strain MODEL
IF(IRSMHM.EQ.3) THEN
CALL SUB2R( ONETHD,1./3., TWOTHD,2./3. )
DO 10 I= 1,NXNY
GBU2 = F(J0BU2+I)
GBV2 = F(J0BV2+I)
GBW2 = F(J0BW2+I)
GBUV = F(J0BUV+I)
GBUW = F(J0BUW+I)
GBVW = F(J0BVW+I)
GC2TE= GC2*F(J0EP+I)
GBU2S= GBU2*GBU2
GBV2S= GBV2*GBV2
GBW2S= GBW2*GBW2
GBUVS= GBUV*GBUV
GBUWS= GBUW*GBUW
GBVWS= GBVW*GBVW
GBMNS= GBU2S + GBV2S + GBW2S + 2.*( GBUVS + GBUWS + GBVWS )
GBMN = SQRT(GBMNS)
OTGBMN= ONETHD*GBMNS
C
F(J0R2U2+I)= GC2TE*(GBU2S + GBUVS + GBUWS - OTGBMN)
F(J0R2V2+I)= GC2TE*(GBUVS + GBV2S + GBVWS - OTGBMN)
F(J0R2W2+I)= GC2TE*(GBUWS + GBVWS + GBW2S - OTGBMN)
F(J0R2UV+I)= GC2TE*(GBU2*GBUV + GBUV*GBV2 + GBUW*GBVW)
F(J0R2UW+I)= GC2TE*(GBU2*GBUW + GBUV*GBVW + GBUW*GBW2)
F(J0R2VW+I)= GC2TE*(GBUV*GBUW + GBV2*GBVW + GBVW*GBW2)
C
GSU2 = F(J0SU2+I)
GSV2 = F(J0SV2+I)
GSW2 = F(J0SW2+I)
GSUV = F(J0SUV+I)
GSUW = F(J0SUW+I)
GSVW = F(J0SVW+I)
GKET3= F(J0KE+I)*(GC3 - GC3ST*GBMN)
F(J0R3U2+I)= GKET3*GSU2
F(J0R3V2+I)= GKET3*GSV2
F(J0R3W2+I)= GKET3*GSW2
F(J0R3UV+I)= GKET3*GSUV
F(J0R3UW+I)= GKET3*GSUW
F(J0R3VW+I)= GKET3*GSVW
C
GC4KE = GC4*F(J0KE+I)
TTBMSM= TWOTHD*(GBU2*GSU2 + GBUV*GSUV + GBUW*GSUW +
1 GBUV*GSUV + GBV2*GSV2 + GBVW*GSVW +
1 GBUW*GSUW + GBVW*GSVW + GBW2*GSW2 )
F(J0R4U2+I)= GC4KE*(GBU2*GSU2+GBUV*GSUV+GBUW*GSUW +
1 GBU2*GSU2+GBUV*GSUV+GBUW*GSUW - TTBMSM)
F(J0R4V2+I)= GC4KE*(GBUV*GSUV+GBV2*GSV2+GBVW*GSVW +
1 GBUV*GSUV+GBV2*GSV2+GBVW*GSVW - TTBMSM)
F(J0R4W2+I)= GC4KE*(GBUW*GSUW+GBVW*GSVW+GBW2*GSW2 +
1 GBUW*GSUW+GBVW*GSVW+GBW2*GSW2 - TTBMSM)
F(J0R4UV+I)= GC4KE*(GBU2*GSUV+GBUV*GSV2+GBUW*GSVW +
1 GBUV*GSU2+GBV2*GSUV+GBVW*GSUW )
F(J0R4UW+I)= GC4KE*(GBU2*GSUW+GBUV*GSVW+GBUW*GSW2 +
1 GBUW*GSU2+GBVW*GSUV+GBW2*GSUW )
F(J0R4VW+I)= GC4KE*(GBUV*GSUW+GBV2*GSVW+GBVW*GSW2 +
1 GBUW*GSUV+GBVW*GSV2+GBW2*GSVW )
C
GOU2 = F(J0OU2+I)
GOV2 = F(J0OV2+I)
GOW2 = F(J0OW2+I)
GOUV = F(J0OUV+I)
GOUW = F(J0OUW+I)
GOVW = F(J0OVW+I)
GOVU = - GOUV
GOWU = - GOUW
GOWV = - GOVW
GC5KE= GC5*F(J0KE+I)
F(J0R5U2+I)= GC5KE*(GBU2*GOU2 + GBUV*GOUV + GBUW*GOUW +
1 GBU2*GOU2 + GBUV*GOUV + GBUW*GOUW )
F(J0R5V2+I)= GC5KE*(GBUV*GOVU + GBV2*GOV2 + GBVW*GOVW +
1 GBUV*GOVU + GBV2*GOV2 + GBVW*GOVW )
F(J0R5W2+I)= GC5KE*(GBUW*GOWU + GBVW*GOWV + GBW2*GOW2 +
1 GBUW*GOWU + GBVW*GOWV + GBW2*GOW2 )
F(J0R5UV+I)= GC5KE*(GBU2*GOVU + GBUV*GOV2 + GBUW*GOVW +
1 GBUV*GOU2 + GBV2*GOUV + GBVW*GOUW )
F(J0R5UW+I)= GC5KE*(GBU2*GOWU + GBUV*GOWV + GBUW*GOW2 +
1 GBUW*GOU2 + GBVW*GOUV + GBW2*GOUW )
F(J0R5VW+I)= GC5KE*(GBUV*GOWU + GBV2*GOWV + GBVW*GOW2 +
1 GBUW*GOVU + GBVW*GOV2 + GBW2*GOVW )
10 CONTINUE
ENDIF
IF(EQZ(GBET)) THEN
DO 20 I= 1,NXNY
G2D3PK= G2D3*F(J0PK+I)
GPU2 = F(J0PU2+I)
GPV2 = F(J0PV2+I)
GPW2 = F(J0PW2+I)
GPUV = F(J0PUV+I)
GPUW = F(J0PUW+I)
GPVW = F(J0PVW+I)
F(J0R2U2+I)= -GALF*(GPU2 - G2D3PK)
F(J0R2V2+I)= -GALF*(GPV2 - G2D3PK)
F(J0R2W2+I)= -GALF*(GPW2 - G2D3PK)
F(J0R2UV+I)= -GALF*GPUV
F(J0R2UW+I)= -GALF*GPUW
F(J0R2VW+I)= -GALF*GPVW
20 CONTINUE
ELSE
DO 30 I= 1,NXNY
GKE = F(J0KE+I)
G2D3PK= G2D3*F(J0PK+I)
GPU2= F(J0PU2+I)
GPV2= F(J0PV2+I)
GPW2= F(J0PW2+I)
GPUV= F(J0PUV+I)
GPUW= F(J0PUW+I)
GPVW= F(J0PVW+I)
GDU2= F(J0DU2+I)
GDV2= F(J0DV2+I)
GDW2= F(J0DW2+I)
GDUV= F(J0DUV+I)
GDUW= F(J0DUW+I)
GDVW= F(J0DVW+I)
F(J0R2U2+I)= -GALF*(GPU2-G2D3PK)
1 -GBET*(GDU2-G2D3PK) - GGAM*GKE*2.*F(J0DUDX+I)
F(J0R2V2+I)= -GALF*(GPV2-G2D3PK)
1 -GBET*(GDV2-G2D3PK) - GGAM*GKE*2.*F(J0DVDY+I)
F(J0R2W2+I)= -GALF*(GPW2-G2D3PK)
1 -GBET*(GDW2-G2D3PK) - GGAM*GKE*2.*F(J0DWDZ+I)
F(J0R2UV+I)= -GALF*GPUV
1 -GBET*GDUV - GGAM*GKE*(F(J0DUDY+I)+F(J0DVDX+I))
F(J0R2UW+I)= -GALF*GPUW
1 -GBET*GDUW - GGAM*GKE*(F(J0DUDZ+I)+F(J0DWDX+I))
F(J0R2VW+I)= -GALF*GPVW
1 -GBET*GDVW - GGAM*GKE*(F(J0DVDZ+I)+F(J0DWDY+I))
30 CONTINUE
ENDIF
NAMSUB = 'uredis'
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
C
INTEGER FUNCTION J0SCRS(INDVAR,J0TRS,CH1)
COMMON /GENI/IGFIL1(49),ITEM1,IGFIL2(10) /HDA1/NAME(150)
CHARACTER*4 NAME,CH1*1
IF(INDVAR.EQ.14 .OR. INDVAR.EQ.ITEM1) THEN
J0SCRS= J0TRS
ELSEIF(NAME(INDVAR)(1:2).EQ.'SC') THEN
LBSCRS= LBNAME(CH1//NAME(INDVAR)(1:3))
J0SCRS= L0F(LBSCRS)
ENDIF
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
C
FUNCTION RELSCR(INDVAR,JTRS,CH1)
COMMON /GENI/IGFIL1(49),ITEM1,IGFIL2(10)
1 /RDA1/DTFALS(150) /HDA1/NAME(150)
CHARACTER*4 NAME,CH1*1
IF(INDVAR.EQ.14 .OR. INDVAR.EQ.ITEM1) THEN
RELSCR= ABS(DTFALS(JTRS))
ELSEIF(NAME(INDVAR)(1:2).EQ.'SC') THEN
LBSCRS= LBNAME(CH1//NAME(INDVAR)(1:3))
RELSCR= ABS(DTFALS(LBSCRS))
ENDIF
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
LOGICAL FUNCTION GTURB(MPH)
include 'farray'
COMMON/RSTTNC/L0TURB,L0NORM,L0CROS
GTURB= NINT(F(L0TURB+ ISL(MPH))).EQ.1
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
LOGICAL FUNCTION GNORM(MPH)
include 'farray'
COMMON/RSTTNC/L0TURB,L0NORM,L0CROS
GNORM= NINT(F(L0NORM+ ISL(MPH))).EQ.1
END
C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
C
LOGICAL FUNCTION GCROS(MPH)
include 'farray'
COMMON/RSTTNC/L0TURB,L0NORM,L0CROS
GCROS= NINT(F(L0CROS+ ISL(MPH))).EQ.1
END
c