c
c -- file name gxvelslp.htm 060701
C.... FNVSLP calculates slip velocity for a current slab (NGO=1). It is
C called from INIPRP at the start of the run (NGO=0) to make
C preliminary settings.
SUBROUTINE FNVSLP(NGO,L0VREL,CFPA)
INCLUDE 'farray'
INCLUDE 'satear'
INCLUDE 'grdear'
INCLUDE 'grdloc'
INCLUDE 'satgrd'
COMMON/NAMFN/NAMFUN,NAMSUB /GENI/NXNY,NXM1NY,IG1(7),NFM,IG2(50)
1 /UVWCOL/IUC1,IVC1,IWC1,IUFIL(32)
1 /UCRTUN/IUCF(6),IUCR10,IVCR10,IWCR10,IUCR20,IVCR20,IWCR20
1 /PRPCMN/IPRF(13),LBVREL,LBNUSS
LOGICAL SOLU,SOLV,SOLW,XBOU
CHARACTER*6 NAMFUN,NAMSUB
SAVE SOLU,SOLV,SOLW,VSLPMX
C
NAMFUN= 'FNVLSP'
C.... Preliminaries:
IF(NGO.EQ.0) THEN
IF(CCM) THEN
CALL SUB3L(SOLU,IUC1.NE.0,SOLV,IVC1.NE.0,SOLW,IWC1.NE.0)
ELSE
CALL SUB3L(SOLU,SOLVE(U1),SOLV,SOLVE(V1),SOLW,SOLVE(W1))
CALL SUB3R(VSLMXU,1.E10,VSLMXV,1.E10,VSLMXW,1.E10)
IF(SOLU) VSLMXU=AMIN1( ABS(VARMAX(3)), ABS(VARMAX(4)) )
IF(SOLV) VSLMXV=AMIN1( ABS(VARMAX(5)), ABS(VARMAX(6)) )
IF(SOLW) VSLMXW=AMIN1( ABS(VARMAX(7)), ABS(VARMAX(8)) )
VSLPMX=AMIN1( VSLMXU, VSLMXV, VSLMXW)
ENDIF
c.... calculate limit for vrel
ELSE
C.... Calculate slip velocity for a current slab:
IF(CCM) THEN
IF(SOLU) CALL SUB2( L0U1,IUCR10, L0U2,IUCR20 )
IF(SOLV) CALL SUB2( L0V1,IVCR10, L0V2,IVCR20 )
IF(SOLW) CALL SUB2( L0W1,IWCR10, L0W2,IWCR20 )
IADZS= (IZSTEP-1)*NFM
DO 10 IX= IXF,IXL
IADX= (IX-1)*NY
DO 10 IY= IYF,IYL
IJ = IY+IADX
IJK= IJ+IADZS
DIFFSQ= 0.0
IF(SOLU) DIFFSQ= DIFFSQ + (F(L0U1+IJK)-F(L0U2+IJK))**2
IF(SOLV) DIFFSQ= DIFFSQ + (F(L0V1+IJK)-F(L0V2+IJK))**2
IF(SOLW) DIFFSQ= DIFFSQ + (F(L0W1+IJK)-F(L0W2+IJK))**2
F(L0VREL+IJ)= AMAX1(CFPA,SQRT(DIFFSQ+TINY))
10 CONTINUE
ELSE
IF(SOLU) CALL SUB2( L0U1,L0F(U1), L0U2,L0F(U2) )
IF(SOLV) CALL SUB2( L0V1,L0F(V1), L0V2,L0F(V2) )
IF(SOLW) THEN
CALL SUB2( L0W1, L0F(W1), L0W2, L0F(W2) )
CALL SUB2( L0W1L,L0W1-NFM, L0W2L,L0W2-NFM )
ENDIF
DO 20 IX= IXF,IXL
XBOU= IX.EQ.NX.AND..NOT.XCYCLE
DO 20 IY= IYF,IYL
I= IY+(IX-1)*NY
DIFFSQ= 0.0
IF(SOLU) THEN
IF(IX.EQ.1) THEN
IF(.NOT.XCYCLE) THEN
DIFFSQ= 2.*(F(L0U1+I)-F(L0U2+I))**2
ELSE
DIFFSQ= (F(L0U1+I)-F(L0U2+I))**2
J= I+NXM1NY
DIFFSQ= DIFFSQ + (F(L0U1+J)-F(L0U2+J))**2
ENDIF
ELSEIF(XBOU) THEN
J= I-NY
DIFFSQ= 2.*(F(L0U1+J)-F(L0U2+J))**2
ELSE
DIFFSQ= (F(L0U1+I)-F(L0U2+I))**2
J= I-NY
DIFFSQ= DIFFSQ + (F(L0U1+J)-F(L0U2+J))**2
ENDIF
ENDIF
IF(SOLV) THEN
IF(IY.EQ.1) THEN
DIFFSQ= DIFFSQ + 2.*(F(L0V1+I)-F(L0V2+I))**2
ELSEIF(IY.EQ.NY) THEN
DIFFSQ= DIFFSQ + 2.*(F(L0V1+I-1)-F(L0V2+I-1))**2
ELSE
DIFFSQ= DIFFSQ + (F(L0V1+I)-F(L0V2+I))**2
1 + (F(L0V1+I-1)-F(L0V2+I-1))**2
ENDIF
ENDIF
IF(SOLW) THEN
IF(IZ.EQ.1) THEN
DIFFSQ= DIFFSQ + 2.*(F(L0W1+I)-F(L0W2+I))**2
ELSEIF(IZ.EQ.NZ) THEN
DIFFSQ= DIFFSQ + 2.*(F(L0W1L+I)-F(L0W2L+I))**2
ELSE
DIFFSQ= DIFFSQ + (F(L0W1 +I)-F(L0W2 +I))**2
1 + (F(L0W1L+I)-F(L0W2L+I))**2
ENDIF
ENDIF
F(L0VREL+I)= AMAX1(CFPA, SQRT(0.5*DIFFSQ+TINY))
F(L0VREL+I)= AMIN1(F(L0VREL+I),VSLPMX)
20 CONTINUE
ENDIF
IF(LBVREL.NE.0) CALL FN0(LBVREL,-L0VREL)
ENDIF
END
c