c
C.... UTURSO is called from Gr.8 Sec.12 of GXRSTM C SUBROUTINE UTURSO INCLUDE 'farray' INCLUDE 'satear' INCLUDE 'grdear' INCLUDE 'grdloc' INCLUDE 'satgrd' INCLUDE 'rsmcmn' COMMON/INDAUX/L0ISL,L0IST,L0SL,L0ST,NSTO,NSOL,L0SLRS,L0TTRS, 1 IFL(12) COMMON/NAMFN/NAMFUN,NAMSUB /GENI/IGFIL1(49),ITEM1,IGFIL2(10) COMMON/RSTMCM/L0GTRS,L0PRTR LOGICAL GTURB CHARACTER*6 NAMFUN,NAMSUB,NM13*3 DATA G2D3/0.66666667/ C IF(JTURML.LT.1) RETURN NAMSUB= 'UTURSO' J0AP= L0F(LAP) J0SU= L0F(LSU) IF(GTURB(INDVAR)) THEN NM13 = NAME(INDVAR)(1:3) J0CEDK= J0NXY J0PHMS= J0NXY2 DO 10 I= 1,NXNY F(J0CEDK+I)= F(L0GCRS+ ISL(INDVAR))*F(J0EPDK+I) F(J0PHMS+I)= F(J0DEN1+I)*F(J0VOL+I) F(J0AP +I)= F(J0AP+I) + F(J0PHMS+I)*F(J0CEDK+I) 10 CONTINUE C----------------------------------------------------------- KE IF(INDVAR.EQ.KE) THEN DO 20 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I)*(F(J0PK+I) 1 - F(J0EPDK+I)*F(J0KE+I)) 20 CONTINUE C----------------------------------------------------------- EP ELSEIF(INDVAR.EQ.EP) THEN IF(IRSMHM.EQ.3) THEN GCE1D1= 2.*GCE1/GC1 GCE2D1= 2.*GCE2/GC1 ELSE GCE1D1= GCE1/GC1 GCE2D1= GCE2/GC1 ENDIF DO 30 I= 1,NXNY F(J0SU+I) = F(J0SU+I) + F(J0PHMS+I) * 1 (F(J0CEDK+I)*(GCE1D1*F(J0PK+I)-GCE2D1*F(J0EPDK+I)*F(J0KE+I))) 30 CONTINUE C----------------------------------------------------------- U2RS ELSEIF(INDVAR.EQ.JU2RS) THEN DO 40 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * 1 ( F(J0CEDK+I) * F(J0KE+I)*(G2D3 - F(J0U2DK+I) ) 1 + F(J0PU2 +I) + F(J0R2U2+I) - G2D3*F(J0EPDK+I)*F(J0KE+I) ) 40 CONTINUE IF(IRSMHM.EQ.3) THEN DO 41 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * ( F(J0R3U2+I) + 1 F(J0R4U2+I) + F(J0R5U2+I) - GC1ST*F(J0PK+I)*F(J0BU2+I) ) 41 CONTINUE ENDIF C----------------------------------------------------------- V2RS ELSEIF(INDVAR.EQ.JV2RS) THEN DO 50 I=1,NXNY F(J0SU+I) = F(J0SU+I) + F(J0PHMS+I) * 1 ( F(J0CEDK+I) * F(J0KE+I)*( G2D3 - F(J0V2DK+I) ) 1 + F(J0PV2 +I) + F(J0R2V2+I) - G2D3*F(J0EPDK+I)*F(J0KE+I) ) 50 CONTINUE IF(IRSMHM.EQ.3) THEN DO 51 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * ( F(J0R3V2+I) + 1 F(J0R4V2+I) + F(J0R5V2+I) - GC1ST*F(J0PK+I)*F(J0BV2+I) ) 51 CONTINUE ENDIF C----------------------------------------------------------- W2RS ELSEIF(INDVAR.EQ.JW2RS) THEN DO 60 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * 1 ( F(J0CEDK+I) * F(J0KE+I)*( G2D3 - F(J0W2DK+I) ) 1 + F(J0PW2 +I) + F(J0R2W2+I) - G2D3*F(J0EPDK+I)*F(J0KE+I) ) 60 CONTINUE IF(IRSMHM.EQ.3) THEN DO 61 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * ( F(J0R3W2+I) + 1 F(J0R4W2+I) + F(J0R5W2+I) - GC1ST*F(J0PK+I)*F(J0BW2+I) ) 61 CONTINUE ENDIF C----------------------------------------------------------- DFRS ELSEIF(INDVAR.EQ.JDFRS) THEN DO 70 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * 1 ( - F(J0CEDK+I) * F(J0DFRS+I) 1 + F(J0PV2 +I) - F(J0PU2+I) + F(J0R2V2+I) - F(J0R2U2+I) ) 70 CONTINUE C----------------------------------------------------------- UVRS ELSEIF(INDVAR.EQ.JUVRS) THEN DO 80 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * 1 (-F(J0CEDK+I)*F(J0UVDK+I)*F(J0KE+I)+F(J0PUV+I)+F(J0R2UV+I)) 80 CONTINUE IF(IRSMHM.EQ.3) THEN DO 81 I= 1,NXNY F(J0SU+I) = F(J0SU+I) + F(J0PHMS+I) * ( F(J0R3UV+I) + 1 F(J0R4UV+I) + F(J0R5UV+I) - GC1ST*F(J0PK+I)*F(J0BUV+I) ) 81 CONTINUE ENDIF C----------------------------------------------------------- UWRS ELSEIF(INDVAR.EQ.JUWRS) THEN DO 90 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * 1 (-F(J0CEDK+I)*F(J0UWDK+I)*F(J0KE+I)+F(J0PUW+I)+F(J0R2UW+I)) 90 CONTINUE IF(IRSMHM.EQ.3) THEN DO 91 I= 1,NXNY F(J0SU+I) = F(J0SU+I) + F(J0PHMS+I) * ( F(J0R3UW+I) + 1 F(J0R4UW+I) + F(J0R5UW+I) - GC1ST*F(J0PK+I)*F(J0BUW+I) ) 91 CONTINUE ENDIF C----------------------------------------------------------- VWRS ELSEIF(INDVAR.EQ.JVWRS) THEN DO 100 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * 1 (-F(J0CEDK+I)*F(J0VWDK+I)*F(J0KE+I)+F(J0PVW+I)+F(J0R2VW+I)) 100 CONTINUE IF(IRSMHM.EQ.3) THEN DO 101 I= 1,NXNY F(J0SU+I) = F(J0SU+I) + F(J0PHMS+I) * ( F(J0R3VW+I) + 1 F(J0R4VW+I) + F(J0R5VW+I) - GC1ST*F(J0PK+I)*F(J0BVW+I) ) 101 CONTINUE ENDIF C----------------------------------------------------------- USCR ELSEIF(NM13.EQ.'USC' .OR. NM13.EQ.'UTR') THEN J0USCR= L0F(INDVAR) DO 110 I= 1,NXNY F(J0SU+I)= F(J0SU+I) + F(J0PHMS+I) * 1 (-F(J0CEDK+I)*F(J0USCR+I) 1 +F(J0PUS1+I)+(1.-GC2T)*F(J0PUS2+I)) 110 CONTINUE C----------------------------------------------------------- VSCR ELSEIF(NM13.EQ.'VSC' .OR. NM13.EQ.'VTR') THEN J0VSCR= L0F(INDVAR) DO 120 I= 1,NXNY F(J0SU+I) = F(J0SU+I) + F(J0PHMS+I) * 1 (-F(J0CEDK+I)*F(J0VSCR+I) 1 +F(J0PVS1+I)+(1.-GC2T)*F(J0PVS2+I)) 120 CONTINUE C----------------------------------------------------------- WSCR ELSEIF(NM13.EQ.'WSC' .OR. NM13.EQ.'WTR') THEN J0WSCR= L0F(INDVAR) DO 130 I= 1,NXNY F(J0SU+I) = F(J0SU+I) + F(J0PHMS+I) * 1 (-F(J0CEDK+I)*F(J0WSCR+I) 1 +F(J0PWS1+I)+(1.-GC2T)*F(J0PWS2+I)) 130 CONTINUE ENDIF ELSEIF(JTURML.GT.1) THEN IF(INDVAR.EQ.W1) THEN C----------------------------------------------- W1 IF(.NOT.(PARAB.AND.IZ.EQ.1 .OR. NZ.EQ.1)) THEN JPZ= ITWO(0,JUMPZ,PARAB) DO 140 I= 1,NXNY GAH= F(J0AH+I) GAL= GAH F(J0SU+I) = F(J0SU+I) - F(J0DEN1+I) * 1 (GAH*F(J0W2RS+I+JPZ) - GAL*F(J0W2RS+I-JUMPZ+JPZ)) 140 CONTINUE ENDIF IF(NX.NE.1) THEN NXL= ITWO(NX,NX-1,XCYCLE) JPZ= ITWO(0,JUMPZ,PARAB.OR.NZ.EQ.1) DO 150 IX= 1,NXL I= (IX-1)*NY IPLUS= MOD(I+NY,NXNY) DO 150 IY= 1,NY I= I + 1 IPLUS= IPLUS + 1 GAE = F(J0AE+I) GUWE= 0.25*(F(J0UWRS+I) +F(J0UWRS+IPLUS) 1 +F(J0UWRS+I+JPZ)+F(J0UWRS+IPLUS+JPZ)) SUSUB= F(J0DEN1+I)*GUWE*GAE F(J0SU+I) = F(J0SU+I) - SUSUB F(J0SU+IPLUS)= F(J0SU+IPLUS) + SUSUB 150 CONTINUE ENDIF IF(NY.NE.1) THEN JPZ= ITWO(0,JUMPZ,PARAB.OR.NZ.EQ.1) DO 160 IX= 1,NX I= (IX-1)*NY DO 160 IY= 1,NY-1 I= I + 1 GAN = F(J0AN+I) GVWN= 0.25*(F(J0VWRS+I) +F(J0VWRS+I+1) 1 +F(J0VWRS+I+JPZ)+F(J0VWRS+I+1+JPZ)) SUSUB= F(J0DEN1+I)*GVWN*GAN F(J0SU+I) = F(J0SU+I) - SUSUB F(J0SU+I+1)= F(J0SU+I+1) + SUSUB 160 CONTINUE ENDIF C-------------------------------------- Sources for V1 ELSEIF(INDVAR.EQ.V1) THEN IF(NY.NE.1) THEN DO 170 IX= 1,NX I = (IX-1)*NY GAN = F(J0VOL+I+1)/F(J0DY+I+1) GV2N= F(J0V2RS+I+1) DO 170 IY= 1,NY-1 I = I + 1 GAS = GAN GV2S = GV2N GAN = F(J0VOL+I+1)/F(J0DY+I+1) GV2N = F(J0V2RS+I+1) GSUAD= - F(J0DEN1+I)*(GAN*GV2N - GAS*GV2S) IF(.NOT.CARTES) THEN GVOL = 0.5*(F(J0VOL+I)+F(J0VOL+I+1)) GR = 0.5*(F(J0R+I)+F(J0R+I+JUMPY)) GU2RS= 0.5*(F(J0U2RS+I)+F(J0U2RS+I+1)) GSUAD= GSUAD+F(J0DEN1+I)*GVOL/GR*GU2RS ENDIF F(J0SU+I)= F(J0SU+I) + GSUAD 170 CONTINUE ENDIF IF(NZ.NE.1 .AND. .NOT.(PARAB.AND.IZ.EQ.1)) THEN JPZ = ITWO(0,JUMPZ,PARAB) GADH= ITWO(1,0,PARAB.OR.IZ.NE.NZ) GADL= ITWO(1,0,PARAB.OR.IZ.NE.1) DO 180 IX= 1,NX I= (IX-1)*NY DO 180 IY= 1,NY-1 I = I+1 GAH = 0.5*(F(J0AH+I)+F(J0AH+I+1)) GAL = GAH GVWH= 0.25*(F(J0VWRS+I)+F(J0VWRS+I+1) 1 +F(J0VWRS+I+JPZ)+F(J0VWRS+I+1+JPZ)) GVWL= 0.25*(F(J0VWRS+I-JUMPZ)+F(J0VWRS+I+1-JUMPZ) 1 +F(J0VWRS+I-JUMPZ+JPZ)+F(J0VWRS+I+1-JUMPZ+JPZ)) F(J0SU+I)= F(J0SU+I)-F(J0DEN1+I) 1 *(GADH*GAH*GVWH-GADL*GAL*GVWL) 180 CONTINUE ENDIF IF(NX.NE.1) THEN NXL= ITWO(NX,NX-1,XCYCLE) DO 190 IX= 1,NXL I= (IX-1)*NY IPLUS= MOD(I+NY,NXNY) DO 190 IY= 1,NY-1 I = I + 1 IPLUS= IPLUS + 1 GAE = 0.5*(F(J0AE+I)+F(J0AE+I+1)) GUVE= 0.25*(F(J0UVRS+I) +F(J0UVRS+IPLUS) 1 +F(J0UVRS+I+1)+F(J0UVRS+IPLUS+1)) SUSUB= F(J0DEN1+I)*GAE*GUVE F(J0SU+I) = F(J0SU+I) - SUSUB F(J0SU+IPLUS)= F(J0SU+IPLUS)+ SUSUB 190 CONTINUE ENDIF C-------------------------------------- Sources for U1 ELSEIF(INDVAR.EQ.U1) THEN IF(NX.NE.1) THEN NXL= ITWO(NX,NX-1,XCYCLE) DO 200 IX= 1,NXL I= (IX-1)*NY IPLUS= MOD(I+NY,NXNY) DO 200 IY= 1,NY I= I + 1 IPLUS= IPLUS + 1 GAE = F(J0VOL+IPLUS)/F(J0DX+IPLUS) GAW = F(J0VOL+I)/F(J0DX+I) GU2E= F(J0U2RS+IPLUS) GU2W= F(J0U2RS+I) F(J0SU+I)= F(J0SU+I)-F(J0DEN1+I)*(GAE*GU2E-GAW*GU2W) 200 CONTINUE ENDIF IF(NZ.NE.1 .AND. .NOT.(PARAB.AND.IZ.EQ.1)) THEN NXL = ITWO(NX,NX-1,XCYCLE.OR.NX.EQ.1) GADH= ITWO(1,0,PARAB.OR.IZ.NE.NZ) GADL= ITWO(1,0,PARAB.OR.IZ.NE.1) JPZ = ITWO(0,JUMPZ,PARAB) DO 210 IX= 1,NXL I= (IX-1)*NY IPLUS= MOD(I+NY,NXNY) DO 210 IY= 1,NY I = I + 1 IPLUS= IPLUS + 1 GAH = 0.5*(F(J0AH+I)+F(J0AH+IPLUS)) GAL = GAH GUWH = 0.25*(F(J0UWRS+I)+F(J0UWRS+IPLUS) 1 + F(J0UWRS+I+JPZ)+F(J0UWRS+IPLUS+JPZ)) GUWL = 0.25*(F(J0UWRS+I-JUMPZ)+F(J0UWRS+IPLUS-JUMPZ) 1 + F(J0UWRS+I+JPZ-JUMPZ)+F(J0UWRS+IPLUS+JPZ-JUMPZ)) F(J0SU+I)= F(J0SU+I)-F(J0DEN1+I) 1 *(GADH*GAH*GUWH-GADL*GAL*GUWL) 210 CONTINUE ENDIF IF(NY.NE.1) THEN NXL= ITWO(NX,NX-1,XCYCLE.OR.NX.EQ.1) DO 220 IX=1,NXL I= (IX-1)*NY IPLUS= MOD(I+NY,NXNY) DO 220 IY= 1,NY-1 I= I + 1 IPLUS= IPLUS + 1 GAN = 0.5*(F(J0AN+I)+F(J0AN+IPLUS)) GUVN = 0.25*(F(J0UVRS+I) + F(J0UVRS+I+1) + 1 F(J0UVRS+IPLUS) + F(J0UVRS+IPLUS+1)) SUSUB= F(J0DEN1+I)*GAN*GUVN F(J0SU+I) = F(J0SU+I) - SUSUB F(J0SU+I+1)= F(J0SU+I+1)+ SUSUB 220 CONTINUE ENDIF IF(.NOT.CARTES) THEN NXL= ITWO(NX,NX-1,XCYCLE.OR.NX.EQ.1) DO 230 IX= 1,NXL I= (IX-1)*NY IPLUS= MOD(I+NY,NXNY) DO 230 IY= 1,NY I = I + 1 IPLUS= IPLUS + 1 GVOL = 0.5*(F(J0VOL+I)+F(J0VOL+IPLUS)) GR = 0.5*(F(J0R+I)+F(J0R+IPLUS)) GUVRS= 0.5*(F(J0UVRS+I)+F(J0UVRS+IPLUS)) F(J0SU+I)= F(J0SU+I) - F(J0DEN1+I)*GVOL/GR*GUVRS 230 CONTINUE ENDIF C---------------------------------- Sources for H1,TEM1 & scalars ELSEIF( (INDVAR.EQ.H1.OR.INDVAR.EQ.ITEM1.OR.NAME(INDVAR)(1:2). 1 EQ.'SC') .AND. JSCAML.GE.2) THEN C.... Allow for specific heat for TEM1, but for now just use cp,p IF(INDVAR.EQ.ITEM1) THEN CALL FN0(-J0NXY,LCP1) ELSE CALL FN1(-J0NXY,1.0) ENDIF IF(NX.NE.1) THEN J0USCR= J0SCRS(INDVAR,J0UTRS,'U') NXL = ITWO(NX,NX-1,XCYCLE) DO 240 IX= 1,NXL I = (IX-1)*NY IPLUS= MOD(I+NY,NXNY) DO 240 IY=1,NY I = I + 1 IPLUS= IPLUS + 1 GAE = F(J0AE+I) GUSE = 0.5*(F(J0USCR+I)+F(J0USCR+IPLUS)) GCP = F(J0NXY+I) SUSUB= F(J0DEN1+I)*GUSE*GAE*GCP F(J0SU+I) = F(J0SU+I) - SUSUB F(J0SU+IPLUS)= F(J0SU+IPLUS) + SUSUB 240 CONTINUE ENDIF IF(NY.NE.1) THEN J0VSCR= J0SCRS(INDVAR,J0VTRS,'V') DO 250 IX= 1,NX I= (IX-1)*NY DO 250 IY=1,NY-1 I = I + 1 GAN = F(J0AN+I) GVSN= 0.5*(F(J0VSCR+I)+F(J0VSCR+I+1)) GCP = F(J0NXY+I) SUSUB= F(J0DEN1+I)*GVSN*GAN*GCP F(J0SU+I) = F(J0SU+I) - SUSUB F(J0SU+I+1)= F(J0SU+I+1)+ SUSUB 250 CONTINUE ENDIF IF(NZ.NE.1 .AND. .NOT.(PARAB.AND.IZ.EQ.1)) THEN J0WSCR= J0SCRS(INDVAR,J0WTRS,'W') GADH = ITWO(1,0,PARAB.OR.IZ.NE.NZ) GADL = ITWO(1,0,PARAB.OR.IZ.NE.1) JPZ = ITWO(0,JUMPZ,PARAB) DO 260 I= 1,NXNY GAH = F(J0AH+I) GAL = GAH GWSH= 0.5*(F(J0WSCR+I)+F(J0WSCR+I+JPZ)) GWSL= 0.5*(F(J0WSCR+I-JUMPZ)+F(J0WSCR+I+JPZ-JUMPZ)) GCP = F(J0NXY+I) F(J0SU+I)= F(J0SU+I)-F(J0DEN1+I)*(GADH*GAH*GWSH- 1 GADL*GAL*GWSL)*GCP 260 CONTINUE ENDIF ENDIF ENDIF C.... Common part: IF(SOLVE(INDVAR)) THEN CALL SUMAIF(SUMABS,J0SU,J0AP,FIXVAL) SUMABS= SUMABS/(RESREF(INDVAR)+TINY) F(L0SLRS+ISL(INDVAR))= SUMABS IF(.NOT.(PARAB .OR. ITHYD.LT.LITHYD)) THEN IF(IZSTEP.LE.1) F(L0GTRS+ISL(INDVAR)) = 0.0 F(L0GTRS+ISL(INDVAR)) = F(L0GTRS+ISL(INDVAR)) + SUMABS F(L0TTRS+ISL(INDVAR)) = F(L0GTRS+ISL(INDVAR)) ENDIF ENDIF NAMSUB = 'uturso' END C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C.... URSVIS is called from Gr.9, Sec.5 of GXRSTM. C SUBROUTINE URSVIS INCLUDE 'farray' INCLUDE 'satear' INCLUDE 'grdear' INCLUDE 'grdloc' INCLUDE 'satgrd' INCLUDE 'rsmcmn' COMMON /NAMFN/NAMFUN,NAMSUB CHARACTER*6 NAMFUN,NAMSUB LOGICAL QEQ,SLD C NAMSUB= 'URSVIS' IF(QEQ(ENUT,GRND))THEN J0VT= L0F(AUX(VIST)) IF(JTURML.GT.0) THEN DO 10 I= 1,NXNY IF(SLD(I)) THEN F(J0VT+I)= 0.0 ELSE F(J0EPDK+I)=F(J0EP+I)/(F(J0KE+I)+TINY) F(J0VT+I)= GCS*F(J0KE+I)/F(J0EPDK+I) ENDIF 10 CONTINUE ELSE DO 20 I= 1,NXNY 20 F(J0VT+I)= 0.0 ENDIF ENDIF NAMSUB= 'ursvis' END C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C SUBROUTINE URSLEN INCLUDE 'farray' INCLUDE 'satear' INCLUDE 'grdear' INCLUDE 'grdloc' INCLUDE 'satgrd' INCLUDE 'rsmcmn' COMMON /NAMFN/NAMFUN,NAMSUB CHARACTER*6 NAMFUN,NAMSUB LOGICAL QEQ,SLD C NAMSUB= 'URSLEN' IF(QEQ(EL1,GRND)) THEN J0L1= L0F(AUX(LEN1)) IF(JTURML.GT.0) THEN ELMN= VARMIN(LEN1) ELMX= VARMAX(LEN1) DO 10 I= 1,NXNY F(J0KE+I)= AMAX1(F(J0KE+I),TINY) F(J0EP+I)= AMAX1(F(J0EP+I),TINY) IF(SLD(I)) THEN F(J0L1+I)= 0.0 ELSE F(J0L1+I)= AMAX1(ELMN,AMIN1(ELMX, 1 CD*F(J0KE+I)**1.5/F(J0EP+I))) ENDIF 10 CONTINUE ELSE DO 20 I= 1,NXNY 20 F(J0L1+I)=0.0 ENDIF ENDIF NAMSUB= 'urslen' END C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C.... UDFMOD is called from Gr.8, Sec. 9 of GXRSTM. C SUBROUTINE UDFMOD INCLUDE 'farray' INCLUDE 'satear' INCLUDE 'grdear' INCLUDE 'grdloc' INCLUDE 'satgrd' INCLUDE 'rsmcmn' COMMON /F0/KF01(70),KAP,KSU,KF073(232) 1 /GENI/IGFIL1(49),ITEM1,IGFIL2(10) /NAMFN/NAMFUN,NAMSUB LOGICAL GU2OV2,GTURB CHARACTER*6 NAMFUN,NAMSUB C NAMSUB= 'UDFMOD' IF(JTURML.GT.1) THEN IF(NDIREC.EQ.1) THEN IF(GTURB(INDVAR)) THEN J0DIFN= L0F(LAN) J0DIFS= L0F(LAS) DO 10 IX= 1,NX I= (IX-1)*NY DO 10 IY= 1,NY-1 I= I+1 GMOD = 0.5*(F(J0V2DK+I) + F(J0V2DK+I+JUMPY)) F(J0DIFN+I)= F(J0DIFN+I)*GMOD*F(L0GCRT+ ISL(INDVAR)) 10 CONTINUE ENDIF ELSEIF(NDIREC.EQ.3) THEN IF(GTURB(INDVAR)) THEN J0DIFE= L0F(LAE) NXL= ITWO(NX,NX-1,XCYCLE) I = 0 DO 20 IX= 1,NXL IPLUS= MOD(I+NY,NXNY) DO 20 IY= 1,NY I = I + 1 IPLUS= IPLUS + 1 GMOD = 0.5*(F(J0U2DK+I)+F(J0U2DK+IPLUS)) F(J0DIFE+I)= F(J0DIFE+I)*GMOD*F(L0GCRT+ ISL(INDVAR)) 20 CONTINUE ENDIF ELSEIF(NDIREC.EQ.5) THEN IF(GTURB(INDVAR)) THEN J0DIFH= L0F(LD11) DO 30 I= 1,NXNY GMOD= F(J0W2DK+I) F(J0DIFH+I)= F(J0DIFH+I)*GMOD*F(L0GCRT+ ISL(INDVAR)) 30 CONTINUE ENDIF ENDIF ENDIF IF(.NOT.CARTES .AND. NDIREC.EQ.1) THEN IF(INDVAR.EQ.V1 .OR. GTURB(INDVAR)) THEN J0VAR = L0F(INDVAR) J0DIFN= L0F(LAN) IF(INDVAR.EQ.JWTRS .OR. NAME(INDVAR)(1:3).EQ.'WSC') THEN DO 40 I= 1,NXNY 40 F(J0NXY+I)= 0.0 ELSEIF(INDVAR.EQ.V1) THEN DO 50 I= 1,NXNY 50 F(J0NXY+I)= 1.0 ELSEIF(INDVAR.EQ.JUVRS) THEN DO 60 I= 1,NXNY 60 F(J0NXY+I)= 4.*F(J0U2DK+I)/F(J0V2DK+I) ELSEIF(INDVAR.EQ.JUWRS.OR.INDVAR.EQ.JVWRS.OR.NAME(INDVAR)(2:3) 1 .EQ.'SC'.OR.NAME(INDVAR)(2:4).EQ.'TRS') THEN DO 70 I= 1,NXNY 70 F(J0NXY+I)= F(J0U2DK+I)/F(J0V2DK+I)*F(L0GCRT+ ISL(INDVAR)) ELSEIF(INDVAR.EQ.JU2RS) THEN DO 80 I= 1,NXNY GU2DV2= F(J0U2DK+I)/F(J0V2DK+I) F(J0NXY+I)= -2.*(1.-GU2DV2) 80 CONTINUE ELSEIF(INDVAR.EQ.JV2RS) THEN DO 90 I= 1,NXNY GU2DV2= F(J0U2DK+I)/F(J0V2DK+I) F(J0NXY+I)= 2.*GU2DV2*(1.-GU2DV2) 90 CONTINUE ELSE RETURN ENDIF JJ0R= ITWO(J0RV,J0R,INDVAR.EQ.V1) JJNY= ITWO(NY-1,NY,INDVAR.EQ.V1) GRADP = TINY GRADN = F(JJ0R+1) GU2OV2= INDVAR.EQ.JU2RS .OR. INDVAR.EQ.JV2RS DO 110 IY = 1,JJNY GRADS= GRADP GRADP= GRADN GRADN= F(JJ0R+IY+1) APDAN= GRADN/GRADP - 1. APDAS= GRADS/GRADP - 1. IF(IY.EQ.1) APDAS= 0.0 I= IY - NY DO 100 IX = 1,NX I= I + NY APAD= F(J0DIFN+I)*APDAN + F(J0DIFN+I-1)*APDAS C.... Provide protection against -ve ap for u2rs & v2rs by not C multiplying ap by f(j0nxy+i); since solving a correction C equation this is permissible, although in future it may C be better to adopt a more consistent treatment. SUAD= - F(J0VAR+I)*APAD*F(J0NXY+I) IF(.NOT.GU2OV2) APAD= APAD*F(J0NXY+I) F(KAP+I)= F(KAP+I) + APAD F(KSU+I)= F(KSU+I) + SUAD 100 CONTINUE 110 CONTINUE ENDIF ENDIF C.... Eddy-diffusivity option for H1; cmucd=taudke*taudke C for consistency with RSTM constants IF((INDVAR.EQ.H1.OR.INDVAR.EQ.ITEM1.OR.NAME(INDVAR)(1:2).EQ.'SC') 1 .AND.JSCAML.EQ.1) THEN IF(NDIREC.EQ.1) THEN CALL FN25(LAN,F(L0GCRT+ ISL(INDVAR))) CALL FN25(LAS,F(L0GCRT+ ISL(INDVAR))) ELSEIF(NDIREC.EQ.3) THEN CALL FN25(LAE,F(L0GCRT+ ISL(INDVAR))) CALL FN25(LAW,F(L0GCRT+ ISL(INDVAR))) ELSEIF(NDIREC.EQ.5) THEN CALL FN25(LD11,F(L0GCRT+ ISL(INDVAR))) ENDIF ENDIF NAMSUB = 'udfmod' END C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C.... UCNMOD is called from Gr.9, Sec.10 of UCNMOD. C SUBROUTINE UCNMOD INCLUDE 'farray' INCLUDE 'satear' INCLUDE 'grdear' INCLUDE 'grdloc' INCLUDE 'satgrd' INCLUDE 'rsmcmn' COMMON /F0/KF01(71),KSU,KF073(232) /NAMFN/NAMFUN,NAMSUB LOGICAL GTURB CHARACTER*6 NAMFUN,NAMSUB CHARACTER*4 NMPH C NAMSUB= 'UCNMOD' IF(GTURB(INDVAR).AND..NOT.CARTES.AND.STORE(U1)) THEN IF(NX.EQ.1.AND.NDIREC.EQ.1.OR.NX.NE.1.AND.NDIREC.EQ.3) THEN IF(INDVAR.EQ.JU2RS) THEN DO 10 I= 1,NXNY 10 F(J0NXY+I)= -2.*F(J0UVRS+I) ELSEIF(INDVAR.EQ.JV2RS) THEN DO 20 I= 1,NXNY 20 F(J0NXY+I)= 2.*F(J0UVRS+I) ELSEIF(INDVAR.EQ.JW2RS) THEN RETURN ELSEIF(INDVAR.EQ.JDFRS) THEN DO 30 I= 1,NXNY 30 F(J0NXY+I)= 4.*F(J0UVRS+I) ELSEIF(INDVAR.EQ.KE) THEN RETURN ELSEIF(INDVAR.EQ.EP) THEN RETURN ELSEIF(INDVAR.EQ.JUVRS) THEN DO 40 I= 1,NXNY 40 F(J0NXY+I)= F(J0U2RS+I)-F(J0V2RS+I) ELSEIF(INDVAR.EQ.JUWRS) THEN DO 50 I= 1,NXNY 50 F(J0NXY+I)= -F(J0VWRS+I) ELSEIF(INDVAR.EQ.JVWRS) THEN DO 60 I= 1,NXNY 60 F(J0NXY+I)= F(J0UWRS+I) ELSEIF(INDVAR.EQ.JUTRS) THEN DO 70 I= 1,NXNY 70 F(J0NXY+I)= -F(J0VTRS+I) ELSEIF(INDVAR.EQ.JVTRS) THEN DO 80 I= 1,NXNY 80 F(J0NXY+I)= F(J0UTRS+I) ELSEIF(INDVAR.EQ.JWTRS.OR.NAME(INDVAR)(1:3).EQ.'WSC') THEN RETURN ELSEIF(NAME(INDVAR)(1:3).EQ.'USC') THEN NMPH = 'VSC'//NAME(INDVAR)(4:4) J0VSCR= L0F(LBNAME(NMPH)) DO 90 I= 1,NXNY 90 F(J0NXY+I)= -F(J0VSCR+I) ELSEIF(NAME(INDVAR)(1:3).EQ.'VSC') THEN NMPH = 'USC'//NAME(INDVAR)(4:4) J0USCR= L0F(LBNAME(NMPH)) DO 100 I= 1,NXNY 100 F(J0NXY+I)= F(J0USCR+I) ENDIF ENDIF IF(NX.EQ.1.AND.NDIREC.EQ.1) THEN DO 110 I= 1,NXNY F(KSU+I)= F(KSU+I)+F(J0DEN1+I)*F(J0VOL+I)*F(J0NXY+I)* 1 F(J0U1+I)/F(J0R+I) 110 CONTINUE ELSEIF(NDIREC.EQ.3) THEN J0CNE= L0F(LD8) J0CNW= L0F(LD7) NXL =ITWO(NX,NX-1,XCYCLE) DO 120 IX= 1,NXL I= (IX-1)*NY IPLUS= (MOD(IX+NX,NX))*NY DO 120 IY= 1,NY I= I + 1 IPLUS= IPLUS + 1 GFIPE= 0.5*(F(J0NXY+I)+F(J0NXY+IPLUS)) GDX = F(J0DX+I) GRP = F(J0R+I) TERM = GFIPE*GDX/GRP F(J0CNE+I) = F(J0CNE+I) - TERM F(J0CNW+IPLUS)= F(J0CNW+IPLUS)+ TERM 120 CONTINUE ENDIF ENDIF NAMSUB= 'ucnmod' END C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! c