ProductsAbaqus/Standard Wave kinematic dataFor Abaqus/Aqua applications four utility routines—GETWAVE, GETWAVEVEL, GETWINDVEL, and GETCURRVEL—are provided to access the fluid kinematic data. These routines are used from within user subroutine UEL and are discussed in detail in Obtaining wave kinematic data in an Abaqus/Aqua analysis. User subroutine interfaceSUBROUTINE UEL(RHS,AMATRX,SVARS,ENERGY,NDOFEL,NRHS,NSVARS, 1 PROPS,NPROPS,COORDS,MCRD,NNODE,U,DU,V,A,JTYPE,TIME,DTIME, 2 KSTEP,KINC,JELEM,PARAMS,NDLOAD,JDLTYP,ADLMAG,PREDEF,NPREDF, 3 LFLAGS,MLVARX,DDLMAG,MDLOAD,PNEWDT,JPROPS,NJPROP,PERIOD) C INCLUDE 'ABA_PARAM.INC' C DIMENSION RHS(MLVARX,*),AMATRX(NDOFEL,NDOFEL),PROPS(*), 1 SVARS(*),ENERGY(8),COORDS(MCRD,NNODE),U(NDOFEL), 2 DU(MLVARX,*),V(NDOFEL),A(NDOFEL),TIME(2),PARAMS(*), 3 JDLTYP(MDLOAD,*),ADLMAG(MDLOAD,*),DDLMAG(MDLOAD,*), 4 PREDEF(2,NPREDF,NNODE),LFLAGS(*),JPROPS(*) user coding to define RHS, AMATRX, SVARS, ENERGY, and PNEWDT RETURN END Variables to be definedThese arrays depend on the value of the LFLAGS array.
Variables that can be updated
Variables passed in for information
UEL conventionsThe solution variables (displacement, velocity, etc.) are arranged on a node/degree of freedom basis. The degrees of freedom of the first node are first, followed by the degrees of freedom of the second node, etc. Usage with general nonlinear proceduresThe values of uN (and, in direct-integration dynamic steps, ˙uN and ¨uN) enter user subroutine UEL as their latest approximations at the end of the time increment; that is, at time t+Δt. The values of Hα enter the subroutine as their values at the beginning of the time increment; that is, at time t. It is your responsibility to define suitable time integration schemes to update Hα. To ensure accurate, stable integration of internal state variables, you can control the time incrementation via PNEWDT. The values of pβ enter the subroutine as the values of the total load magnitude for the βth distributed load at the end of the increment. Increments in the load magnitudes are also available. In the following descriptions of the user element's requirements, it will be assumed that LFLAGS(3)=1 unless otherwise stated. Static analysis (LFLAGS(1)=1,2)
Modified Riks static analysis (LFLAGS(1)=1) and (NRHS=2)
Direct-integration dynamic analysis (LFLAGS(1)=11, 12)
Subspace-based dynamic analysis (LFLAGS(1)=13)
Quasi-static analysis (LFLAGS(1)=21)
Steady-state heat transfer analysis (LFLAGS(1)=31)
Transient heat transfer analysis (Δθmax) (LFLAGS(1)=32, 33)
Geostatic analysis (LFLAGS(1)=61)
Steady-state coupled pore fluid diffusion/stress analysis (LFLAGS(1)=62, 63)
Transient coupled pore fluid diffusion/stress (consolidation) analysis (Δuwmax) (LFLAGS(1)=64, 65)
Steady-state fully coupled thermal-stress analysis (LFLAGS(1)=71)
Transient fully coupled thermal-stress analysis (Δθmax) (LFLAGS(1)=72,73)
Steady-state coupled thermal-electrical analysis (LFLAGS(1)=75)
Transient coupled thermal-electrical analysis (Δθmax) (LFLAGS(1)=76, 77)
Steady-state coupled thermal-electrical-structural analysis (LFLAGS(1)=102)
Transient coupled thermal-electrical-structural analysis (Δθmax) (LFLAGS(1)=103,104)
Usage with linear perturbation proceduresGeneral and perturbation procedures describes the linear perturbation capabilities in Abaqus/Standard. Here, base state values of variables will be denoted by , , etc. Perturbation values will be denoted by , , etc. Abaqus/Standard will not call user subroutine UEL for the eigenvalue buckling prediction procedure. For response spectrum, random response, transient modal dynamic, and mode-based steady-state dynamic procedures, user subroutine UEL is called only in a prior natural frequency extraction analysis, and the mass and stiffness contributions are taken into account during modal superposition. For direct-solution and mode-based steady-state dynamic, complex eigenvalue extraction, matrix generation, and substructure generation procedures, Abaqus/Standard will call user subroutine UEL, but only mass and stiffness contributions will be taken into account. The damping contributions will be neglected. Static analysis (LFLAGS(1)=1, 2)
Eigenfrequency extraction analysis (LFLAGS(1)=41)
Example: Structural and heat transfer user elementBoth a structural and a heat transfer user element have been created to demonstrate the usage of subroutine UEL. These user-defined elements are applied in a number of analyses. The following excerpt is from the verification problem that invokes the structural user element in an implicit dynamics procedure: USER ELEMENT, NODES=2, TYPE=U1, PROPERTIES=4, COORDINATES=3, VARIABLES=12 1, 2, 3 ELEMENT, TYPE=U1 101, 101, 102 ELGEN, ELSET=UTRUSS 101, 5 UEL PROPERTY, ELSET=UTRUSS 0.002, 2.1E11, 0.3, 7200. The user element consists of two nodes that are assumed to lie parallel to the x-axis. The element behaves like a linear truss element. The supplied element properties are the cross-sectional area, Young's modulus, Poisson's ratio, and density, respectively. The next excerpt shows the listing of the subroutine. The user subroutine has been coded for use in a perturbation static analysis; general static analysis, including Riks analysis with load incrementation defined by the subroutine; eigenfrequency extraction analysis; and direct-integration dynamic analysis. The names of the verification input files associated with the subroutine and these procedures can be found in UEL. The subroutine performs all calculations required for the relevant procedures as described earlier in this section. The flags passed in through the LFLAGS array are used to associate particular calculations with solution procedures. During a modified Riks analysis all force loads must be passed into UEL by means of distributed load definitions such that they are available for the definition of incremental load vectors; the load keys Un and UnNU must be used properly, as discussed in User-defined elements. The coding in subroutine UEL must distribute the loads into consistent equivalent nodal forces and account for them in the calculation of the RHS and ENERGY arrays. SUBROUTINE UEL(RHS,AMATRX,SVARS,ENERGY,NDOFEL,NRHS,NSVARS, 1 PROPS,NPROPS,COORDS,MCRD,NNODE,U,DU,V,A,JTYPE,TIME, 2 DTIME,KSTEP,KINC,JELEM,PARAMS,NDLOAD,JDLTYP,ADLMAG, 3 PREDEF,NPREDF,LFLAGS,MLVARX,DDLMAG,MDLOAD,PNEWDT, 4 JPROPS,NJPROP,PERIOD) C C#include <cdp.cmn> INCLUDE 'ABA_PARAM.INC' PARAMETER ( ZERO = 0.D0, HALF = 0.5D0, ONE = 1.D0) PARAMETER ( alfdyn = 0.1D0, betdyn=0.02d0, s=0.0D0) C DIMENSION RHS(MLVARX,*),AMATRX(NDOFEL,NDOFEL), 1 SVARS(NSVARS),ENERGY(8),PROPS(*),COORDS(MCRD,NNODE), 2 U(NDOFEL),DU(MLVARX,*),V(NDOFEL),A(NDOFEL),TIME(2), 3 PARAMS(3),JDLTYP(MDLOAD,*),ADLMAG(MDLOAD,*), 4 DDLMAG(MDLOAD,*),PREDEF(2,NPREDF,NNODE),LFLAGS(*), 5 JPROPS(*) DIMENSION SRESID(6) C C UEL SUBROUTINE FOR A HORIZONTAL TRUSS ELEMENT C C SRESID - stores the static residual at time t+dt C SVARS - In 1-6, contains the static residual at time t C upon entering the routine. SRESID is copied to C SVARS(1-6) after the dynamic residual has been C calculated. C - For half-increment residual calculations: In 7-12, C contains the static residual at the beginning C of the previous increment. SVARS(1-6) are copied C into SVARS(7-12) after the dynamic residual has C been calculated. C AREA = PROPS(1) E = PROPS(2) ANU = PROPS(3) RHO = PROPS(4) C ALEN = ABS(COORDS(1,2)-COORDS(1,1)) AK = AREA*E/ALEN AM = HALF*AREA*RHO*ALEN C DO K1 = 1, NDOFEL SRESID(K1) = ZERO DO KRHS = 1, NRHS RHS(K1,KRHS) = ZERO END DO DO K2 = 1, NDOFEL AMATRX(K2,K1) = ZERO END DO END DO C IF (LFLAGS(3).EQ.1) THEN C Static or nonlinear dynamic analysis C Normal incrementation IF (LFLAGS(1).EQ.1 .OR. LFLAGS(1).EQ.2) THEN C *STATIC AMATRX(1,1) = AK AMATRX(4,4) = AK AMATRX(1,4) = -AK AMATRX(4,1) = -AK IF (LFLAGS(4).NE.0) THEN FORCE = AK*(U(4)-U(1)) DFORCE = AK*(DU(4,1)-DU(1,1)) SRESID(1) = -DFORCE SRESID(4) = DFORCE RHS(1,1) = RHS(1,1)-SRESID(1) RHS(4,1) = RHS(4,1)-SRESID(4) ENERGY(2) = HALF*FORCE*(DU(4,1)-DU(1,1)) * + HALF*DFORCE*(U(4)-U(1)) * + HALF*DFORCE*(DU(4,1)-DU(1,1)) ELSE FORCE = AK*(U(4)-U(1)) SRESID(1) = -FORCE SRESID(4) = FORCE RHS(1,1) = RHS(1,1)-SRESID(1) RHS(4,1) = RHS(4,1)-SRESID(4) DO KDLOAD = 1, NDLOAD IF (JDLTYP(KDLOAD,1).EQ.1001) THEN RHS(4,1) = RHS(4,1)+ADLMAG(KDLOAD,1) ENERGY(8) = ENERGY(8)+(ADLMAG(KDLOAD,1) * - HALF*DDLMAG(KDLOAD,1))*DU(4,1) IF (NRHS.EQ.2) THEN C Riks RHS(4,2) = RHS(4,2)+DDLMAG(KDLOAD,1) END IF END IF END DO ENERGY(2) = HALF*FORCE*(U(4)-U(1)) END IF ELSE IF (LFLAGS(1).EQ.11 .OR. LFLAGS(1).EQ.12) THEN C *DYNAMIC ALPHA = PARAMS(1) BETA = PARAMS(2) GAMMA = PARAMS(3) C DADU = ONE/(BETA*DTIME**2) DVDU = GAMMA/(BETA*DTIME) c dynt6 = GAMMA/(BETA*DTIME) dynt4 = ONE + ALPHA C C LHS operator and RHS: Mass related terms DO K1 = 1, NDOFEL AMATRX(K1,K1) = AM*DADU + dynt6*dynt4*am*alfdyn RHS(K1,1) = RHS(K1,1)-AM*A(K1) END DO C C LHS operator: stiffness related terms AMATRX(1,1) = AMATRX(1,1)+(ONE+ALPHA)*AK+dynt6*dynt4*betdyn*AK AMATRX(4,4) = AMATRX(4,4)+(ONE+ALPHA)*AK+dynt6*dynt4*betdyn*AK AMATRX(1,4) = AMATRX(1,4)-(ONE+ALPHA)*AK-dynt6*dynt4*betdyn*AK AMATRX(4,1) = AMATRX(4,1)-(ONE+ALPHA)*AK-dynt6*dynt4*betdyn*AK C Force FORCE = AK*(U(4)-U(1))+(betdyn*AK)*(v(4)-v(1)) SRESID(1) = -FORCE+alfdyn*AM*v(1) SRESID(4) = FORCE+alfdyn*AM*v(4) C RHS due to stiffnes and damping RHS(1,1) = RHS(1,1) - * ((ONE+ALPHA)*SRESID(1)-ALPHA*SVARS(1)) RHS(4,1) = RHS(4,1) - * ((ONE+ALPHA)*SRESID(4)-ALPHA*SVARS(4)) ENERGY(1) = ZERO DO K1 = 1, NDOFEL SVARS(K1+6) = SVARS(k1) SVARS(K1) = SRESID(K1) ENERGY(1) = ENERGY(1)+HALF*V(K1)*AM*V(K1) END DO C ENERGY(2) = HALF*AK*(U(4)-U(1))*(U(4)-U(1)) END IF C ELSE IF (LFLAGS(3).EQ.2) THEN C Stiffness matrix requested DO K1 = 1, NDOFEL AMATRX(K1,K1) = AK END DO AMATRX(1,4) = -AK AMATRX(4,1) = -AK ELSE IF (LFLAGS(3).EQ.3) THEN C Damping requested if(lflags(7).eq.1) then C Viscous damping matrix requested C Mass matrix diagonal only DO K1 = 1, NDOFEL AMATRX(K1,K1) = betdyn*AK+alfdyn*AM END DO AMATRX(1,4) = -betdyn*AK AMATRX(4,1) = -betdyn*AK else if(lflags(7).eq.2) then C Structural damping matrix requested DO K1 = 1, NDOFEL AMATRX(K1,K1) = s*AK END DO AMATRX(1,4) = -s*AK AMATRX(4,1) = -s*AK end if ELSE IF (LFLAGS(3).EQ.4) THEN C Mass matrix DO K1 = 1, NDOFEL AMATRX(K1,K1) = AM END DO ELSE IF (LFLAGS(3).EQ.5) THEN C Half-increment residual calculation ALPHA = PARAMS(1) FORCE = AK*(U(4)-U(1)) SRESID(1) = -FORCE SRESID(4) = FORCE RHS(1,1) = RHS(1,1)-AM*A(1)-(ONE+ALPHA)*SRESID(1) * + HALF*ALPHA*( SVARS(1)+SVARS(7) ) RHS(4,1) = RHS(4,1)-AM*A(4)-(ONE+ALPHA)*SRESID(4) * + HALF*ALPHA*( SVARS(4)+SVARS(10) ) ELSE IF (LFLAGS(3).EQ.6) THEN C Initial acceleration calculation DO K1 = 1, NDOFEL AMATRX(K1,K1) = AM END DO FORCE = AK*(U(4)-U(1)) SRESID(1) = -FORCE SRESID(4) = FORCE RHS(1,1) = RHS(1,1)-SRESID(1) RHS(4,1) = RHS(4,1)-SRESID(4) ENERGY(1) = ZERO DO K1 = 1, NDOFEL SVARS(K1) = SRESID(K1) ENERGY(1) = ENERGY(1)+HALF*V(K1)*AM*V(K1) END DO ENERGY(2) = HALF*FORCE*(U(4)-U(1)) ELSE IF (LFLAGS(3).EQ.100) THEN C Output for perturbations IF (LFLAGS(1).EQ.1 .OR. LFLAGS(1).EQ.2) THEN C *STATIC FORCE = AK*(U(4)-U(1)) DFORCE = AK*(DU(4,1)-DU(1,1)) SRESID(1) = -DFORCE SRESID(4) = DFORCE RHS(1,1) = RHS(1,1)-SRESID(1) RHS(4,1) = RHS(4,1)-SRESID(4) ENERGY(2) = HALF*FORCE*(DU(4,1)-DU(1,1)) * + HALF*DFORCE*(U(4)-U(1)) * + HALF*DFORCE*(DU(4,1)-DU(1,1)) DO KVAR = 1, NSVARS SVARS(KVAR) = ZERO END DO SVARS(1) = RHS(1,1) SVARS(4) = RHS(4,1) ELSE IF (LFLAGS(1).EQ.41.or.LFLAGS(1).EQ.47) THEN C *FREQUENCY or *COMPLEX FREQUENCY DO KRHS = 1, NRHS DFORCE = AK*(DU(4,KRHS)-DU(1,KRHS)) SRESID(1) = -DFORCE SRESID(4) = DFORCE RHS(1,KRHS) = RHS(1,KRHS)-SRESID(1) RHS(4,KRHS) = RHS(4,KRHS)-SRESID(4) END DO DO KVAR = 1, NSVARS SVARS(KVAR) = ZERO END DO SVARS(1) = RHS(1,1) SVARS(4) = RHS(4,1) END IF END IF C RETURN END |