hosseinshafii
Mechanical
- Jan 29, 2015
- 4
Hello to all
i am working with umeshmotion to simulate wear of sand productin in oil welbore. i can define mesh motion but i see in some of umesh motion code have a part:share of element consumed in next increment . i do not know what do this part of subroutine ? what means of ELINC OR CHARLENGTH ? maybe CHARLENGTH is characteristic element lenght maybe! but never i do not know means of ELINC . a sample of sobroutine:
subroutine umeshmotion(uref,ulocal,node,nndof,lnodetype,alocal,
* ndim,time,dtime,pnewdt,kstep,kinc,
* kmeshsweep,jmatyp,jgvblock,lsmooth)
C
include 'aba_param.inc'
C
CHARACTER*80 PARTNAME IN THIS SECTION DEFINE WEAR VELOCITY
DIMENSION ARRAY(1000)
DIMENSION ULOCAL(*)
DIMENSION JGVBLOCK(*),JMATYP(*)
DIMENSION ALOCAL(NDIM,*)
PARAMETER (NELEMMAX=100)
DIMENSION JELEMLIST(NELEMMAX),JELEMTYPE(NELEMMAX)
PARAMETER (ALamda1=4.0D0,ALamda2=0.01D0)
PARAMETER (TRCON = 0.001)
PARAMETER (ELINC = 0.1D0)
DIMENSION TIME(2)
LOCNUM = 0
JRCD = 0
PARTNAME = ' '
PEEQ = 0.0D0
FPEEQ= 0.0D0
FPOROSITY=0.00D0
FRVF = 0.00D0
CHARLENGTH = UREF
JTYP = 1
CALL GETPARTINFO(NODE,0,PARTNAME,LOCNUM,JRCD)
NELEMS = NELEMMAX
CALL GETNODETOELEMCONN(NODE,NELEMS,JELEMLIST,JELEMTYPE,JRCD,
$ JGVBLOCK)
CALL GETVRMAVGATNODE(NODE,JTYP,'PE',ARRAY,JRCD,
$ JELEMLIST,NELEMS,JMATYP,JGVBLOCK)
PEEQ = ARRAY(7)
IF (PEEQ.GT.0.018D0) THEN
FPEEQ=Alamda1*(PEEQ-0.018D0)
If(FPEEQ.gt.ALamda2)FPEEQ=ALamda2
CALL GETVRMAVGATNODE(NODE,JTYP,'VOIDR',ARRAY,JRCD,
$ JELEMLIST,NELEMS,JMATYP,JGVBLOCK)
FPOROSITY = 1.0D0/(1.0D0+ARRAY(1))
CALL GETVRMAVGATNODE(NODE,JTYP,'FLVEL',ARRAY,JRCD,
$ JELEMLIST,NELEMS,JMATYP,JGVBLOCK)
FLVMAG = ARRAY(1)
SURFV = TRCON*FPEEQ*FPOROSITY*FLVMAG
if(LNODETYPE.EQ.3)SURFV=SURFV*1.41421356D0
ULOCAL(NDIM) = ULOCAL(NDIM)-SURFV
C SHARE OF ELEMENT CONSUMED IN NEXT INCREMENT<<<<<<<<<<<<<<<<<<<<<<<<<<<<HERE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
PELEM = DTIME * SURFV / CHARLENGTH
PNEWDT1 = 0.0D0
IF (PELEM.GT.ELINC.AND.SURFV.GT.0.0D0) THEN
PNEWDT1 = CHARLENGTH * ELINC / SURFV
IF (PNEWDT1.LT.DTIME) THEN
WRITE (7,*) 'CHANGING TIME INCREMENT FROM ',DTIME
PNEWDT = PNEWDT1
WRITE (7,*) 'TO ',PNEWDT
WRITE (7,*) 'BASED ON NODE ',LOCNUM
PNEWDT = PNEWDT / DTIME
END IF
END IF
LSMOOTH = 1
END IF
return
end
i am working with umeshmotion to simulate wear of sand productin in oil welbore. i can define mesh motion but i see in some of umesh motion code have a part:share of element consumed in next increment . i do not know what do this part of subroutine ? what means of ELINC OR CHARLENGTH ? maybe CHARLENGTH is characteristic element lenght maybe! but never i do not know means of ELINC . a sample of sobroutine:
subroutine umeshmotion(uref,ulocal,node,nndof,lnodetype,alocal,
* ndim,time,dtime,pnewdt,kstep,kinc,
* kmeshsweep,jmatyp,jgvblock,lsmooth)
C
include 'aba_param.inc'
C
CHARACTER*80 PARTNAME IN THIS SECTION DEFINE WEAR VELOCITY
DIMENSION ARRAY(1000)
DIMENSION ULOCAL(*)
DIMENSION JGVBLOCK(*),JMATYP(*)
DIMENSION ALOCAL(NDIM,*)
PARAMETER (NELEMMAX=100)
DIMENSION JELEMLIST(NELEMMAX),JELEMTYPE(NELEMMAX)
PARAMETER (ALamda1=4.0D0,ALamda2=0.01D0)
PARAMETER (TRCON = 0.001)
PARAMETER (ELINC = 0.1D0)
DIMENSION TIME(2)
LOCNUM = 0
JRCD = 0
PARTNAME = ' '
PEEQ = 0.0D0
FPEEQ= 0.0D0
FPOROSITY=0.00D0
FRVF = 0.00D0
CHARLENGTH = UREF
JTYP = 1
CALL GETPARTINFO(NODE,0,PARTNAME,LOCNUM,JRCD)
NELEMS = NELEMMAX
CALL GETNODETOELEMCONN(NODE,NELEMS,JELEMLIST,JELEMTYPE,JRCD,
$ JGVBLOCK)
CALL GETVRMAVGATNODE(NODE,JTYP,'PE',ARRAY,JRCD,
$ JELEMLIST,NELEMS,JMATYP,JGVBLOCK)
PEEQ = ARRAY(7)
IF (PEEQ.GT.0.018D0) THEN
FPEEQ=Alamda1*(PEEQ-0.018D0)
If(FPEEQ.gt.ALamda2)FPEEQ=ALamda2
CALL GETVRMAVGATNODE(NODE,JTYP,'VOIDR',ARRAY,JRCD,
$ JELEMLIST,NELEMS,JMATYP,JGVBLOCK)
FPOROSITY = 1.0D0/(1.0D0+ARRAY(1))
CALL GETVRMAVGATNODE(NODE,JTYP,'FLVEL',ARRAY,JRCD,
$ JELEMLIST,NELEMS,JMATYP,JGVBLOCK)
FLVMAG = ARRAY(1)
SURFV = TRCON*FPEEQ*FPOROSITY*FLVMAG
if(LNODETYPE.EQ.3)SURFV=SURFV*1.41421356D0
ULOCAL(NDIM) = ULOCAL(NDIM)-SURFV
C SHARE OF ELEMENT CONSUMED IN NEXT INCREMENT<<<<<<<<<<<<<<<<<<<<<<<<<<<<HERE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
PELEM = DTIME * SURFV / CHARLENGTH
PNEWDT1 = 0.0D0
IF (PELEM.GT.ELINC.AND.SURFV.GT.0.0D0) THEN
PNEWDT1 = CHARLENGTH * ELINC / SURFV
IF (PNEWDT1.LT.DTIME) THEN
WRITE (7,*) 'CHANGING TIME INCREMENT FROM ',DTIME
PNEWDT = PNEWDT1
WRITE (7,*) 'TO ',PNEWDT
WRITE (7,*) 'BASED ON NODE ',LOCNUM
PNEWDT = PNEWDT / DTIME
END IF
END IF
LSMOOTH = 1
END IF
return
end