Beruflich Dokumente
Kultur Dokumente
Main Index
Corporate
MSC.Software Corporation
2 MacArthur Place
Santa Ana, CA 92707
Telephone: (800) 345-2078
FAX: (714) 784-4056
Europe
MSC.Software GmbH
Am Moosfeld 13
81829 Munich
GERMANY
Telephone: (49) (89) 43 19 87 0
Fax: (49) (89) 43 61 71 6
Asia Pacific
MSC.Software Japan Ltd.
Shinjuku First West 8F
23-7 Nishi Shinjuku
1-Chome, Shinjuku-Ku
Tokyo 160-0023, JAPAN
Telephone: (81) (3)-6911-1200
Fax: (81) (3)-6911-1201
Worldwide Web
www.mscsoftware.com
User Documentation: Copyright © 2008 MSC.Software Corporation. Printed in U.S.A. All Rights Reserved.
This document, and the software described in it, are furnished under license and may be used or copied only in accordance with the
terms of such license. Any reproduction or distribution of this document, in whole or in part, without the prior written authorization of
MSC.Software Corporation is strictly prohibited.
MSC.Software Corporation reserves the right to make changes in specifications and other information contained in this document
without prior notice. The concepts, methods, and examples presented in this document are for illustrative and educational purposes
only and are not intended to be exhaustive or to apply to any particular engineering problem or design. THIS DOCUMENT IS
PROVIDED ON AN “AS-IS” BASIS AND ALL EXPRESS AND IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE
DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE LEGALLY INVALID.
MSC.Software logo, MSC, MSC., MD Nastran, Adams, Dytran, Marc, Mentat, and Patran are trademarks or registered trademarks of
MSC.Software Corporation or its subsidiaries in the United States and/or other countries.
NASTRAN is a registered trademark of NASA. Python is a trademark of the Python Software Foundation. LS-DYNA is a trademark of
Livermore Software Technology Corporation. All other trademarks are the property of their respective owners.
This software may contain certain third-party software that is protected by copyright and licensed from MSC.Software suppliers.
METIS is copyrighted by the regents of the University of Minnesota. HP MPI is developed by Hewlett-Packard Development Company,
L.P. MS MPI is developed by Microsoft Corporation. PCGLSS 6.0, copyright © 1992-2005 Computational Applications and System
Integration Inc. MPICH Copyright 1993, University of Chicago and Mississippi State University. MPICH2 copyright © 2002, University
of Chicago.
Use, duplication, or disclosure by the U.S. Government is subject to restrictions as set forth in FAR 12.212 (Commercial Computer
Software) and DFARS 227.7202 (Commercial Computer Software and Commercial Computer Software Documentation),
as applicable.
MA*V2008r1*Z*Z*Z*DC-VOL-D
Main Index
Contents
Marc Volume D: User Subroutines and Special Routines
Contents
1 Introduction
Common Blocks Description, 14
Note on Double Precision, 14
Format, 15
Element Result Database Utility Routine, 17
Example, 19
Nodal Results Database Utility Routine, 19
Table Evaluation Routine, 21
MATDAT Common Block, 23
CONCOM Common Block, 29
ELMCOM Common Block, 36
BCLABEL Common Block, 40
Determining the Elements or Nodes in a Set, 43
Internal Data Structure, 43
Element Data, 44
Element Order, 45
Nodal Vectors, 45
Main Index
Main Index
4 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Contents 5
Main Index
Main Index
6 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Contents 7
References, 337
Main Index
Main Index
8 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Contents 9
Main Index
Main Index
10 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Contents 11
Main Index
Main Index
12 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 1 Introduction
1 Introduction
Main Index
Main Index
14 Marc Volume D: User Subroutines and Special Routines
In Marc, the user subroutine feature constitutes one of the real strengths of Marc,
allowing the user to substitute his own subroutines for several existing in Marc. This
feature provides the user with a wide latitude for solving nonstandard problems.
These routines are easily inserted into Marc. When such a routine is supplied, the
user is simply replacing the one which exists in Marc program using appropriate
control setup. A description of each of the available user subroutines is given in this
manual. In addition, discussions of special routines are also included.
Note: The reading of data is not recommended in most of the user subroutines since many of
these routines are in the recycling loop for nonlinear analysis, and hence, you cannot
know how many times per increment the routine is called.
Main Index
Main Index
CHAPTER 1 15
Introduction
Format
The following quantities are available in all user subroutines:
TIME AT BEGINNING OF INCREMENT:CPTIM
TIME INCREMENT:TIMINC
AVAILABLE THROUGH
include ’creeps’
INCREMENT NUMBER: INC
SUBINCREMENT NUMBER: INCSUB
AVAILABLE THROUGH
include ’concom’
Note: During the output phase, CPTIM has been updated to the time at the end of the
increment and TIMINC has been set to zero if the total time for an increment or a series
of increments has been reached. If the total time has not yet been reached, TIMINC has
been set to the time increment of the next increment.
NUMBER OF ELEMENTS IN MESH: NUMEL
NUMBER OF NODES IN MESH: NUMNP
MAXIMUM NUMBER OF DEGREES OF FREEDOM PER NODE: NDEG
MAXIMUM NUMBER OF COORDINATE DIRECTIONS: NCRD
AVAILABLE THROUGH
include ’dimen’
Main Index
Main Index
16 Marc Volume D: User Subroutines and Special Routines
Note: This is only available after the first stiffness matrix assembly.
To obtain the array of internal node numbers of an element, use variable LM:
include ’blnk’
Main Index
Main Index
CHAPTER 1 17
Introduction
To determine the external (LEXT) node number from the internal (LINT) node
number, use the following function call:
LEXT = NODEXT(LINT)
To determine the internal element number MINT from the user (external) element
number MEXT, use the following function call:
MINT = IELINT(MEXT)
To determine the user (external) element number MEXT from the internal number
MINT, use the following function call:
MEXT = IELEXT(MINT)
To determine the coordinate of internal node number LINT and place these
coordinates in array CCNODE, use the following procedure:
include ’dimen’
include ’spacevec’
include ’strvar’
DIMENSION CCNODE(12)
JRDPRE = 0
CALL VECFTC (CCNODE, XORD_D, NCRDMX, NCRD, LINT,JRDPRE, 2, 1)
To determine the total displacement of internal node number LINT and place this
data in array DDNODE, use the following procedure:
include ’dimen’
include ’spacevec’
include ’strvar’
DIMENSION DDNODE(12)
JRDPRE = 0
CALL VECFTC (DDNODE, DSXTS_D, NDEGMX, NDEG, LINT, JRDPRE, 2, 5)
Main Index
Main Index
18 Marc Volume D: User Subroutines and Special Routines
where:
ICODE is the standard post code.
M is the user’s element number.
NN is the integration point number.
KCUS is the internal layer number.
VAR is the current value(s) of the items requested.
Note: If the user is requesting a tensor, he must make VAR a local array in his user subroutine.
The values of ICODE are given in Marc Volume C: Program Input in the model
definition section in the POST option. This routine does not support negative post
codes associated with the PLOTV user subroutine. If the ELMVAR utility routine is
called from a subroutine within the element assembly or stress recovery stage, the
values of VAR are the current ones for this iteration. They are not necessarily the
converged values.
ELMVAR can be called from user subroutines:
Table 1-1 Element Based User Subroutines
ANELAS FORCEM SINCER UELASTOMER UMDCON USIGMA
ANEXP GENSTR TENSOF UENERG UMOONY USPCHT
ANKOND HOOKLW TRSFAC UEPS UMU UVOIDN
ANPLAS HOOKVI UACTIVE UFAIL UNEWTN UVOIDRT
ASSOC HYPELA2 UACOUS UFILM UOGDEN UVSCPL
CRPLAW INITSV UADAP UFOUND UPERM UVTCOE
CRPVIS INTCRD UARRBO UGENT UPOWDR UVTCON
CUPFLX NASSOC UCOMPL UFINITE URESTR UWELDFLUX
ELEVAR NEWSV UCRACK UHTCOE URPFLO VSWELL
ELEVEC ORIENT UDAMAG UHTCON USELEM WKSLP
FILM PLOTV UELDAM UINSTR USHELL YIEL
FLUX REBAR UELOOP UMDCOE USHRET
Main Index
Main Index
CHAPTER 1 19
Introduction
Example
Suppose the user would like the plastic strain tensor from within the UADAP user
subroutine for a user-defined adaptive meshing criteria. In this example, there are
no shell elements, so KCUS=1 and the number of integration points per element = 4,
so INTEL=4. The plastic strain tensor is code 321. The plastic strains are stored in a
local array EPTEN. The user could create the following routine:
SUBROUTINE UADAP (M,XORD,DSXT,NCRDMX,NDEGMX,LM,NNODE,USER)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRDMX, *),DSXT(NDEGMX, *),LM(*)
DIMENSION EPTEN (6,28)
KCUS=1
INTEL=4
ICODE=321
DO NN=1,INTEL
CALL ELMVAR(ICODE,M,NN,KCUS,EPTEN(1,NN))
ENDDO
…
RETURN
END
Main Index
Main Index
20 Marc Volume D: User Subroutines and Special Routines
Input:
NODEID is the user node number.
ICOD 0 = Coordinates 25 = Reaction mass flux
1 = Displacement 26 = Bearing pressure
2 = Rotation 27 = Bearing force
3 = External force 28 = Velocity
4 = External moment 29 = Rotational velocity
5 = Reaction force 30 = Acceleration
6 = Reaction moment 31 = Rotational acceleration
7 = Fluid velocity 32 = Modal mass
8 = Fluid pressure 33 = Rotational modal mass
9 = External fluid force 34 = Contact normal stress*
ICOD 10 = Reaction fluid force 35 = Contact normal force*
(continued) 11 = Sound pressure 36 = Contact friction stress*
12 = External sound source 37 = Contact friction force*
13 = Reaction sound source 38 = Contact status*
14 = Temperature 39 = Touched contact bodies*
15 = External heat flux 40 = Not available
16 = Reaction heat flux 41 = Not available
17 = Electric potential 42 = Not available
18 = External electric charge 43 = Not available
19 = Reaction electric charge 44 = Not available
20 = Magnetic potential 45 = Not available
21 = External electric current 46 = Tying force**
22 = Reaction electric current 47 = Coulomb force
23 = Pore pressure 48 = Tying moment**
24 = External mass flux
Output:
VALNO*** is the current value of the item requested.
NQNCOMP is the number of components returned.
* Not available when NODVAR is called from within a contact-related user subroutine;
for example, UFRIC. Preferably use NODVAR for contact data during the output
phase of an increment.
** Only available if the corresponding nodal post code has been requested.
*** If a vector is requested, VALNO should be an array large enough to hold all
NQNCOMP components of the vector. When a complex vector is requested, VALNO
will contain first all real components followed by all imaginary components of the
vector. NQCOMP is then the sum of real and imaginary components and VALNO
should be a noncomplex vector.
Main Index
Main Index
CHAPTER 1 21
Introduction
See the UPSTNO user subroutine for an example of how this utility can be used.
Main Index
Main Index
22 Marc Volume D: User Subroutines and Special Routines
subroutine ucrack(scrack,esoft,ecrush,ecp,dt,dtdl,n,nn,
* kcus,inc,ndi,nshear,shrfac)
include '../common/implicit'
dimension ecp(*),dt(*),dtdl(*), kcus(2)
c
c this routine is called at each integration point for those
c elements that have activated cracking
c
c scrack - user defined cracking stress
c esoft - user defined strain softening modulus
c ecrush - user defined crushing strain
c ecp - array of cracking strains at this integration point
c dt - array of state variables at the begining of increment
c dtdl - array of increment of state variables
c n - user element number
c nn - integration point number
c kcus(1) - user layer number
c kcus(2) - internal layer number
c inc - increment number
c ndi - number of direct components of stress or strain
c nshear - number of shear components of stress or strain
c shrfac - user defined shear retention factor
c
c Define reference value (REFVAL) of Young's modulus = 30.e6 psi
c In input file for this material, table number 1 was associated
c with Young's modulus of this material, so set IDTABLE=1
c
refval=30.d6
idtable=1
call tabva2(refval,evalue,idtable,0,0)
c
c now set the softening modulus to be 10% of the Young's modulus at
c the current temperature
c
Main Index
Main Index
CHAPTER 1 23
Introduction
esoft=0.1d0*evalue
c
return
end
Main Index
Main Index
24 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 25
Introduction
In addition to array rprops, an iprops integer array is available in the ANELAS and
HOOKLW user subroutines. The entries of this array have the following meaning
(unless otherwise indicated, if the entry has a value of zero, it is false, and a value
of one indicates true):
Main Index
Main Index
26 Marc Volume D: User Subroutines and Special Routines
iprops(1) element control flag for anisotropic material behavior defined via
the user subroutines
iprops(2) element control flag for non-isotropic material behavior
iprops(3) not used
iprops(4) element control flag indicating that the current element is involved
in a shell to brick tying
iprops(5) element control flag indicating that the current element is a
composite element
iprops(6) element control flag indicating that cracking is allowed
iprops(7) not used
iprops(8) element control flag for damage material model
iprops(9) element control flag for anisotropic material behavior defined via
input file
iprops(10) element control flag for generalized plasticity model
iprops(11) element control flag indicating that the current element is a
Herrmann-type element:
0: conventional elements;
1: higher-order Herrmann elements;
2: lower-order Herrmann elements
iprops(12) number of integration points per element
iprops(13) number of inertia degrees of freedom; used for mass
matrix calculation
iprops(14) number of integration points for distributed (edge or surface)
load integration
iprops(15) element control flag for curvilinear coordinates; used for element
types 4, 8 and 24
iprops(16) element control flag for hypoelastic material behavior
iprops(17) element control flag for thermal rheologically simple
material behavior
iprops(18) element control flag indicating that the element is a shell or beam
with layer integration
iprops(19) integration point number of centroid
iprops(20) element control flag for isotropic material
iprops(21) internal element type of current element
Main Index
Main Index
CHAPTER 1 27
Introduction
iprops(22) Updated Lagrange element class type (< 0 implies that Updated
Lagrange is not supported for the current element)
iprops(23) Kelvin viscoelastic flag (global variable defined via
CREEP option)
iprops(24) element control flag for viscoelasticity
iprops(25) element control flag for Cam-Clay plasticity model
iprops(26) element control flag for powder material model
iprops(27) element control flag for ORNL material law
iprops(28) element control flag for indicating type of ORNL
0: normal ORNL;
1: 2-1/4 Cr-Mo ORNL;
2: reversed plasticity ORNL;
3: full alpha reset ORNL
iprops(29) element control flag for Ogden material model
iprops(30) element control flag for soil material model
iprops(31) user element type of current element
iprops(32) element control flag for implicit creep material model
iprops(33) not used
iprops(34) element control flag for kinematic hardening
1: conventional kinematic hardening;
2: combined isotropic-kinematic hardening;
3: Chaboche kinematic hardening
iprops(35) element control flag for axisymmetric elements with bending
iprops(36) element control variable giving the class of the current element
0: pipe bend 9: Fourier
1: truss 10: axisymmetric with twist
2: 3-D shells 11: 2-D with layer integration
4: plane stress 12: open section beams
5: plane strain 13: closed section beams
6: generalized plane strain 14: membrane or shear panel
7: axisymmetric 15: gap element
8: brick
iprops(37) element control flag for heat transfer elements
iprops(38) element integration control flag
0: most conventional elements
1: reduced integration elements
2: elements without integration (12, 31, 68, 51 and 97)
Main Index
Main Index
28 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 29
Introduction
Main Index
Main Index
30 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 31
Introduction
Main Index
Main Index
32 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 33
Introduction
Main Index
Main Index
34 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 35
Introduction
Main Index
Main Index
36 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 37
Introduction
Main Index
Main Index
38 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 39
Introduction
Main Index
Main Index
40 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 41
Introduction
FORCDT USINC
FLUX INITPO
NEWSV NEWPO
UFILM INITSV
UFOUND USINKPT
USESTR
This information can be obtained by including the common block BCLABEL in the
user subroutine. Then one obtains:
LDCASENAME loadcase name
BCNAME boundary condition name
Both are character variables of length 32. For example, if a pressure on different
parts of the model is different and dependent on the loadcase, and if the boundary
condition is applied to a curve, adaptive meshing is used and the element numbers
are unknown. Given boundary condition names load 1 and load 2, and loadcases
names early and late, one could implement:
subroutine forcem(press,th1,th2,nn,n)
include '../common/implicit'
include '../common/bclabel'
common/lpres3/prnorm(3)
dimension n(10)
c* * * * * *
c
c defined non-uniformed distributed force on an element.
c
c press distributed load increment magnitude
c if follower force then give total magnitude
c th1 coordinate
c th2 coordinate
c nn integration point number
c n(1) user element number
c n(2) parameter identifying the type of load
c n(3) is the integration point number
c n(4) not used
Main Index
Main Index
42 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 1 43
Introduction
Main Index
Main Index
44 Marc Volume D: User Subroutines and Special Routines
Element Data
As of the MSC.Marc 2005 r3 release, the storage of element data like stresses,
strains and temperatures has changed. In previous versions, this piece of data was
stored in the so-called general memory. The amount of memory allocated per
element (stored in the variable nelsto as the number of integer words) was then the
same for all elements. This amount was based upon the maximum over all elements
of number of integration points, number of layers and similar items. In the new
scheme, the elements are internally divided into groups, where the allocation for the
elements in each group is the same but it can vary between groups. Now, the
allocation is based upon the actual number of integration points and layers etc. and
this can lead to substantial savings in memory usage for models using different
types of elements. The storage is done outside of the general memory. This is
reflected in the memory summary printout in that the element data portion is now
in the lower part under "allocated separately". Instead of accessing the data in the
array for general memory, vars, it is now accessed in the array varselem. The
element loops in Marc are now done as one loop over element groups and then one
loop over all elements in the group. This has no implication for user subroutines that
are called from within an element loop, except that varselem must be used instead
of vars. New element loops must be performed in the new style. We take, as an
example, a hypothetical user subroutine to find the largest coordinate of the
integration points. These are stored using the pointer icrxpt. In the new scheme this
can be done as
include 'array4'
include 'cdominfo'
include 'dimen'
include 'elemdata'
include 'elmcom'
include 'heat'
include 'space'
coordmax=-1.0e+20
do igroup=1,nelgroups
call setup_elgroups(igroup,numel_group)
do iel_g=1,numel_group
mm=ielgroup_elnum(iel_g)
ityp=ieltype(mm)
call setel(mm)
do intp=1,jintel
call wrat3n(varselem(ielsbn),n,iel_g,igroup,0)
lofr=(n-1)*nelstr
la1 = icrxpt + (intp-1)*ncrdmx + lofr
do i = 1, ncrd
coord = varselem(la1)
Main Index
Main Index
CHAPTER 1 45
Introduction
la1 = la1 + 1
if (coord.gt.coordmax) coordmax=coord
enddo
enddo
enddo
enddo
if (nprocd.gt.0) call domflag(idummy,coordmax,0,1,0,1)
write(6,*) 'max coordinate:',coordmax
Element Order
One of the consequences of the restructured data is that the elements are no longer
evaluated in sequential order based upon the user element numbering. Some users
would initialize local storage based upon the first element number and perform
other operations, such as calculate based upon the last element number. This was
not a good idea when using single input DDM in the past and is no longer valid for
any analysis in the 2005r3 or subsequent releases. Initialization of data should be
performed in the UGBINC or UBGITR user subroutine, and accumulation type
operations should be done in the UEDINC user subroutine.
Nodal Vectors
The storage scheme of most nodal vectors like coordinates, displacements, and
reaction forces were changed in the MSC.Marc 2005 version. User subroutines
using the old storage scheme need to be modified for the 2005 and subsequent
versions. In the old scheme, the vectors were stored in the so-called general
Main Index
Main Index
46 Marc Volume D: User Subroutines and Special Routines
memory in an array called vars (defined in common block space). For instance, to
access the nodal coordinates, one would use the variable ixord, which is a pointer
in the array vars. The x coordinate of node 1 would be located at vars(ixord), the
y coordinate at vars(ixord+1), etc. In the 2005 and subsequent versions, these nodal
vectors are allocated separately. The nodal coordinates are stored in the array xord_d
available in common block spacevec. The x coordinate of node 1 is now at
xord_d(1).
It is recommended that the nodvar utility routine be used for quantities available
there. However, existing user subroutines may access other quantities. Table 1-1
lists some of the nodal vectors that have been changed.
Many of the arrays in this table come in different variants for different passes in
coupled analysis. For instance, idsxts (s for structural) corresponds to dsxts_d and
is similar for other quantities. However, the list is not complete as several other
internally used vectors are also in the new storage scheme. The convention is
simple, remove the trailing i and append the _d. The complete list is in
common/spacevec. Some integer quantities are in common/spaceivec. Two arrays that
are likely to occur in older user subroutines are the ones used for converting
between internal and user node and element numbers. Code like
next=ints(inoids+nint-1)
Main Index
Main Index
CHAPTER 1 47
Introduction
iel=ints(ielids+ielint-1)
can be converted to
next=inoids_d(nint)
iel=ielids_d(ielint)
Main Index
Main Index
48 Marc Volume D: User Subroutines and Special Routines
New code:
include ’spacevec’
include ’dimen’
do i=1,numnp
write(6,*) i,(xord_d((i-1)*ncrd+j),j=1,ncrd)
enddo
Main Index
Main Index
Chapter 2 User-defined Loading, Boundary Conditions, and State Variables User
Subroutines List
2 User-defined Loading,
Boundary Conditions, and
State Variables User
Subroutines List
CREDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
CUPFLX .......................................................... 72
DIGEOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
FILM . . . . ......................................................... 92
FLOW . . . ......................................................... 94
FLUX . . . ......................................................... 66
FORCDF . ......................................................... 88
FORCDT . ......................................................... 78
FORCEM ......................................................... 61
Main Index
Main Index
50 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 51
User-defined Loading, Boundary Conditions, and State Variables User Subroutines List
UMDCOE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
UMDCON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
UMDNRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
UNORST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
UOBJFN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
UPRFILM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
UQVECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
UREACB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
USDATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
USINC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
USINKPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
USSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
UTIMESTEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
UTIMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
UVELOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
UVTCOE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
UVTCON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
UVTNRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
UWEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
UWELDFLUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
UWELDPATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Main Index
Main Index
52 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 2 User-defined Loading, Boundary Conditions, and State V ariables User
2 User-defined Loading,
Boundary Conditions,
and State Variables
User Subroutines
Subroutines
Main Index
Main Index
54 Marc Volume D: User Subroutines and Special Routines
The user subroutines described in this chapter provide an alternative to the standard
input file for providing data in the analysis. Many problems have complex boundary
conditions due to their spatial variation (such as wind loads) or due to their temporal
variation. These routines provide a powerful mechanism to define this behavior in
a simple manner. Table 2-1 summarizes these routines and indicates what
parameters or model definition options are required to invoke the user subroutine.
Main Index
Main Index
CHAPTER 2 55
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Parameters or
User Subroutine Purpose
Model Definition Options
Main Index
Main Index
56 Marc Volume D: User Subroutines and Special Routines
Required Parameters or
User Subroutine Purpose
Model Definition Options
Main Index
Main Index
CHAPTER 2 57
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Parameters or
User Subroutine Purpose
Model Definition Options
Main Index
Main Index
58 Marc Volume D: User Subroutines and Special Routines
Required Parameters or
User Subroutine Purpose
Model Definition Options
Main Index
Main Index
CHAPTER 2 59
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Parameters or
User Subroutine Purpose
Model Definition Options
Main Index
Main Index
60 Marc Volume D: User Subroutines and Special Routines
Required Parameters or
User Subroutine Purpose
Model Definition Options
Main Index
Main Index
CHAPTER 2 61
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ FORCEM
Description
This user subroutine allows input of nonuniform distributed loads. This user
subroutine can be used to specify the load magnitude as a function of coordinate
position and/or time.
The FORCEM user subroutine is called during the calculation of the equivalent
nodal loads, at each integration point needed to calculate the loads specified in the
DIST LOADS option regardless of the use of the ALL POINTS or CENTROID
parameters. When not using table driven input option, the use of this user
subroutine is flagged by the appropriate load type in the DIST LOADS input option
where the type chosen depends on the element type (see Marc Volume B: Element
Library). When using table driven input format, directly specify if the user
subroutine is invoked on the DIST LOADS option.
For three-dimensional magnetostatic analysis, this user subroutine allows surface
or body currents to be specified as functions of time, potential, or position. The use
of this user subroutine is flagged by the appropriate current type in the DIST
CURRENT input option. For two-dimensional magnetostatic analysis, use the FLUX
user subroutine.
Format
The definitions in FORCEM depend on the element dimensionality as follows:
For two-dimensional elements:
SUBROUTINE FORCEM (P,X1,X2,NN,N)
IMPLICIT REAL *8 (A-H, O-Z)
COMMON/LPRES3/PRNORM (3)
DIMENSION N(10)
user coding
RETURN
END
Main Index
Main Index
62 Marc Volume D: User Subroutines and Special Routines
where:
Input:
X1 is the first coordinate of the integration point.
X2 is the second coordinate of the integration point.
NN is the integration point number.
N(1) is the element number.
N(2) is the parameter identifying the type of load.
N(3) is the integration point number.
N(4) is not used.
N(5) is the distributed load index -not used if Table input format.
N(6) = 0 if conventional pressure.
= 1 if user returns 2 or 3 components for pressure in global direction.
N(7) is the internal element number.
N(8) is not used.
N(9) is the general CID load flag.
N(10) is the boundary condition number if Table input format.
Required Output:
P is the magnitude of the distributed load to be defined by the user at the
integration point being evaluated.
PRNORM is the direction cosine of the direction of the load with respect to the global
system for a distributed load in a given direction.
When using Nastran like CID loads, it is possible to specify the direction of the load
though the prnorm array.
When using nonuniform volumetric load (IBODY=107), nonuniform force per unit
length (IBODY=111) or nonuniform for per unit area (IBODY=113), the direction of the
load should be defined in the prnorm array.
For three-dimensional elements and shell element types 22, 49, 72, 75, 138, 139,
and 140, the required headers are:
SUBROUTINE FORCEM (P,X1,X2,NN,N)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION X1(3), X2(3), N(7)
where:
Main Index
Main Index
CHAPTER 2 63
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Input:
X1(3) is the (x,y,z) position of the integration point.
NN is the integration point number.
N(1) is the element number.
N(2) is the parameter identifying the type of load.
N(3) is not used.
N(4) is not used.
N(5) is the distributed load index -not used if Table input format.
N(6) = 0 if conventional pressure.
= 1 if user returns 2 or 3 components for pressure in global direction.
N(7) is the internal element number.
N(8) is not used.
N(9) is the general CID load flag.
N(10) is the boundary condition number if Table input format.
Required Output:
P is the magnitude of the distributed load at this point to be defined by the user.
In cases where a direction is also needed (shell or beam elements).
X2(3) is the vector describing direction of load.
PRNORM is the direction cosine of the direction of the load with respect to the global
system for a distributed load in a given direction.
Main Index
Main Index
64 Marc Volume D: User Subroutines and Special Routines
The FORCEM user subroutine is called twice per increment when AUTO INCREMENT
and FOLLOW FOR are used together in the analysis. The value of KPPASS is available
in the common block AUTOIN which must be included in all analysis using AUTO
INCREMENT and the FORCEM user subroutine.
For harmonic analysis with complex damping, the FORCEM user subroutine is
called two times per integration point for each harmonic sub-increment. The call
number is identified by the variable IHPASS which is available in the common block
HARMON. For IHPASS = 1, the real component of the pressure should be input while
for IHPASS = 2, the imaginary component of the pressure should be input.
The reading of data is not recommended in FORCEM since this user subroutine is in
the recycling loop for nonlinear analysis, and the user cannot know how many times
per increment it is called.
Note: When FORCEM is used to specify the “incremental pressure” (see above table) in
conjunction with a stepping procedure that supports cut-backs, it is necessary that the
pressure be specified as a function of time using the variables CPTIM and/or TIMINC
available in common block CREEPS. This ensures that correct loads are applied even if
the time step is reduced within an increment due to cut-backs.
Examples
It is often useful to have the distributed load vary with time in a dynamic analysis.
To obtain the current time and increment of time add:
include ’creeps’
where:
CPTIM is the time at the beginning of the increment
Main Index
Main Index
CHAPTER 2 65
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
In the example shown below, a beam is given a linearly varying distributed load.
P ( X ) = X * ⎛ --------------⎞
MAX
0 ≤ X ≤ LEN
⎝ LEN ⎠
where LEN is the length of the beam and MAX is the load intensity at X = LEN .
The resulting user subroutine is as follows:
SUBROUTINE FORCEM (P,X1,X2,NN,N)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION N(10)
REAL LEN,MAX
MAX =
LEN =
P = X1* MAX/LEN
RETURN
END
Main Index
Main Index
66 Marc Volume D: User Subroutines and Special Routines
■ FLUX
Description
For heat transfer analysis, this user subroutine allows surface or body fluxes to be
specified as functions of time, temperature, or position. When not using the table
driven input format, the use of this user subroutine is flagged by the appropriate flux
type in the DIST FLUXES input option where the type chosen depends on element
type (see Marc Volume B: Element Library). When using table driven input format,
directly specify if the user subroutine is invoked.
This user routine may be used for other Poisson type problems such as Joule heating
(DIST CURRENT), diffusion (DIST MASSES), electrostatic (DIST CHARGES),
magnetostatic (DIST CURRENT), or acoustic (DIST SOURCES).
Format
User subroutine FLUX is written with the following headers:
SUBROUTINE FLUX(F,TS,N,TIME)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION TS(6), N(10), F2
user coding
RETURN
END
where
F(1) is the surface or volumetric flux, to be defined at this
integration point in this user subroutine.
F(2) Derivative of the flux with respect to temperature. This may
improve convergence behavior. Not required.
TS(1) is the estimated temperature at the end of the increment.
TS(2) is the current values of the area under the volumetric flux
Main Index
Main Index
CHAPTER 2 67
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
This user subroutine is called at each time step for each integration point and
element listed with an appropriate flux type in the DIST FLUXES or similar
input option.
The reading of data is not recommended in FLUX since this user subroutine is in the
recycling loop, and the user cannot know how many times per increment it is called.
Main Index
Main Index
68 Marc Volume D: User Subroutines and Special Routines
■ UWELDFLUX
Description
For heat transfer analysis, this user subroutine allows surface or body welding
fluxes to be specified as functions of time, temperature, or position. The use of this
user subroutine is flagged by the appropriate flux type in the WELD FLUX input
option where the type chosen depends on element type (see Marc Volume B:
Element Library).
Format
User subroutine UWELDFLUX is written with the following headers:
SUBROUTINE UWELDFLUX(F,TEMFLU, MIBODY, WELDDIM,TIME)
INCLUDE ’../COMMON/IMPLICIT’
DIMENSION MIBODY(*),TEMFLU(*),WELDDIM(*)
user coding
RETURN
END
where:
Input:
TEMFLU(1) integration point coordinate in local X direction (along Weld
Width Direction).
TEMFLU(2) integration point coordinate in local Y direction (along Weld
Depth Direction).
TEMFLU(3) integration point coordinate in local Z direction (along Weld
Path Direction).
TEMFLU(4) integration point coordinate in global X direction.
TEMFLU(5) integration point coordinate in global Y direction.
TEMFLU(6) integration point coordinate in global Z direction.
MIBODY(1) user element number.
Main Index
Main Index
CHAPTER 2 69
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
This user subroutine is called at each time step for each integration point and
element listed with an appropriate load type in the WELD FLUX model definition
option. Since this user subroutine is in the recycling loop, the reading of data is not
recommended in UWELDFLUX as the user does not know how many times per
increment it is called.
The weld path to be followed by the heat source specified in this subroutine can be
directly given in the input file or specified through the UWELDPATH user
subroutine. This weld path is used to define the local coordinate system at the
current position of the weld source. The global integration point coordinates
TEMFLU(4 - 6) are then transformed to local integration point coordinates TEMFLU(1
- 3) using the direction cosines of the local coordinate system. Any path offsets in
the local X and Y directions are also applied during this process. Both the global
and local integration point coordinates are provided as input in the program.
The weld dimensions WELDDIM are optional input. They can be varied as a function
of time or arc length using tables. The weld dimensions can be used for defining the
weld pool size. The latter can be used for three purposes: for defining the weld flux
F in this subroutine; for defining a filler element bounding box which can be used
to identify filler elements that are in the weld pool (note that if separate bounding
box dimensions are provided, they over-ride the weld pool dimensions); and for
defining a moving adaptive box with the heat source that identifies which elements
need to be adaptively subdivided.
Main Index
Main Index
70 Marc Volume D: User Subroutines and Special Routines
■ UWELDPATH
Description
This user subroutine allows the specification of a weld path to be followed by a weld
heating source. The use of this user subroutine is flagged by the appropriate weld
path and arc orientation types (type 5) in the WELD PATH input option.
Format
User subroutine UWELDPATH is written with the following headers:
SUBROUTINE UWELDPATH(NWELD, NPATH, NFILL,DISTWELD,STARTPOS,
FINALPOS, WELDVEC, ARCVEC, CPTIM, TIMINC)
INCLUDE ’../COMMON/IMPLICIT’
DIMENSION WELDVEC(*), ARCVEC(*), STARTPOS(*), FINALPOS(*),
NWELD(*), NPATH(*), NFILL(*)
user coding
RETURN
END
where
Input:
NWELD(1) external weld flux ID.
NWELD(2) internal weld flux ID.
NPATH(1) external weld path ID.
NPATH(2) internal weld path ID.
NFILL(1) external weld filler ID.
NFILL(2) internal weld filler ID.
DISTWELD incremental distance travelled by weld heat source.
STARTPOS weld position vector at start of increment.
CPTIM time at start of increment.
TIMINC incremental time step.
Main Index
Main Index
CHAPTER 2 71
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Output:
FINALPOS weld position vector at end of increment.
WELDVEC weld path vector at end of increment position.
ARCVEC arc orientation vector at end of increment position.
This user subroutine is called once at the beginning of each increment or when the
time step for the increment is changed due to a cut-back. The position of the weld
source at the end of the increment and the corresponding path and orientation
vectors are required to be specified by the user. This information is used to construct
the local coordinate system at the end of increment position. Note that the specified
ARCVEC vector should be perpendicular to the WELDVEC vector. Otherwise, Marc
makes the ARCVEC vector perpendicular to the WELDVEC vector.
The UWELDPATH subroutine should be used in conjunction with a weld heat source
that is either directly specified through the WELD FLUX model definition option or
through the UWELDFLUX user subroutine. Note that when this subroutine is used to
specify the weld path, the position of the associated weld source should be
initialized on the WELD FLUX model definition option, else Marc terminates with
exit 20. Also, note that when this subroutine is used to specify the weld path, it is
the responsibility of the user to cater to any filler elements that may lie along the
path. If the elements are initially deactivated, this can be done by calling the general
activation UACTIVE user subroutine at the end of the increment.
Main Index
Main Index
72 Marc Volume D: User Subroutines and Special Routines
■ CUPFLX
Description
This user subroutine allows the user to modify the default routine for the calculation
of the internal heat generated due to inelastic energy dissipation. This user
subroutine is only used if a coupled thermal-mechanical or thermal-Joule-
mechanical analysis is being performed and a DIST FLUXES type 101 is chosen.
Format
User subroutine CUPFLX is written with the following headers:
SUBROUTINE CUPFLX (F,TS,N,TIME,TIMINC,TOTPLE,DIFPLE,DEN,
FCMECH)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION TS(1), N(1)
user coding
RETURN
END
where
Input:
TS(1) is the estimated temperature at the end of the increment.
TS(3) is the temperature at the beginning of the increment.
TS(4), TS(5), TS(6) are the integration point coordinates.
N(1) is the element number.
N(2) is 101.
N(3) is the integration point number.
N(7) is the internal element number.
TIME is the time at the beginning of increment.
TIMINC is the time increment.
TOTPLE is the total plastic strain energy.
DIFPLE is the incremental plastic strain energy.
Main Index
Main Index
CHAPTER 2 73
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
74 Marc Volume D: User Subroutines and Special Routines
■ UINSTR
Description
This user subroutine is called in a loop over all the elements in the mesh when the
ISTRESS parameter is used. Note that this user subroutine is called twice for each
point. During the first call, the user-defined stress vector S is used to define the net
nodal force. During the second call, the user-defined stress vector S is used to define
the initial stress at each point. In a rigid-plastic analysis, this user subroutine is
called at every increment; otherwise, only in increment zero.
Format
User subroutine UINSTR is written with the following headers:
SUBROUTINE UINSTR (S,NDI,NSHEAR,N,NN,KCUS,XINTP,NCRD,
+INC,TIME,TIMEINC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION S(1), XINTP(NCRD), N(2),KCUS(2)
user coding
RETURN
END
where:
Input:
NDI is the number of direct stress components.
NSHEAR is the number of shear stress components.
N(1) is the user element number.
N(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
XINTP is the array of integration point coordinates.
NCRD is the number of coordinates.
INC is the increment number.
Main Index
Main Index
CHAPTER 2 75
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
76 Marc Volume D: User Subroutines and Special Routines
■ UFOUR
Description
This user subroutine allows input of a function F(Θ) where it can be expressed
analytically. The values of F(Θ) are then passed into a Marc routine that calculates
the Fourier expansion coefficients.
Format
User subroutine UFOUR is written with the following headers:
SUBROUTINE UFOUR (F,N,NS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION F(1)
user coding
RETURN
END
where
Input:
N The number of stations around the circumference for which the function value F
is specified. N is to be defined by the user.
NS The number of the Fourier series.
Required Output:
F The F-array should contain the N values of F (Θ) in sequential order starting at
Θ = 0° and ending with Θ = 360°.
The user specifies the N values of F(Θ) in degrees sequentially from 0 to 360° in
positions N + 1 through 2N of the F-array.
Main Index
Main Index
CHAPTER 2 77
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Example
For example, suppose the following function is to be expanded in a Fourier series:
1 Θ = 135°, 315°
F(Θ) = -1 Θ = 45°, 225°
0 elsewhere.
This might be accomplished through the following code for the UFOUR user
subroutine which calculates F(Θ) for 25 values of Θ from 0° to 360° by 15°.
SUBROUTINE UFOUR (F,N,NS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION F(1)
C
DO 10 I=1,N
F(I)=0
F(I+N) = (I-1)*15
10 CONTINUE
F(4) = -1.0
F(10) = +1.0
F(16) = -1.0
F(22) = +1.0
C
RETURN
END
The UFOUR user subroutine is called by using the following model
definition option:
FOURIER
0,0,25,
Main Index
Main Index
78 Marc Volume D: User Subroutines and Special Routines
■ FORCDT
Stress Analysis
Description
Simple time dependent load or displacement histories can be input on data lines.
However, in more general cases, when the load history is complex, it is often more
convenient to input the history through a user subroutine. For distributed loads, this
is achieved with the FORCEM user subroutine; for point loads, it is achieved via the
FORCDT user subroutine.
When not using the table driven input format, this user subroutine is flagged by
introducing a model definition set, FORCDT, listing the node numbers for which this
user subroutine is called. Then, at each increment of the analysis, for each of the
nodes on the list, the user subroutine is called. When using table driven input
format, one explicitly activates this routine on the POINT LOADS or FIXED DISP
options. In static analyses, displacement and load arrays are available and, for
dynamics, velocity and acceleration analyses are also given. For nodes without
kinematic boundary conditions, the user can define increments of point loads (thus
overwriting any point load input at the same nodes in the POINT LOAD option). For
nodes with kinematic boundary conditions (that is, listed in the FIXED DISP or DISP
CHANGE options), the user can define increments of displacement.
Format
User subroutine FORCDT is written with the following headers:
SUBROUTINE FORCDT (U,V,A,DP,DU,TIME,DTIME,NDEG,NODE,
1 UG,XORD,NCRD,IACFLG,INC, IPASS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION
U(NDEG),V(NDEG),A(NDEG),DP(NDEG),DU(NDEG),UG(1),XORD(1)
user coding
RETURN
END
Main Index
Main Index
CHAPTER 2 79
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
where
U is the array of total displacements at this node.
V is the array of total velocities at this node (dynamics only).
A is the array of total accelerations at this node (dynamics only).
non table driven input
Nontable Driven Input:
DP is the array of incremental point loads at this node – can be set by the user
at degrees of freedom without kinematic boundary conditions.
DU is the array of incremental displacements at this node, is the array of total
accelerations at this node, or is the array of total velocities, see IACFLG –
can be set by the user for degrees of freedom listed as having kinematic
boundary conditions.
Table Driven Input:
DP is the array of total force to be applied to the node
DU is the array of incremental displacements to be applied to the node If
IACFLG = 0.
is the array of total displacements to be applied to the node at the end of the
increment if IACLFG = -1.
DTIME is the increment of time (only relevant for dynamics or creep).
TIME is the total time (only relevant for dynamics or creep) at the beginning of
the increment.
NDEG is the number of degrees of freedom per node.
NODE is the global node number.
UG is the array of total displacements in the global system.
XORD is the array of original nodal coordinates.
NCRD is the number of coordinates per node.
IACFLG is set to 1 if accelerations are prescribed.
is set to 2 if velocities are prescribed in dynamic analysis.
is set to -1 if total displacements are applied with table driven input.
INC is the increment number.
IPASS = 1 stress portion.
Main Index
Main Index
80 Marc Volume D: User Subroutines and Special Routines
CUTIME is the time at the beginning of the current increment from heat
transfer analysis.
DUTIME is the change in time during current increment from heat transfer analysis.
Main Index
Main Index
CHAPTER 2 81
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Description
Time dependent nodal fluxes or temperature boundary conditions can be input most
conveniently through the use of user subroutine FORCDT. For distributed fluxes, the
FLUX user subroutine should be used to input the value of the distributed flux as a
function of time and position.
When not using the table driven input format, the FORCDT user subroutine is
flagged by a model definition set, FORCDT, listing the node numbers. Then at each
step in the analysis, for each of the nodes in the list, the user subroutine is called.
The current, calculated temperature is provided at the nodes. For nodes not
specified as having temperature boundary conditions, the user can give the point
flux. For those nodes specified with temperature, boundary conditions (in FIXED
TEMPERATURE or TEMP CHANGE) sets the temperature.
When using the table driven input, one explicitly activates this routine on the POINT
FLUX or FIXED TEMPERATURE option.
Format
User subroutine FORCDT is written with the following headers:
SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4,
1 XORD,NCRD,IACFLG,INC,IPASS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION F(NDEG),T(NDEG),XORD(NCRD)
user coding
RETURN
END
where
X1,X2,X3 are not used.
F is the array of fluxes at the node – can be re-defined for nodes free of
temperature boundary conditions.
T is the array of temperatures at the node – can be redefined for nodes
having temperature boundary conditions.
TIME is the total time at the end of the current step.
DTIME is the current time increment.
NDEG is 1 unless heat transfer shell elements are used.
Main Index
Main Index
82 Marc Volume D: User Subroutines and Special Routines
Description
Time dependent nodal currents or voltage boundary conditions can be input most
conveniently through the use of user subroutine FORCDT. For distributed current,
the FLUX user subroutine should be used to input the value of the distributed current
as a function of time and position.
When not using the table driven input format, the FORCDT user subroutine is
flagged by a FORCDT model definition set, listing the node numbers. Then, at each
step in the analysis, for each of the nodes in the list, the user subroutine is called.
The calculated voltage is provided at the nodes. For nodes not specified as having
voltage boundary conditions, the user can give the point current. For those nodes
specified with voltage, boundary conditions (in VOLTAGE or VOLTAGE CHANGE)
sets the voltage. When using table driven input format, one explicitly activates this
routine on the POINT CURRENT or FIXED VOLTAGE option.
Format
User subroutine FORCDT is written with the following headers:
SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4,
1 XORD,NCRD,IACFLG,INC,IPASS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION F(NDEG),T(NDEG),XORD(NCRD)
user coding
RETURN
END
Main Index
Main Index
CHAPTER 2 83
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
where
X1,X2,X3 are not used.
F is the array of currents at the node – can be re-defined for nodes free of
voltage boundary conditions.
T is the array of voltages at the node – can be redefined for nodes having
voltage boundary conditions.
TIME is the total time at the end of the current step.
DTIME is the current time increment.
NDEG is 1 unless heat transfer shell elements are used.
NODE is the global node number.
X4 is not used.
XORD is the array of nodal coordinates.
NCRD is the number of coordinates per node.
IACFLG is not used.
INC is the increment number.
IPASS = 4 electrical pass in Joule heating analysis.
Diffusion Analysis
Description
Time dependent nodal mass flux or pressure boundary conditions can be input most
conveniently through the use of the FORCDT user subroutine. For distributed mass
flux, the FLUX user subroutine should be used to input the value of the distributed
mass flux as a function of time and position.
When not using the table driven input format, the FORCDT user subroutine is
flagged by a model definition set, FORCDT, listing the node numbers. Then at each
step in the analysis, for each of the nodes in the list, the user subroutine is called.
The current, calculated pressure is provided at the nodes. For nodes not specified
as having pressure boundary conditions, the user can give the point mass flux. For
those nodes specified with pressure, boundary conditions (in FIXED PRESSURE or
PRESS CHANGE) sets the pressure.When using the table driven input format, one
explicitly activates this routine on the POINT MASS or FIXED PRESSURE option.
Main Index
Main Index
84 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine FORCDT is written with the following headers:
SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4,
1 XORD,NCRD,IACFLG,INC,IPASS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION F(NDEG),T(NDEG),XORD(NCRD)
user coding
RETURN
END
where
X1,X2,X3 are not used.
F is the array of mass fluxes at the node – can be re-defined for nodes free
of pressure boundary conditions.
T is the array of pressure at the node – can be redefined for nodes having
pressure boundary conditions.
TIME is the total time at the end of the current step.
DTIME is the current time increment.
NDEG is 1 unless heat transfer shell elements are used.
NODE is the global node number.
X4 is not used.
XORD is the array of nodal coordinates.
NCRD is the number of coordinates per node.
IACFLG is not used.
INC is the increment number.
IPASS = 5 diffusion pass.
Electrostatic Analysis
Description
Time dependent nodal charges or potential boundary conditions can be input most
conveniently through the use of the FORCDT user subroutine. For distributed
charges, the FLUX user subroutine should be used to input the value of the
distributed charge as a function of time and position.
Main Index
Main Index
CHAPTER 2 85
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
When not using the table driven input format, the FORCDT user subroutine is
flagged by a model definition set, FORCDT, listing the node numbers. Then at each
step in the analysis, for each of the nodes in the list, the user subroutine is called.
The current, calculated potential is provided at the nodes. For nodes not specified
as having potential boundary conditions, the user can give the point charge. For
those nodes specified with potential, boundary conditions (in FIXED POTENTIAL
or POTENTIAL CHANGE) sets the potential. When using the table driven input,
one explicitly activates this routine on the POINT CHARGE or the FIXED
POTENTIAL option.
Format
User subroutine FORCDT is written with the following headers:
SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4,
1 XORD,NCRD,IACFLG,INC,IPASS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION F(NDEG),T(NDEG),XORD(NCRD)
user coding
RETURN
END
where
X1,X2,X3 are not used.
F is the array of charges at the node – can be re-defined for nodes free of
potential boundary conditions.
T is the array of potential at the node – can be redefined for nodes having
potential boundary conditions.
TIME is the total time at the end of the current step.
DTIME is the current time increment.
NDEG is 1 unless heat transfer shell elements are used.
NODE is the global node number.
X4 is not used.
XORD is the array of nodal coordinates.
NCRD is the number of coordinates per node.
IACFLG is not used.
INC is the increment number.
IPASS = 6 for electrostatic pass.
Main Index
Main Index
86 Marc Volume D: User Subroutines and Special Routines
Magnetostatic Analysis
Description
Time dependent nodal current or potential boundary conditions can be input most
conveniently through the use of the FORCDT user subroutine. For distributed
currents, the FLUX user subroutine should be used to input the value of the
distributed current as a function of time and position.
When not using the table driven input format, the FORCDT user subroutine is
flagged by a model definition set, FORCDT, listing the node numbers. Then at each
step in the analysis, for each of the nodes in the list, the user subroutine is called.
The calculated potential is provided at the nodes. For nodes not specified as having
potential boundary conditions, the user can give the point current. For those nodes
specified with potential, boundary conditions (in FIXED POTENTIAL or POTENTIAL
CHANGE) sets the potential. When using the table driven input, one explicitly
activates this routine on the POINT CURRENT or the FIXED POTENTIAL option.
Format
User subroutine FORCDT is written with the following headers:
SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4,
1 XORD,NCRD,IACFLG,INC,IPASS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION F(NDEG),T(NDEG),XORD(NCRD)
user coding
RETURN
END
where
X1,X2,X3 are not used.
F is the array of currents at the node – can be re-defined for nodes free of
potential boundary conditions.
T is the array of potentials at the node – can be redefined for nodes having
potential boundary conditions.
TIME is the total time at the end of the current step.
DTIME is the current time increment.
NDEG is 1 unless heat transfer shell elements are used.
NODE is the global node number.
X4 is not used.
Main Index
Main Index
CHAPTER 2 87
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
88 Marc Volume D: User Subroutines and Special Routines
■ FORCDF
Stress Analysis
Description
Simple nodal load or displacement excitations can be input on data lines. However,
in more general cases, when the load is nonhomogeneous, it is often more
convenient to input the excitation through a user subroutine. In harmonic analysis,
for distributed loads, this is achieved with the FORCEM user subroutine; for point
loads or displacements, it is achieved via the FORCDF user subroutine.
When not using the table driven input format, this user subroutine is flagged by
introducing a model definition option, FORCDT, listing the node numbers for which
this user subroutine is called. Then, at each harmonic sub-increment of the analysis,
for each of the nodes on the list, the user subroutine is called. For nodes without
kinematic boundary conditions, the user can define increments of point loads (thus,
overwriting any point load input at the same nodes in the POINT LOAD option). For
nodes with kinematic boundary conditions (that is, listed in the FIXED DISP or DISP
CHANGE options), the user can define increments of harmonic displacement. When
using table driven input format, one explicitly activates this routine on the POINT
LOAD or FIXED DISP option.
Format
User subroutine FORCDF is written with the following headers:
SUBROUTINE FORCDF (U,FR,FI,DUR,DUI,FREQ,DTIME,NDEG,NODE,
1 UG,XORD,NCRD,ICOMPL,INC,INCSUB)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION (NDEG),FR(NDEG),FI(NDEG),DUR(NDEG),DUI(NDEG),
+UG(1),XORD(1)
user coding
RETURN
END
Main Index
Main Index
CHAPTER 2 89
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
where
Input:
U is the array of total displacements at this node.
FREQ is the excitation frequency.
DTIME is not used.
NDEG is the number of degrees of freedom per node.
NODE is the global node number.
UG is the array of total displacements in the global system.
XORD is the array of original nodal coordinates.
NCRD is the number of coordinates per node.
ICOMPL is 0 if real analysis; 1 if complex analysis.
INC is the increment number.
Required Output:
FR is the array of the real components of the harmonic point loads.
FI is the array of the imaginary components of the harmonic point loads.
DUR is the array of the real components of the harmonic displacements.
DUI is the array of the imaginary components of the harmonic displacements.
Piezoelectric Analysis
Description
Simple nodal load, charge, displacement, or potential excitations can be input on
data lines. However, in more general cases, when the load is nonhomogeneous, it is
often more convenient to input the excitation through a user subroutine. For
distributed loads, this is achieved with the FORCEM user subroutine; for distributed
charge, this is achieved with the FLUX user subroutine; for point loads, point charge,
displacements, or potential, this is achieved via the FORCDF user subroutine.
When not using the table driven input, this user subroutine is flagged by the
FORCDT model definition option listing the node numbers for which this user
subroutine is called. Then, at each harmonic subincrement of the analysis for each
of the nodes on the list, the user subroutine is called. For nodes without kinematic
boundary conditions, increments of point loads and increments of point charge can
be defined (this overwrites any point load input at the same nodes in the POINT
LOAD option or overwriting any point charge in the POINT CHARGE option). For
Main Index
Main Index
90 Marc Volume D: User Subroutines and Special Routines
nodes with kinematic boundary conditions (that is, listed in the FIXED DISP, FIXED
POTENTIAL, DISP CHANGE, or FIXED POTENTIAL options), the user can define
increments of harmonic displacement and/or potential. When using the table driven
input, one explicitly activates this routine on the POINT LOAD, POINT CHARGE,
FIXED DISP, or FIXED POTENTIAL option.
Format
User subroutine FORCDF is written with the following headers:
SUBROUTINE FORCDF (U,FR,FI,DUR,DUI,FREQ,DTIME,NDEG,NODE,
1 UG,XORD,NCRD,ICOMPL,INC,INCSUB)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION
U(NDEG),FR(NDEG),FI(NDEG),DUR(NDEG),DUI(NDEG),UG(1)
1 XORD(1)
user coding
RETURN
END
where
Input:
U is the array of total displacements and potential at this node.
FREQ is the excitation frequency.
DTIME is not used.
NDEG is the number of degrees of freedom per node.
NODE is the global node number.
UG is the array of total displacements in the global system.
XORD is the array of original nodal coordinates.
NCRD is the number of coordinates per node.
ICOMPL is 0 if real analysis; 1 if complex analysis.
INC is the increment number.
Required Output:
FR is the array of the real components of the harmonic point loads and
harmonic point charge.
FI is the array of the imaginary components of the harmonic point loads and
harmonic point charge.
Main Index
Main Index
CHAPTER 2 91
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
DUR is the array of the real components of the harmonic displacements and
harmonic potential.
DUI is the array of the imaginary components of the harmonic displacements
and harmonic potential.
The first ndeg-1 elements of the arrays refer to the structural point loads
or displacements.
The ndeg’th element of the arrays refers to the point charge or harmonic potential.
Main Index
Main Index
92 Marc Volume D: User Subroutines and Special Routines
■ FILM
This user subroutine is used when the table input format is not used;
otherwise, use the UFILM user subroutine.
Description
In heat transfer analysis, it is often necessary to include nonuniform film
coefficients and sink temperatures for the calculation of convection or radiation
boundary conditions. The FILM user subroutine facilitates this. It is called at each
time step for each integration point on each element surface given in the FILMS
model definition set, and allows the user to modify the film coefficient and sink
temperature that is input through the data lines. In coupled contact analyses, the
UHTCOE, UHTNRC, and UHTCON user subroutines are preferred.
Format
User subroutine FILM is written with the following headers:
SUBROUTINE FILM (H,TINF,TS,N,TIME)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION H(2), N(7),TS(6)
user coding
RETURN
END
where:
Input:
TS(1) is the estimated surface temperature at the end of the increment.
TS(2) is the surface temperature at the beginning of the increment.
TS(3) is not used.
TS(4) is the integration point 1st coordinate.
Main Index
Main Index
CHAPTER 2 93
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Note that since H and TINF are defined as ratios, if the user does not re-define them
in this user subroutine, the data set values are used. If the user wishes to give
absolute values here, the corresponding values on the FILMS data set can be
conveniently set to 1.
Main Index
Main Index
94 Marc Volume D: User Subroutines and Special Routines
■ FLOW
Description
In a heat transfer analysis involving fluid channel elements, user subroutine FLOW
is available to the user for the modification of mass flow rate, inlet temperature, and
film coefficient. Both the inlet temperature and mass flow rate can be dependent on
time; the film coefficient can also be a function of streamline distance.
Format
User subroutine FLOW is written with the following header:
SUBROUTINE FLOW (II,IFACE,N1,NBSURF,STOT,RATE,TINLET,SURFJ,
+TSURJ,HJ,TFLUID,TIMINC,CPTIME)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION SURFJ(4),TSURJ(4),HJ(4)
user coding
RETURN
END
where:
Input:
II is the channel number.
IFACE is the channel face identification, defining the flow direction.
N1 is the fluid channel element number.
NBSURF is the number of channel surfaces.
STOT is the total stream line distance.
SURFJ(I) is the channel surface area array.
TSURJ(I) is the channel surface temperature array.
TFLUID is the fluid element temperature.
TIMINC is the time increment.
CPTIME is the current total time.
Required Output:
RATE is the mass flow rate (redefined by the user in this user subroutine).
Main Index
Main Index
CHAPTER 2 95
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
TINLET is the inlet temperature (redefined by the user in this user subroutine).
HJ(I) is the film coefficient of the ith surface (redefined by the user in this
user subroutine).
Main Index
Main Index
96 Marc Volume D: User Subroutines and Special Routines
■ UFOUND
This user subroutine is used when the table input format is used;
otherwise, use the USPRNG user subroutine.
Description
The UFOUND user subroutine permits the introduction of nonlinear spring constants
for use with the FOUNDATION option, and input of nonlinear damping for dynamics
or harmonics. The user coding must supply both of the spring stiffness and the total
spring force. The data value of the stiffness/damping constant, total time, and the
element or spring number are made available to the user subroutine. For harmonic
analysis, the stiffness/damping constants can be a function of the frequency. The
UFOUND user subroutine is activated by the FOUNDATION option.
Format
User subroutine UFOUND is written with the following headers:
SUBROUTINE UFOUND(EFFK,EFORC,U,TIME,N,IHRESP)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION EFFK(*),U(*),TIME(*),N(*),EFORC(2)
user coding
RETURN
END
where:
For Elastic Foundation
EFFK(1) foundation stiffness
EFFK(2) foundation damping (dynamics and/or harmonics)
For Statics or Dynamics
EFORC(1) foundation resistance force due to stiffness
Main Index
Main Index
CHAPTER 2 97
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
98 Marc Volume D: User Subroutines and Special Routines
■ UFILM
This user subroutine is used when the table input format is used;
otherwise, use the FILM user subroutine.
Description
In heat transfer analysis, it is often necessary to include nonuniform convective
coefficients and sink temperatures for the calculation of convection or radiation
boundary conditions. The UFILM user subroutine facilitates this. It is called at each
time step for each integration point on each element surface given in the FILMS
model definition set, and allows the user to modify the convective coefficient and
sink temperature that is input through the data lines. In coupled contact analyses,
the UHTCOE and UHTCON user subroutines are preferred
Format
User subroutine UFILM is written with the following headers:
SUBROUTINE UFILM(UHFILM,UTSINK,UHNATUR,UEXPNAT,
* UEFFVIEW,UEMISS,UQFLUX,TS,N,TIME,INC)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION TS(*),N(*)
user coding
RETURN
END
where:
UHFILM is the conventional convective heat transfer coefficient.
UTSINK is the sink temperature.
UHNATUR is the natural convection coefficient.
UEXPNAT is the natural convection exponent.
UEFFVIEW is the effective view factor.
Main Index
Main Index
CHAPTER 2 99
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
100 Marc Volume D: User Subroutines and Special Routines
■ USINKPT
Description
The USINKPT user subroutine allows the user to change the sink point temperatures
as a function of time. For every integration point associated with an element face
defined in the FILMS model definition option, the closest sink point will be
determined. This routine will be called for each one of these integration points.
Format
User subroutine USINKPT is written with the following headers:
SUBROUTINE
USINKPT(M,NN,ISINK,TSINK,TIME,INC,XINT,XSINK,NCRD)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION XINT(NCRD),XSINK(NCRD)
user coding
RETURN
END
where:
Updates Temperature of Sink Point
M element number.
NN integration point number.
ISINK sink id.
TSINK temperature of sink point - to be updated by the user.
TIME time at the end of the increment.
INC increment number.
XINT coordinates of surface integration point.
XSINK coordinates of sink point.
NCRD number of coordinates.
Main Index
Main Index
CHAPTER 2 101
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UQVECT
Description
This user subroutine permits the definition of the magnitude of the thermal flux and
the direction. The equivalent nodal flux is calculated based upon
∫ N T αq ( – n∗ d ) dS
Where
N is the shape functions.
α is the absorption constant.
q is the user defined magnitude of the flux.
n is the outward normal to the surface of the element.
d is the user defined direction cosine vector.
Note, by default, if the flux is a positive quantity, but the product ( – n*d ) is a
negative quantity, than heat it extracted from the surface. The user can use the
ISIDE value in the QVECT model definition option to control this behavior.
Format
The UQVECT user subroutine is written with the following header:
SUBROUTINE UQVECT(M,NN,FLUX,QV,TSOURCE,ABSORP,NDIR,INC,
*CPTIM,TIMINC)
INCLUDE '../COMMON/IMPLICIT'
DIMENSION QV(NDIR)
USER CODING
RETURN
END
Required Input
m is the element number.
nn is the integration point number.
Main Index
Main Index
102 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 103
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ GAPT
Description
In a heat transfer analysis involving thermal contact (CONRAD) gap elements, the
gap temperature is compared with a given gap closure temperature for the
determination of gap open/closed condition. In Marc, the gap temperature is
estimated from the average of gap nodal temperatures 0.5∗ ( T1 + T2 ) and the gap
closure temperature is entered through the CONRAD GAP model definition option.
The GAPT user subroutine allows for the redefinition of gap temperature (TGAP)
based on the nodal temperatures T1 and T2. If the gap temperature (TGAP) is greater
than or equal to the gap closure temperature (TCLOSE), the gap is closed. Otherwise,
the gap is open. This also influences the electrical contact in a coupled Joule heating
analysis.
Format
User subroutine GAPT is written with the following header:
SUBROUTINE GAPT(N,I1,I2,T1,T2,TCLOSE,TGAP,INC,TIME,TIMINC)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
N is the gap (tie) number.
I1,I2 are the nodal numbers.
T1,T2 are the nodal temperatures.
TCLOSE is the gap closure temperature.
INC is the increment number.
TIME is the total transient time.
TIMINC is the time increment.
Required Output:
TGAP is the gap temperature (to be defined the user).
Main Index
Main Index
104 Marc Volume D: User Subroutines and Special Routines
■ UFORMSN
Description
The UFORMSN user subroutine allows the definition of a constraint condition.
Marc's capability for applying arbitrary homogeneous constraints between nodal
displacements is used through this user subroutine. To distinguish user constraints
from Marc's built-in constraints, those constraints formed by the user in UFORMSN
must be of type less than zero (ISTYP in the user subroutine: first field of data block
3 of the TYING model definition option). The constraint conditions can be supplied
by using the UFORMSN user subroutine. The conventions adopted for these
constraints are:
1. A constraint is defined by:
⎧ ub ⎫
⎪ ⎪
{ ua } = [ S ]⎨ uc ⎬ + { Cn o n }
⎪ ⎪
⎩ etc ⎭
where:
{ ua } The vector of displacement at node a, referred to as the
tied mode.
⎧ ub ⎫
⎪ ⎪
⎨ uc ⎬ Vector of displacements at b, c, etc.; these nodes are referred
⎪ ⎪ to as the retained nodes.
⎩ etc ⎭
Main Index
Main Index
CHAPTER 2 105
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format
The user subroutine supplying the [ S ] matrix must have the following headers:
SUBROUTINE UFORMSN(S,NDEG,LONGSM,ITI,NRETN,II,ISTYP
1 CNON,LM,INTDATA,REALDATA,XORD,XORDU,
2 NCRD,IFLAG)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION S(NDEG,LONGSM),ITI(*),CNON(NDEG),
$ XORD(NCRD,*),XORDU(NDEG,*),LM(*)
DIMENSION INTDATA(*),REALDATA(*)
user coding
RETURN
END
where:
Input:
NDEG is the number of degrees of freedom per node.
LONGSM is NDEG*number of retained nodes.
ITI( ) iti(1) = tied node id
iti(2)-iti(1+nretn) = retained nodes id’s
NRETN is the number of retained nodes.
II is the tying number.
ISTYP is the tying type.
Main Index
Main Index
106 Marc Volume D: User Subroutines and Special Routines
Example
Suppose a change from a coarse to a fine mesh of two-dimensional isoparametric
elements is required. For any node in the fine mesh which does not correspond to a
node in the coarse mesh, a constraint is necessary. The displacement at these nodes
can be expressed as a linear combination of the displacements of the two corner
nodes of the coarse mesh since the displacement is linear between these nodes due
to the element formulation.
Main Index
Main Index
CHAPTER 2 107
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
⎧ ⎫
⎪ ui ⎪
⎧ ⎫ ⎪ ⎪
⎪ uj ⎪ 1–λ 0 λ 0 ⎪ vi ⎪
⎨ ⎬ = ⎨ ⎬
⎪ vj ⎪ 0 1–λ 0 λ ⎪ ul ⎪
⎩ ⎭ ⎪ ⎪
⎪ vl ⎪
⎩ ⎭
where:
λ = xi j ⁄ xi l
Main Index
Main Index
108 Marc Volume D: User Subroutines and Special Routines
TYING
4,
-1,j,2
i,l,
-1,k,2
i,l,
-1,m,2
l,p,
-1,n,2
l,p,
Note that this coarse to fine mesh tying constraint is in Marc as default tying types
31 and 32 for planar elements and as tying type 33 and 34 for three-dimensional
brick elements. See Marc Volume A: User Information for further details.
n
xij m
l
k
j
i
xil
Main Index
Main Index
CHAPTER 2 109
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ CREDE
Main Index
Main Index
110 Marc Volume D: User Subroutines and Special Routines
where:
Input:
M is the user element number and must remain unchanged in CREDE. The
internal element number is obtained as
mint = ielint(m)
NSTRES is the maximum number of integration points per element, if ALL POINTS
was included in the parameters, and is 1 if the CENTROID parameter is
used.
NEQST is the maximum number of layers per element.
NSTATS is the number of state variables requested by the user in the STATE VARS
parameter. (This number equals 1 if only temperature is required).
Required Output:
DTDL is the array of state variable increments or total values (to be defined here
by the user).
For meshes with several element types, NEQST and NSTRES take on maximum
values, but the DTDL array need only be filled as far as necessary for a particular
element type.
Example
As an example, suppose a linear gradient through the thickness is to be imposed on
a shell with NSTATS = 1. The same gradient is imposed throughout the structure.
The following coding will suffice:
SUBROUTINE CREDE (DTDL,M,NSTRES,NEQST,NSTATS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DTDL (NSTATS,NEQST,NSTRES)
TOUT=500.0
TIN=300.0
T=TIN
DT=(TOUT-TIN)/FLOAT(NEQST-1)
DO 2 I=1, NEQST
DO 1 J=1, NSTRES
1 DTDL (1,I,J)=T
2 T=T+DT
RETURN
END
Main Index
Main Index
CHAPTER 2 111
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ INITSV
Description
This user subroutine, allows the user to define initial values of state variables.
When not using the table driven input format, it is called in a loop over all the
elements in the mesh when the INITIAL STATE option appears in the model
definition options with a 2 in the second field of the second data block of that
option. When using the table driven input, it is called for those elements specified
in the INITIAL STATE model definition option if a 7 is given in the second field of
the second data block and the initial condition is activated by the LOADCASE model
definition option.
Format
User subroutine INITSV is written with the following headers:
SUBROUTINE INITSV(SV,LAYERS,INTPTS,M,ID)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION SV(LAYERS,INTPTS)
user coding
RETURN
END
where:
Input:
LAYERS is the number of layers through the thickness if this is a shell element, or the
number of points in the cross-section if this is a beam element. It is 1 for a
continuum element.
INTPTS is the number of integration points in this element if the ALL POINTS
parameter is used. If the CENTROID parameter is used, INTPTS = 1.
M is the user element number. The internal element number is obtained as
mint = ielint(m)
ID is the state variable number (from columns 1-5 of the second data block of
the INITIAL STATE set).
Main Index
Main Index
112 Marc Volume D: User Subroutines and Special Routines
Required Output:
SV is the array of values of this state variable; to be defined here for this
element by the user.
Main Index
Main Index
CHAPTER 2 113
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ NEWSV
Description
This user subroutine allows the new values of any state variable to be defined at the
end of the current step. When not using the table driven input format, it is called in
a loop over all the elements in the mesh when the CHANGE STATE option appears
in the model definition or the history definition set with a 2 in the second field of
the second data block of that option. When using the table driven input, it is called
for those elements specified in the CHANGE STATE model definition option, if a 7
is given in the second field of the second data block and the boundary condition is
activated by the LOADCASE option.
Format
User subroutine NEWSV is written with the following headers:
SUBROUTINE NEWSV(SV,LAYERS,INTPTS,M,ID)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION SV(LAYERS,INTPTS)
user coding
RETURN
END
where:
Input:
LAYERS is the number of layers through the thickness if this is a shell element, of
the number of points in the cross-section if this is a beam element. It is 1
for a continuum element.
INTPTS is the number of integration points in this element if the ALL POINTS
parameter is used. If the CENTROID parameter is used, INTPTS=1.
M is the user element number. The internal element number is obtained as
mint = ielint(m)
ID is the state variable number (from columns 1-5 of the second data block of
the CHANGE STATE set [model definition or history definition]).
Main Index
Main Index
114 Marc Volume D: User Subroutines and Special Routines
Required Output:
SV is the array of new values of this state variable; to be defined here for this
element by the user.
Note: If the user wants to define the state variable values as the function of time, the updated
total time is available by adding the include statement in this subroutine. For example:
include ’path/common/creeps’
within ’creeps’:
cptim is the total time at the end of the last step.
timinc is the time increment at the current step.
Main Index
Main Index
CHAPTER 2 115
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ USSD
Description
The USSD user subroutine allows the user to input the spectral density function for
the frequencies required in the spectrum response calculation. These frequencies
are obtained by performing a modal analysis.
Format
User subroutine USSD is written with the following headers:
SUBROUTINE USSD(SD,OMEG,I)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
OMEG is the frequency in cycles per time unit.
I is the degree of freedom.
Required Output:
SD is the spectral response density for the Ith degree of freedom to be defined
by the user.
Main Index
Main Index
116 Marc Volume D: User Subroutines and Special Routines
■ USINC
Description
This user subroutine allows the user to input initial displacements, velocities, and
accelerations for dynamic stress analysis, initial temperatures for heat transfer
analysis or thermal stress analysis, temperature history for thermal stress analysis,
or initial pressure. The user must supply the values for all degrees of freedom in
vector F. This user subroutine is used with either the INITIAL DISP, INITIAL VEL,
INITIAL TEMP, or INIT PRESSURE model definition options, or the POINT TEMP
model and history definition options. It is called for every node in the structure if it
is used.
Format
User subroutine USINC is written with the following headers:
SUBROUTINE USINC(F,N,NDEG,IFLAG)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION F(NDEG)
user coding
RETURN
END
where:
F is the vector of initial conditions or point temperatures to be given by the user.
N is the node number.
NDEG is the number of degrees of freedom per node.
IFLAG is the flag that indicates the type of data that must be supplied.
= 1 initial displacement.
= 2 initial velocities.
= 3 initial temperatures.
= 4 initial accelerations.
= 5 point temperatures (only for thermal stress analysis).
= 7 initial pressure (only for diffusion analysis).
Main Index
Main Index
CHAPTER 2 117
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ USDATA
Description
This user subroutine is a mechanism to allow the user to read data into a user-
defined common block. This common block is stored on the restart file, and
available in subsequent increments. The common block USDACM must be given the
correct length in this user subroutine. This common block can also be used in any
other user subroutine.
Format
User subroutine USDATA is written with the following headers:
SUBROUTINE USDATA(KIN,KOU,IC)
COMMON/USDACM/MYDATA
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
KIN is the unit number for input, usually 5.
IC is the reader flag.
= 1 pre-reader.
= 2 real reader.
Required Output:
KOU is unit number for output, usually 6.
Note that the maximum length of USDACM should be defined here. It should agree in
length in real *4 words as with that given on the USDATA model definition option.
Main Index
Main Index
118 Marc Volume D: User Subroutines and Special Routines
■ UTIMESTEP
Description
This user subroutine allows the user to specify the time step when the AUTO STEP
load stepping scheme is used
Format
User subroutine UTIMESTEP is written with the following headers:
SUBROUTINE UTIMESTEP(TIMESTEP,TIMESTEPOLD,ICALL,
$ TIME,TIMELOADCASE)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
TIMESTEP is the current time step as suggested by the program and which can
be modified in this routine.
TIMESTEPOLD is the current time step before it was modified by the program.
ICALL is a flag for when the routine is called.
= 1 for setting the initial time step during the reader phase.
= 2 if this routine is called during an increment
= 3 if this routine is called at the beginning of the increment
TIME time at the start of the current increment
TIMELOADCASE time period of the current load case
Required Output:
TIMESTEP is the current time step as suggested by the program and which can
be modified in this routine.
This routine is called right after the time step has (possibly) been updated by the
program at different stages in the analysis depending on the value of ICALL. It is
allowed, but in general not recommended, to increase the time step during an
increment (ICALL=2). Note that only the variable TIMESTEP should be modified in
this routine.
Main Index
Main Index
CHAPTER 2 119
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UVELOC
Description
In heat diffusion-convection, it is sometimes necessary to include a position
dependent velocity field. The UVELOC user subroutine, which is called for each
node, allows the user the specification or redefinition of previously specified nodal
velocity vectors. The inclusion of convection is activated on the HEAT parameter.
This user subroutine should not be used in a coupled fluid-thermal analysis, as the
velocities are calculated by Marc.
Format
User subroutine UVELOC is written with the following headers:
SUBROUTINE UVELOC (VELOC,COORD,NCRD,NODE)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION VELOC (NCRD),COORD(NCRD)
user coding
RETURN
END
where:
Input:
COORD is the array of coordinates at this node.
NCRD is the number of coordinates.
NODE is the node number.
Required Output:
VELOC is the array of nodal velocity components to be defined.
Main Index
Main Index
120 Marc Volume D: User Subroutines and Special Routines
■ MOTION (2-D)
Description
This user subroutine allows the definition of nonuniform rigid surface motions, in
conjunction with the CONTACT option. Its call is triggered by the UMOTION model
definition option. This user subroutine should only be used with velocity controlled
rigid surfaces.
The MOTION user subroutine is called during the calculations at the beginning of
each time increment and the user return the surface velocities for that increment.
Imposed displacement increments at nodal points in contact with rigid surfaces are
obtained from the velocity multiplied by the time increment. The surface path
becomes an explicit forward integration of velocities. Therefore, caution should be
taken when there are abrupt changes in surface path direction or abrupt changes in
velocity by
CAUTION: Please note that if the coordinates of the center of rotation are defined
unconditionally in this routine, they will be set to that same value for all increments
of the analysis, causing the rigid surface to rotate around a fixed point in space. On
the other hand, if the position of the center of rotation is defined only once in
increment 0, as in
if(inc.eq.0) then
x(1)=...
etc.
endif
the center of the rotation is updated internally as motion and deformation take
place. Obviously, the results will be different for the two cases.
If, at the start of the analysis, a surface is placed apart from the body to be deformed,
the MOTION user subroutine is also used in the approaching phase.
If two-dimensional elements are being used, the surfaces have rigid body motions
in two dimensions. It is assumed that such motions can be defined by a translation
of a point (the center of rotation), plus a rotation around that point.
Main Index
Main Index
CHAPTER 2 121
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format
User subroutine MOTION is written with the following headers:
SUBROUTINE MOTION (X,F,V,TIME,DTIME,NSURF,INC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION X(*),V(*),F(*)
user coding
RETURN
END
where:
Input:
X(3) is the array of current die defining coordinates.
X(1) = first coordinate of center of rotation.
X(2) = second coordinate of center of rotation.
X(3) = angle rotated around z-axis.
F(3) is the array of current surface loads.
F(1) = first component of load.
F(2) = second component of load.
F(3) = moment.
TIME is the time at which data is requested.
DTIME is the current time increment.
NSURF is the surface number for which data is requested.
INC is the increment number.
Required Output:
V(3) is the array of current surface velocities.
V(1) = first component of the velocity at the center of rotation.
V(2) = second component of the velocity at the center of
rotation.
V(3) = angular velocity.
Main Index
Main Index
122 Marc Volume D: User Subroutines and Special Routines
Example
Assume that a rigid surface is identified as surface number 1, and is moving in the
negative x-direction with a velocity of 1.0. The MOTION user subroutine can be
written as follows:
SUBROUTINE MOTION(X,F,V,TIME,DTIME,NSURF,INC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION X(*),V(*),F(*)
IF(NSURF.EQ.1) THEN
V(1)=-1.
V(2)=0.
V(3)=0.
ENDIF
RETURN
END
Main Index
Main Index
CHAPTER 2 123
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ MOTION (3-D)
Description
This user subroutine allows the definition of nonuniform rigid surface motions in
conjunction with the CONTACT option. Its call is triggered by the UMOTION model
definition option. This user subroutine should only be used with velocity controlled
rigid surfaces.
The MOTION user subroutine is called during the calculations at the beginning of
each time increment and the user’s return surface velocities for that increment.
Imposed displacement increments at nodal points in contact with rigid surfaces are
obtained from the velocity multiplied by the time increment. The surface path
becomes an explicit forward integration of velocities. Therefore, caution should be
taken when there are abrupt changes in surface path direction or abrupt changes in
velocity by making time increments as small as necessary.
CAUTION: Please note that if the coordinates of the center of rotation are defined
unconditionally in this routine, they will be set to that same value for all increments
of the analysis, causing the rigid surface to rotate around a fixed point in space. On
the other hand, if the position of the center of rotation is defined only once in
increment 0, as in
if(inc.eq.0) then
x(1)=...
etc.
endif
the center of the rotation is updated internally as motion and deformation take
place. Obviously, the results will be different for the two cases.
If, at the start of the analysis, a rigid surface is placed apart from the deformable
body, the MOTION user subroutine is also used in the approaching phase.
If three-dimensional elements are used, the surfaces have rigid body motions in
three dimensions. It is assumed that such motions can be defined by a translation
of a point (the center of rotation), plus a rotation about the axis of rotation through
that point.
Main Index
Main Index
124 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine MOTION is written with the following headers:
SUBROUTINE MOTION (X,F,V,TIME,DTIME,NSURF,INC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION X(*),V(*),F(*)
user coding
RETURN
END
where:
Input:
X(6) is the array of current die defining coordinates.
X(1) = first coordinate of center of rotation.
X(2) = second coordinate of center of rotation.
X(3) = third coordinate of center of rotation.
Axis for specifying angular velocity:
X(4) = first component of direction cosine.
X(5) = second component of direction cosine.
X(6) = third component of direction cosine.
F(6) is the array of current surface loads.
F(1) = first component of load.
F(2) = second component of load.
F(3) = third component of load.
F(4) = first component of moment.
F(5) = second component of moment.
F(6) = third component of moment.
TIME is the time at which data is requested.
DTIME is the current time increment.
NSURF is the surface number for which data is requested.
INC is the increment number.
Required Output:
V(4) is the array of current surface velocities.
V(1) = first component of the velocity at the center of rotation.
V(2) = second component of the velocity at the center of rotation.
V(3) = third component of the velocity at the center of radiation.
V(4) = angular velocity around axis defined above with X(4),
X(5), and X(6).
Main Index
Main Index
CHAPTER 2 125
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Example
Assume that a rigid surface is identified as surface number 2 and is moving in the
negative x-direction with a velocity of 1.0. The MOTION user subroutine can be
written as follows:
SUBROUTINE MOTION(X,F,V,TIME,DTIME,NSURF,INC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION X(*),V(*),F(*)
IF(NSURF.NE.2) THEN
V(1)=-1.
V(2)=0.
V(3)=0.
V(4)=0.0
ENDIF
RETURN
END
Main Index
Main Index
126 Marc Volume D: User Subroutines and Special Routines
■ UGROWRIGID
Description
This user subroutine is called when the flag on the UMOTION model definition
option is turned on. The user can define the size of the rigid body as a function
of time.
Format
User subroutine UGROWRIGID is written with the following headers:
SUBROUTINE UGROWRIGID(MD,RELX,RELY,RELZ,TIME)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
MD is the rigid body number.
TIME is the time at which data is requested.
Required Output:
RELX is the relative size defined by the user in the x-direction with
respect to the original size.
RELY is the relative size defined by the user in the y-direction with
respect to the original size.
RELZ is the relative size defined by the user in the z-direction with
respect to the original size.
Note: (1) RELX, RELY, and RELZ must be equal to one another if a rotation is applied to
the rigid body.
(2) At time = 0, RELX = RELY = RELZ = 1.0.
Main Index
Main Index
CHAPTER 2 127
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UFRIC
Description
With this user subroutine, the user can define the variable friction coefficients or
friction factors in conjunction with the CONTACT model definition option. Its call
is triggered by the UFRICTION option.
For distributed based friction, the UFRIC user subroutine is called for every element
containing nodes that are in contact with surfaces at the nodes. These calls are made
every iteration both during the assembly phase and during the stress recovery
phase.
In case of the variable IFRIC = 1, 3 or 7, a constant shear friction model is
enacted and the user returns a friction factor m defined in the equation:
ft = -m ky t
where:
ft is the shear friction force being applied.
m is the friction factor.
ky is the shear flow stress of the material being deformed.
t is the tangent unit vector in the direction of relative sliding velocity.
ft = -μ fn t
where:
μ is the friction coefficient.
fn is the normal stress/force at the point of contact.
IFRICis the friction type based upon the 4th field of the 2nd data block of the
UFRICTION option.
Main Index
Main Index
128 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine UFRIC is written with the following headers:
SUBROUTINE UFRIC
(MIBODY,X,FN,VREL,TEMP,YIEL,FRIC,TIME,INC,NSURF)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION X(2),MIBODY(4),VREL(1),TEMP(2)
user coding
RETURN
END
where
Input:
Main Index
Main Index
CHAPTER 2 129
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UFRICBBC
Description
This user subroutine allows the user to define variable friction coefficients for
beam-to-beam contact, similar to the UFRIC user subroutine. Like the UFRIC user
subroutine, UFRICBBC is used in conjunction with the CONTACT model definition
option and its call is triggered by the UFRICTION model definition option . Unlike
the UFRIC user subroutine, however, UFRICBBC is called for every beam or truss
element that is in contact with another beam or truss element. These calls are made
every iteration both during the assembly phase and during the stress recovery
phase. If beam elements contact with other beam elements and some of the nodes
of these beam elements contact with rigid surfaces or with the faces of continuum
or shell elements, the UFRIC user subroutine is called for every node in contact and
the UFRICBBC user subroutine is called for every beam element in contact.
Since only the Coulomb friction model is supported by the beam-to-beam
contact option, the subroutine must return the friction coefficient μ defined by
the equation:
ft = -μ fn t
where:
ft is the friction force at the contact point on the touching element.
μ is the friction coefficient.
fn is the normal force at the contact point on the touching element.
t is -v/|v|, where v is the relative velocity of the contact point on the touching
element with respect to the contact point on the touched element.
Also See
The UFRIC user subroutine.
Main Index
Main Index
130 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine UFRICBBC is written with the following headers:
SUBROUTINE UFRICBBC(MIBODY1,DPOS1,X1,TEMP1,
MIBODY2,DPOS2,X2,TEMP2,
FN,VREL,TIME,TIMINC,INC,FRIC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MIBODY1(3),X1(3),MIBODY2(3),X2(3),VREL(2)
user coding
RETURN
END
where
Input:
Touching point:
MIBODY1(1) is the user number of the touching element.
MIBODY1(2) is the internal number of the touching element.
MIBODY1(3) is the number of the touching body.
DPOS1 is the natural coordinate (between 0 and 1) of the touching point on the
touching element.
X1 are the updated coordinates of the touching point.
TEMP1 is the temperature of the touching point.
Touched point:
MIBODY2(1) is the user number of the touched element.
MIBODY2(2) is the internal number of the touched element.
MIBODY2(3) is the number of the touched body.
DPOS2 is the natural coordinate (between 0 and 1) of the touched point on the
touched element.
X2 are the updated coordinates of the touched point.
TEMP2 is the temperature of the touched point.
Other input:
FN is the normal force being applied at that point.
VREL is the relative sliding velocity of the touching point with respect to the
touched point.
TIME is the time at the beginning of the increment.
TIMINC is the current time increment.
INC is the increment number.
FRIC is the friction coefficient.
Required Output:
FRIC is the friction coefficient.
Main Index
Main Index
CHAPTER 2 131
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ DIGEOM
Description
In three-dimensional problems in which complicated rigid surfaces need to be
entered, it might be easier to define them with other software aids, such as a CAD
system or an FEA preprocessor. In such cases, this user subroutine lets the user
enter the geometry directly. This user subroutine is used in conjunction with the
CONTACT option for three-dimensional problems only.
Rigid surfaces are normally entered by means of several geometrical entities. If the
discrete representation is used these are internally subdivided into 4-point patches.
This user subroutine allows the user to directly enter the coordinates associated
with each patch.
The DIGEOM user subroutine is called for every geometrical entity of type 7 (patch)
for which the Fortran logical unit from where data is read is declared as -1.
Format
User subroutine DIGEOM is written with the following headers:
SUBROUTINE DIGEOM (IPATCH,NDIE,XYZ,NPATCH)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XYZ(3,4)
user coding
RETURN
END
where:
Input:
IPATCH is the current patch number of this entity.
NDIE is the surface (body) number.
NPATCH is the total number of patches defining this entity.
Required Output:
XYZ are the three (x, y, z) coordinates of the four points of the patch to be
entered by the user.
Main Index
Main Index
132 Marc Volume D: User Subroutines and Special Routines
■ SEPFOR
Description
This user subroutine allows the definition of the separation force in conjunction
with the CONTACT model definition option. The separation forces, FNORM and
FTANG, are either calculated by Marc or entered through the CONTACT option, and
then passed into this user subroutine. The user decides whether these values at the
current increment are appropriate to determine whether separation occurs.
FNORM is the normal reaction force above which a node in contact separates from a
surface. Any compressive or negative value indicates real contact while a positive
reaction force indicates a tendency to separate. The default is taken as the maximum
value of the residual force in the structure for the current increment. This value can
be reset by the user through the input format. Defining a too small value can result
in an increased number of iterations. Defining a very large value eliminates the
possibility of separation. FTANG is the tangential force used to determine whether a
nodal point positioned at a convex corner of surface should be sliding from patch to
patch or remaining on its current patch. The default value is half of FNORM. These
two default reaction forces vary from increment to increment.
Format
User subroutine SEPFOR is written with the following headers:
SUBROUTINE SEPFOR (FNORM,FTANG,IBODY,NNODE,INC)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
IBODY is the current body number the node touched.
NNODE is the current touched external node number.
INC is the current increment number.
Main Index
Main Index
CHAPTER 2 133
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Output:
FNORM is the normal separation force to be supplied by the user.
FTANG is the tangential separation force to be supplied by the user.
Example
If the user desires the default separation force for surface 2, and does not want any
separation of nodes from surface 3, the user subroutine is written as follows:
SUBROUTINE SEPFOR (FNORM,FTANG,IBODY,NNODE,INC)
IMPLICIT REAL *8 (A-H, O-Z)
IF(IBODY.NE.3)GO TO 999
C RESET FNORM TO A VERY LARGE VALUE TO ELIMINATE
C POSSIBILITY OF SEPARATION
FNORM=2.E7
C
WRITE(6,101) IBODY,FNORM,NNODE,INC
101 FORMAT(‘THE SEPARATION FORCE OF BODY ‘,15,
*HAS BEEN RESET TO BE ‘,E15.5,
*FOR NODE ‘,15,’ AT INCREMENT ‘,15)
999 CONTINUE
RETURN
END
Main Index
Main Index
134 Marc Volume D: User Subroutines and Special Routines
■ SEPFORBBC
Description
This user subroutine allows the definition of the separation force for beam-to-beam
contact, similar to the SEPFOR user subroutine. Like SEPFOR, SEPFORBBC is used
in conjunction with the CONTACT model definition option. Unlike the SEPFOR user
subroutine, however, SEPFORBBC is called for every beam or truss element that is
in contact with another beam or truss element. If beam elements contact with other
beam elements and some of the nodes of these beam elements contact with rigid
surfaces or with the faces of continuum or shell elements, then the SEPFOR user
subroutine is called for every node in contact and the SEPFORBBC user subroutine
is called for every beam element in contact.
The FSEP separation force is either calculated by Marc or entered through the
CONTACT or CONTACT TABLE option, and then passed into this user subroutine. It
is the normal reaction force above which a beam element in contact separates from
another beam element. Any compressive or negative value indicates real contact
while a positive force indicates a tendency to separate. The user decides whether
these values at the current increment are appropriate to determine whether
separation occurs. The default separation force calculated by Marc is the maximum
value of the residual force in the structure for the current increment.
Also See
The SEPFOR user subroutine.
Format
User subroutine SEPFORBBC is written with the following headers:
SUBROUTINE SEPFORBBC(MIBODY1,MIBODY2,TIME,TIMINC,INC,FSEP)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MIBODY1(3),MIBODY2(3)
user coding
RETURN
END
Main Index
Main Index
CHAPTER 2 135
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
where:
Input:
Touching element:
MIBODY1(1) is the user number of the touching element.
MIBODY1(2) is the internal number of the touching element.
MIBODY1(3) is the number of the touching body.
Touched element:
MIBODY2(1) is the user number of the touched element.
MIBODY2(2) is the internal number of the touched element.
MIBODY2(3) is the number of the touched body.
Other input:
TIME is the time at the beginning of the increment.
TIMINC is the current time increment.
INC is the increment number.
FSEP is the separation force.
Required Output:
FSEP is the separation force.
Main Index
Main Index
136 Marc Volume D: User Subroutines and Special Routines
■ SEPSTR
Description
This user subroutine allows the definition of the separation stress in conjunction
with the CONTACT model definition option. The separation stresses, SNORM and
STANG, are either calculated by Marc or entered through the CONTACT option, and
then passed into this user subroutine. The user decides whether these values at the
current increment are appropriate to determine whether separation occurs.
SNORM is the stress normal to the surface above which a node in contact separates
from another body. Any compressive or negative value indicates real contact while
a positive stress indicates a tendency to separate. The default is taken as the
maximum value of the residual force in the structure for the current increment
divided by an effective area. This value can be reset by the user through the input
format. Defining a too small value can result in an increased number of iterations.
Defining a very large value eliminates the possibility of separation. STANG is the
tangential stress used to determine whether a nodal point positioned at a convex
corner of surface should be sliding from patch to patch or remaining on its current
patch. The default value is half of SNORM. These two default values vary from
increment to increment.
Format
User subroutine SEPSTR is written with the following headers:
SUBROUTINE SEPSTR (SNORM,STANG,IBODY,NNODE,INC)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
IBODY is the current body number the node touched.
NNODE is the current touched external node number.
INC is the current increment number.
Main Index
Main Index
CHAPTER 2 137
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Output:
SNORM is the normal separation stress to be supplied by the user.
STANG is the tangential separation stress to be supplied by the user.
Main Index
Main Index
138 Marc Volume D: User Subroutines and Special Routines
■ UHTCOE
Description
This user subroutine allows the definition of variable film coefficients and sink
temperatures on free surfaces, in conjunction with the CONTACT option and the
COUPLE parameter. Its call is triggered by the UHTCOEF option.
The UHTCOE user subroutine is called at every element surface containing nodes
that are on a free body boundary and for each surface at the trapezoidal rule
integration points (that is, the nodes). These calls are made every iteration both
during the assembly phase and the recovery phase of the heat transfer pass of a
coupled analysis.
A distributed heat flux is being calculated according to the equation:
q = H(T - TS)
where:
q is the heat flux entering the surface.
T is the surface temperature.
TS is the sink temperature.
H is the film coefficient.
By modifying H and TS, the user can model varying heat transfer conditions along
the boundary. Special attention has been given to provide the user the capability of
simulating radiation heat transfer, by making available the location and
temperatures of all the surfaces in the environment.
The user can either specify H and TS or specify the flux q directly which is treated
strictly as such.
Main Index
Main Index
CHAPTER 2 139
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format
User subroutine UHTCOE is written with the following headers:
SUBROUTINE UHTCOE(MIBODY,XP,TEMP,IBODY,ICONNO,XORD,XT,DXT,
+ TMPALL,TMPALO,TOTINC,TIMINC,INC,NCRD,
+ NDEGS,NDEGH,NCRDMX,NDEGMX,NBCD,NBCN,TSINK,
+ HTCOEF,IFLAG)
IMPLICIT REAL *8(A-H,O-Z)
DIMENSION MIBODY(*),XP(*),ICONNO(*),XORD(*),XT(*),DXT(*),
+ TEMP(*),TMPALL(*),NBCD(*),,TSINK(*),TMPALO(*)
user coding
RETURN
END
where:
Input:
MIBODY(1) is the element number where the surface flux is being calculated.
MIBODY(2) is the side of the element.
MIBODY(3) is the integration point of said side.
MIBODY(4) is the internal element number.
XP(NCRD) are the coordinates of point where calculation is being made; it is
updated to end of increment.
TEMP(2) is the current temperature of said point.
TEMP(4) is the current voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
ICONNO(*) are the nodal points that make up the boundary of the deformable
surfaces declared in the CONTACT option.
NBCN is the upper bound to the number of nodes on a flexible
surface boundary.
NBCD(*) is the array of actual number of boundary nodes on flexible surfaces.
XORD(*) is the array of original nodal point coordinates.
XT(*) is the array of nodal point displacements.
DXT(*) is the array of nodal displacement increments.
TMPALL(*) is the array of nodal temperatures (current estimate at end of increment).
TMPALO(*) is the array of nodal temperatures (at beginning of increment).
TOTINC is the current accumulated time.
Main Index
Main Index
140 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 141
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UHTCON
Description
This user subroutine allows the definition of variable film coefficients of surfaces
that are in contact with other surfaces in conjunction with the CONTACT option and
COUPLE parameter. Its call is triggered by the UHTCON option.
The UHTCON user subroutine is called at every element surface containing nodes
that are on a body boundary that is in contact, and for each surface at the trapezoidal
rule integration points (that is, the nodes). These calls are made every iteration
during both the assembly phase and the stress recovery phase of the heat transfer
pass of a coupled analysis.
A distributed heat flux is being calculated according to the equation
q = HD(T - TD)
where:
q is the heat flux entering the surface.
T is the surface temperature.
TD is an interpolated temperature of the body being contacted.
HD is the film coefficient.
By modifying HD, the user can model varying heat transfer conditions along the
contact regions.
Format
User subroutine UHTCON is written with the following headers:
SUBROUTINE UHTCON(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,
+TIMINC,INC,NCRD,NDEG,TSINK,HTCOEF)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MIBODY(4),XP(*),TMEP(*),TSINK(*)
user coding
RETURN
END
Main Index
Main Index
142 Marc Volume D: User Subroutines and Special Routines
where:
Input:
MIBODY(1) is the element where the surface flux is being calculated.
MIBODY(2) is the side of said element.
MIBODY(3) is the integration point of said side.
MIBODY(4) is the internal element number.
XP(NCRD) is the coordinates of point where calculation is being made; it is
updated to end of increment.
TEMP(2) is the temperature of said pointer.
TEMP(4) is the voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
IOBODY is the surface being contacted.
FN is the contact pressure between contacting surfaces.
TOTINC is the current accumulated time.
TIMINC is the time increment.
INC is the current increment.
NCRD is the number of coordinates per node.
NDEG is the number of degrees of freedom per node.
TSINK(2) is the temperature of surface being contacted.
TSINK(4) is the voltage of surface being contacted.
TSINK(5) is the pressure of surface being contacted.
Required Output:
HTCOEF is the heat transfer coefficient between surfaces in contact, such that
the heat flux per unit area that leaves the surface is:
Main Index
Main Index
CHAPTER 2 143
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UDAMAGE_INDICATOR
Description
Different from UDAMAG, this user subroutine allows you to calculate a damage
indicator to show in postprocessing. The indicator does not affect material
properties but can be used to remove elements to show crack propagation. It is used
only with Cockroft-Latham, Oyane and Principal damage criteria.
Format
User subroutine UDAMAG_INDICATOR is written with the following header lines:
SUBROUTINE UDAMAGE_INDICATOR(DAMDAT,DAMFAC,S,SRATE,
ESTRS,NDI,NSHEAR,M,NN,
KCUS,DTIME,DAMFLAG,IFLAG)
INCLUDE '../COMMON/IMPLICIT'
C* * * * * *
C USER DEFINED DAMAGE INDICATOR
C FOR MODELS USING COCKROFT,OYANE OR PRINCIPAL DAMAGE
CRITERIA
C NOTE:
C IF OTHER STATE VARIABLES ARE NEEDED, USE
C ELMVAR.F
DIMENSION DAMDAT(*),S(*),KCUS(*)
IFLAG=1
USER CODING
RETURN
END
where:
Input:
DAMDAT is the damage model input data
S is the stress array
SRATE is the equivalent plastic strain rate
ESTRS is the equivalent effective stress
M is the element number
Main Index
Main Index
144 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 145
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UHTNRC
Description
This user subroutine allows the definition of variable film coefficients of surfaces
that are almost in contact with other surfaces in conjuction with the CONTACT
option and COUPLE parameter. Its call is triggered by the UHTCON option.
The UHTNRC user subroutine is called at every element surface containing nodes
that are on a body boundary that is almost in contact, and for each surface at the
trapezoidal rule integration points (that is, the nodes). These calls are made every
iteration both during the assembly phase and the recovery phase of the heat transfer
pass of a coupled analysis.
A distributed heat flux is being calculated according to the equation:
HE X 4 4
q = HD ( T – TD ) + HDN ( T – TD ) + EMS ( T – TD )
where:
q is the heat flux entering the surface.
T is the surface temperature.
TD is the interpolated temperature of the body being contacted.
HD is the heat transfer coefficient between surfaces.
HDN is the heat transfer coefficient of natural convection between surfaces.
HEX is the exponent associated with natural convection between surfaces.
EMS is the emissivity for radiation calculation between surfaces.
HDC is the upper bound in distance dependent heat transfer coefficient.
HDD is the lower bound in distance dependent heat transfer coefficient.
d is the distance between the surfaces.
dn e a r is the upper limit of the near contact distance.
Main Index
Main Index
146 Marc Volume D: User Subroutines and Special Routines
By modifying HD, HDN, HEX, EMS, HDC, and HDD, the user can model varying heat transfer
conditions along the boundary, which are dependent of the distance between the
contacting surfaces.
Format
User subroutine UHTNRC is written with the following headers:
SUBROUTINE UHTNRC(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,
+ TIMINC,INC,NCRD,NDEG,TSINK,HTCOEF,
+ HTNAT,EXPNAT,EMIS,HDD,HC,D)
IMPLICIT REAL*8(A-H, O-Z)
DIMENSION MIBODY(4),XP(*),TEMP(*),TSINK(*)
RETURN
END
where:
Input:
MIBODY(1) is the element where the surface flux is being calculated.
MIBODY(2) is the side of said element.
MIBODY(3) is the integration point of said side.
XP(NCRD) is the coordinates of point where calculation is being made; it is updated
to end of increment.
TEMP(2) is the temperature of said point.
TEMP(4) is the voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
IOBODY is the surface being contacted.
FN is the contact pressure between contacting surfaces.
TOTINC is the current accumulated time.
TIMINC is the time increment.
INC is the current increment.
NCRD is the number of coordinates per node.
NDEG is the number of degrees of freedom per node.
TSINK(2) is the temperature of surface being contacted.
TSINK(4) is the voltage of surface being contacted.
TSINK(5) is the pressure of surface being contacted.
Main Index
Main Index
CHAPTER 2 147
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
148 Marc Volume D: User Subroutines and Special Routines
■ UVTCOE
Description
This subroutine allows the definition of variable electrical film coefficients and sink
voltage of free surfaces, in conjunction with the CONTACT option and JOULE
parameter. Its call is triggered by the UHTCOEF option.
The UVTCOE user subroutine is called at every element surface containing nodes
that are on a free body boundary and for each surface at the trapezoidal rule
integration points (that is, the nodes). These calls are made every iteration both
during the assembly phase and the recovery phase of the electrical pass of a coupled
structural-Joule heating analysis.
A distributed electrical heat flux is being calculated according to the equation:
q = H ( V – VS )
where:
q is the electrical flux entering the surface.
V is the surface voltage.
VS is the sink voltage.
H is the film coefficient.
By modifying H and VS, the user can model varying electrical transfer conditions
along the boundary. Special attention has been given to provide the user the
capability of simulating complex behavior, by making available the location and
temperatures of all the surfaces in the environment.
The user can either specify H or VS or specify the flux q directly which is treated
strictly as such.
Main Index
Main Index
CHAPTER 2 149
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format
User subroutine UVTCOE is written with the following headers:
SUBROUTINE UVTCOE(MIBODY,XP,TEMP,IBODY,ICONNO,XORD,XT,DXT,
+ TMPALL,TMPALO,TOTINC,TIMINC,INC,NCRD,
+ NDEGS,NDEGH,NCRDMX,NDEGMX,NBCD,NBCN,TSINK,
+ ETCOEF,IFLAG)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MIBODY(*),XP(*),ICONNO(*),XORD(*),XT(*),DXT(*),
+ TEMP(*),TMPALL(*),NBCD(*),TSINK(*)
user coding
RETURN
END
where:
Input:
MIBODY(1) is the element where the surface flux is being calculated.
MIBODY(2) is the side of said element.
MIBODY(3) is the integration point of said side.
MIBODY(4) is the internal element number.
XP(NCRD) is the coordinates of point where calculation is being made; it is updated
to end of increment.
TEMP(2) is the temperature of said point.
TEMP(4) is the voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
ICONNO(*) are the nodal points that make the boundary of deformable surfaces
declared in option contact.
NBCN is the upper bound to the number on nodes on a flexible
surface boundary.
NBCD(*) is the array of actual number of boundary nodes on flexible surfaces.
XORD(*) is the array of original nodal point coordinates.
XT(*) is the array of nodal point displacements.
DXT(*) is the array of nodal displacement increments.
TMPALL(*) is the array of nodal voltage (current estimate at end of increment).
TMPALO(*) is the array of nodal voltage (at beginning of increment).
Main Index
Main Index
150 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 151
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UVTCON
Description
This subroutine allows the definition of variable electrical film coefficients of
surfaces that are in contact with other surfaces in conjunction with the CONTACT
option and the JOULE parameter. Its call is triggered by the UHTCON option.
The UVTCON user subroutine is called at every element surface containing nodes
that are on a body boundary that is in contact, and for each surface at the trapezoidal
rule integration points (that is, the nodes). These calls are made every iteration
during both the assembly phase and the recovery phase of the electrical pass of a
coupled structural-Joule heating analysis.
A distributed heat flux is being calculated according to the equation:
q = HD ( V – VD )
where:
q is the electrical flux entering the surface.
V is the surface voltage.
VD is the interpolated voltage of the body being contacted.
HD is the film coefficient.
By modifying HD and VD, the user can model varying electrical transfer conditions
along the boundary.
Format
User subroutine UVTCON is written with the following headers:
SUBROUTINE UVTCON(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,
+ TIMINC,INC,NCRD,NDEG,TSINK,ETCOEF)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MIBODY(4),XP(*),TEMP(*),TSINK(*)
RETURN
END
Main Index
Main Index
152 Marc Volume D: User Subroutines and Special Routines
where:
Input:
MIBODY(1) is the element where the surface flux is being calculated.
MIBODY(2) is the side of said element.
MIBODY(3) is the integration point of said side.
XP(NCRD) are the coordinates of point where calculation is being made; it is
updated to end of increment.
TEMP(2) is the temperature of said point.
TEMP(4) is the voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
IOBODY is the surface being contacted.
FN is the contact pressure between contacting surfaces.
TOTINC is the current accumulated time.
TIMINC is the time increment.
INC is the current increment.
NCRD is the number of coordinates per node.
NDEG is the number of degrees of freedom per node.
TSINK(2) is the temperature of surface being contacted.
TSINK(4) is the voltage of surface being contacted.
TSINK(5) is the pressure of surface being contacted.
ETCOEF is the electrical transfer coefficient between surfaces in contact, such
that the electrical flux per unit area that leaves the surface is
TSINK(2) is the temperature of surface being contacted.
TSINK(4) is the voltage of surface being contacted.
TSINK(5) is the pressure of surface being contacted.
Required Output:
ETCOEF is the electrical transfer coefficient between surfaces in contact, such
that the electrical flux per unit area that leaves the surface is:
Main Index
Main Index
CHAPTER 2 153
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UVTNRC
Description
This subroutine allows the definition of variable electrical film coefficients of
surfaces that are almost in contact with other surfaces in conjuction with the
CONTACT option and the JOULE parameter. Its call is triggered by the UHTCON
option.
The UVTNRC user subroutine is called at every element surface containing nodes
that are on a body boundary that is almost in contact, and for each surface at the
trapezoidal rule integration points (that is, the nodes). These calls are made every
iteration both during the assembly phase and the recovery phase of the electrical
pass of a coupled structural-Joule heating analysis.
A distributed electrical flux is being calculated according to the equation:
where:
q is the electrical flux entering the surface.
V is the surface voltage.
VD is the interpolated voltage of the body being contacted.
ET is the electrical transfer coefficient between surfaces.
ETC is the upper bound in distance dependent electrical transfer coefficient.
EDD is the lower bound in distance dependent electrical transfer coefficient.
d is the distance between the surfaces.
dn e a r is the upper limit of the near contact distance.
By modifying ET, ETC and EDD, the user can model varying electrical transfer
conditions along the boundary, which are dependent of the distance between the
contacting surfaces.
Main Index
Main Index
154 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine UVTNRC is written with the following headers:
SUBROUTINE UVTNRC(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,
+ TIMINC,INC,NCRD,NDEG,TEMPO,ETCOEF,ETDD,ETC,D)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION MIBODY(4),XP(*),TEMP(*),TEMPO(*)
RETURN
END
where:
Input:
MIBODY(1) is the element where the surface flux is being calculated.
MIBODY(2) is the side of said element.
MIBODY(3) is the integration point of said side.
XP(NCRD) is the coordinates of point where calculation is being made; it is updated
to end of increment.
TEMP(2) is the temperature of said point.
TEMP(4) is the voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
IOBODY is the surface being contacted.
FN is the contact pressure between contacting surfaces.
TOTINC is the current accumulated time.
TIMINC is the time increment.
INC is the current increment.
NCRD is the number of coordinates per node.
NDEG is the number of degrees of freedom per node.
TEMPO(2) is the temperature of surface being contacted.
TEMPO(4) is the voltage of surface being contacted.
TEMPO(5) is the pressure of surface being contacted.
D is the distance between the surfaces.
Main Index
Main Index
CHAPTER 2 155
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Output:
ETCOEF is the electrical transfer coefficient between surfaces in contact.
ETDD is the lower bound of the distance dependent electrical
transfer coefficient.
ETC is the upper bound of the distance dependent electrical transfer
coefficient, such that the electrical flux per unit area that leaves the
surface is
Main Index
Main Index
156 Marc Volume D: User Subroutines and Special Routines
■ UMDCOE
q = H(P - PS)
where:
q is the mass flux entering the surface.
P is the surface pressure.
PS is the sink pressure.
H is the film coefficient.
By modifying H and PS, the user can model varying mass diffusion conditions along
the boundary.
The user can either specify H and PS or specify the flux q directly which is treated
strictly as such.
Format
User subroutine UMDCOE is written with the following headers:
SUBROUTINE UMDCOE(MIBODY,XP,TEMP,IBODY,NF,XORD,XT,DXT,
+PRSALL,PRSALO,TOTINC,TIMINC,INC,NCRD,NDEGS,NDEGH,NCRDMX,
+NDEGMX,NBCD,NBCN,TSINK,PRCOEF,IFLAG)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MIBODY(4),XP(1),NF(NBCN,1),XORD(NCRDMX,*),
+XT(NDEGMX,*),DXT(NDEGMX,*),TMPALL(1),NBCD(1),PRSPALO(1),
+TEMP(*),TSINK(*)
Main Index
Main Index
CHAPTER 2 157
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
user coding
RETURN
END
where:
MIBODY(1) is the element where the surface flux is being calculated.
MIBODY(2) is the side of said element.
MIBODY(3) is the integration point of said side.
MIBODY(4) is the internal element number.
XP(NCRD) are the coordinates of point where calculation is being made, updated to
end of increment.
TEMP(2) is the temperature of said point.
TEMP(4) is the voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
NF(NBCN,1) are the nodal points that make the boundary of deformable surfaces
declared in the CONTACT option.
NBCN is the upper bound to the number of nodes on a flexible surface
boundary.
NBCD(1) is the array of actual number of boundary nodes on flexible surfaces.
XORD(1) is the array of original nodal point coordinates.
XT(1) is the array of nodal point displacements.
DXT(1) is the array of nodal displacement increments.
PRSALL(1) is the array of nodal pressure (current estimate at end of increment).
PRSALO(1) is the array of nodal pressure (at beginning of increment).
TOTINC is the current accumulated time.
TIMINC is the time increment.
INC is the increment number.
NCRD is the number of coordinates per node of this element.
NDEGS is the number of degrees of freedom per node for structural (stress) part
of the analysis.
NDEGH is the number of heat transfer degrees of freedom.
NCRDMX is the maximum number of coordinate per node in this model.
NDEGMX is the maximum number of structural degrees of freedom per node in
this model.
TSINK(2) is the sink temperature declared in contact option for this flexible surface.
Main Index
Main Index
158 Marc Volume D: User Subroutines and Special Routines
TSINK(4) is the sink voltage declared in contact option for this flexible surface.
TSINK(5) is the sink pressure declared in contact option for this flexible surface.
IFLAG =0 PRCOEF is a heat transfer coefficient
=1 PRCOEF is a flux.
PRCOEF is the mass diffusion coefficient between surface and environment, such
that the mass flux per unit area that leaves the surface is:
Q = PRCOEF (TEMP(5) - TSINK(5))
or
the mass flux per unit area that leaves the surface.
PRCOEF is to be defined here.
Main Index
Main Index
CHAPTER 2 159
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UMDCON
Description
This user subroutine allows the definition of variable mass diffusion coefficients of
surfaces that are in contact with other surfaces in conjunction with the CONTACT
option and DIFFUSION or PYROLYSIS parameter. Its call is triggered by the
UHTCON option.
The UMDCON user subroutine is called at every element surface containing nodes
that are on a body boundary that is in contact, and for each surface at the trapezoidal
rule integration points (that is, the nodes). These calls are made every iteration both
during the assembly phase and the stress recovery phase of the mass diffusion pass
of an analysis.
A distributed mass flux is being calculated according to the equation:
q = PC(P - PD)
where:
q is the mass flux entering the surface.
P is the surface pressure.
PD is an interpolated pressure of the body being contacted
PC is the film coefficient.
By modifying HPD, the user can model varying heat transfer conditions along the
contact regions.
Format
User subroutine UMDCON is written with the following headers:
SUBROUTINE
UMDCON(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,TIMINC,
+INC,NCRD,NDEG,TSINK,PC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MIBODY(4),XP(1),TEMP(*),TSINK(*)
user coding
RETURN
END
Main Index
Main Index
160 Marc Volume D: User Subroutines and Special Routines
where:
MIBODY(1) is the element where the surface flux is being calculated.
MIBODY(2) is the side of said element.
MIBODY(3) is the integration point of said side.
MIBODY(4) is the internal element number.
XP(NCRD) are the coordinates of point where calculation is being made, updated to
end of increment.
TEMP(2) is the temperature of said point.
TEMP(4) is the voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
IOBODY is the surface being contacted.
FN is the contact pressure between contacting surfaces.
TOTINC is the current accumulated time.
TIMINC is the time increment.
INC is the increment number.
NCRD is the number of coordinates per node.
NDEG is the number of degrees of freedom per node.
TSINK(2) is the temperature of surface being contacted.
TSINK(4) is the voltage of surface being contacted.
TSINK(5) is the pressure of surface being contacted.
PC is the heat transfer coefficient between surface in contact, such that the
heat flux per unit area that leaves the surface is:
Q = PC (P-PD)
Main Index
Main Index
CHAPTER 2 161
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UMDNRC
Description
The UMDNRC user subroutine allows the definition of the convection between
surfaces that are nearly in contact. If the surfaces are not close to one another, the
convective coefficients defined by the UMDCOE user subroutine will be used. If the
surfaces are in contact, then the values from UHTCON will be used. The CONTACT
option and UHTCON option must be included.
The UMDNRC user subroutine is called at every element surface containing nodes
that are on the boundary that are also close to contact. These calls are made every
iteration during both the assembly phase and the recovery phase of the mass
diffusion pass of an analysis.
A distributed heat flux is being calculated according to the equation
Q = PRCOEF * ( P2 – P1 ) + PRDD * ( P2 – P1 )
where:
PRCOEF are provided by the user.
P2, P1 are the pressure on the contacted surface and contacting surface respectively.
DN
PRDD = PRC – ( PRC – PRDD ) * ---------------------------
DQNEAR
DN is the normal distance between the current point and the closest surface.
DQNEAR is the distance at which bodies are considered to be near one another,
defined by user in the CONTACT TABLE option.
Main Index
Main Index
162 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine UMDNRC is written with the following headers:
SUBROUTINE UMDNRC(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,
* TIMINC,INC,NCRD,NDEG,TEMPO,PRCOEF,PRDD,PRC,DN)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION MIBODY(4),XP(*),TEMP(*),TEMPO(*)
user coding
RETURN
END
where:
Input:
MIBODY(1) is the element where the surface flux is being calculated.
MIBODY(2) is the side of said element.
MIBODY(3) is the integration point of said side.
TEMP(2) is the temperature of said point.
TEMP(4) is the voltage of said point.
TEMP(5) is the pressure of said point.
IBODY is the flexible surface to which point belongs.
IOBODY is the surface being contacted.
FN is the contact pressure between contacting surfaces.
TOTINC is the current accumulated time.
TIMINC is the time increment.
INC is the current increment.
NCRD is the number of coordinates per node.
NDEG is the number of degrees of freedom per node.
TEMPO(2) is the temperature of surface being contacted.
TEMPO(4) is the voltage of surface being contacted.
TEMPO(5) is the pressure of surface being contacted.
DN is the distance to the contact surface.
Required Output:
PRCOEF is the mass diffusion coefficient between surfaces almost in contact
PRDD is the lower bound on the distance dependent mass diffusion coefficient
PRC is the upper bound on the distance dependent mass diffusion coefficient,
usually equal to the contact mass diffusion coefficient
Main Index
Main Index
CHAPTER 2 163
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UNORST
Description
With this user subroutine, The user can define the normal stress at each node in
contact instead of using the extrapolated value from the integration points. It is only
called for user-defined elements and is used in the calculation of Coulomb friction
for contact analysis. The magnitude of the user-defined normal stress must be in the
local system of the patch to which the nodal point is in contact with.
Format
User subroutine UNORST is written with the following headers:
SUBROUTINE UNORST(STRINT,USTR,TRANS,NODE,IBODY,KCUS,
+ NDIE,NODCLS,LMM,NOD,M,N,TIMINC,NDIM,NDEG,NSTRMX,
NNODE,INTEL)
IMPLICIT REAL *8 (A-H, O-Z)
C
DIMENSION STRINT(8,INTEL),USTR(NDIM,1)
DIMENSION LMM(1),NODCLS(1),TRANS(3,3),KCUS(2)
user coding
C
C
RETURN
END
where:
Input:
STRINT (1-NSTRMX,INTEL) are the stresses at all integration points.
STRINT (NSTRMX+1,INTEL) is the temperature at all integration points.
STRINT (NSTRMX+2,INTEL) is the flow stress at all integration points.
USTR (2,NODE) is the current sliding velocity in the first local direction.
USTR(NSTRMX+1, NNODE) is the temperature at node.
USTR(NSTRMX+2, NNODE) is the flow stress at node.
Main Index
Main Index
164 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 165
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
166 Marc Volume D: User Subroutines and Special Routines
Example
SUBROUTINE UNORST(STRINT,USTR,TRANS,NODE,IBODY,KCUS,
+ NDIE,NODCLS,LMM,NOD,M,N,TIMINC,NDIM,NDEG,NSTRMX,NNODE,
INTEL)
INCLUDE ’../COMMON/IMPLICIT
DIMENSION
STRNOD(NDIM,NNODE),STRINT(8,INTEL),USTR(NDIM,1)
DIMENSION LMM(1),NODCLS(1),TRANS(3,3),KCUS(2)
RETURN
END
Main Index
Main Index
CHAPTER 2 167
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ INITPL
Description
This user subroutine allows the user to define initial values of equivalent plastic
strain. It is often necessary to enter the amount of previously accumulated plastic
strain. This initial value is only used in the work (strain) hardening calculation
when not using table driven input format it is called in a loop over all the elements
in the mesh when the INITIAL PLASTIC STRAIN option appears in the model
definition options with a two in the second field of the second data block of that
option. When using the table driven input, it is called for those elements specified
in the INITIAL PLASTIC STRAIN model definition option, if a 7 is given in the second
field of the second data block and the initial condition is activated by the
LOADCASE model definition option.
Format
User subroutine INITPL is written with the following headers:
SUBROUTINE INITPL(SV,LAYERS,INTPTS,M)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION SV(LAYERS,INTPTS)
user coding
RETURN
END
where:
Input:
LAYERS is the number of layers through the thickness if this is a shell element, or
the number of points in the cross section if this is a beam element. It is 1
for a continuum element.
INTPTS is the number of integration points in this element. It is 1 if the CENTROID
parameter is used.
M is the element number.
Required Output:
SV is the array of equivalent plastic strains, to be defined here for this
element by the user.
Main Index
Main Index
168 Marc Volume D: User Subroutines and Special Routines
■ INITPO
Description
This user subroutine allows the user to prescribe the initial pore pressure in an
uncoupled fluid-soil analysis. This user subroutine can only be used if an uncoupled
analysis is chosen on the PORE parameter, and the user subroutine is activated using
the INITIAL PORE model definition option.
Format
User subroutine INITPO is written with the following headers:
SUBROUTINE INITPO(POREP,INTPTS,M)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION POREP(INTPTS)
user coding
RETURN
END
where:
Input:
INTPTS is the number of integration points associated with this element.
M is the user’s element number.
Required Output:
POREP is the array of pore pressures to be defined for this element.
Main Index
Main Index
CHAPTER 2 169
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ NEWPO
Description
This user subroutine allows the user to modify the pore pressure in an uncoupled
fluid-soil analysis. This user subroutine can only be used if a coupled analysis is
chosen on the PORE parameter, and the user subroutine is activated using the
CHANGE PORE model definition option.
Format
User subroutine NEWPO is written with the following headers:
SUBROUTINE NEWPO(POREP,INTPTS,M)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION POREP(INTPTS)
user coding
RETURN
END
where:
Input:
INTPTS is the number of integration points associated with this element.
M is the user’s element number.
Required Output:
POREP is the array of pore pressures to be defined for this element.
Main Index
Main Index
170 Marc Volume D: User Subroutines and Special Routines
■ UREACB
Description
This user subroutine allows the user to redefine the reactive boundary coefficients
as a function of the frequency in a harmonic acoustic analysis. This data is normally
entered through the CONTACT (2-D) or (3-D) model definition option.
Format
User subroutine UREACB is written with the following headers:
SUBROUTINE UREACB(OXK1,OC1,FREQC,IBODYT,IBODYR)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
FREQC is the frequency in cycles per time.
IBODYT is the number of the acoustic body.
IBODYR is the number of the boundary body.
Required Output:
OXK1 = 1./k1 where k1 is the coefficient of reactive boundary.
OC1 = 1./c1 where c1 is the coefficient reactive boundary.
1 1 1 iω
Note that the complex admittance -------------
Z(ω)
is defined as ------------- = ----- + ------ ,
Z(ω) c1 k1
with ω the
frequency in radians per time and Z(ω) the complex impedance.
Main Index
Main Index
CHAPTER 2 171
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UCAV
Description
This user subroutine allows the user to define the pressure load for internal cavities.
It is called in every load increment of the analysis for every element in every cavity
in the model, allowing flexibility in the specification of new relations for cavity
pressure loads. This routine is only called if icavity-type = 9. See the DIST LOAD
model definition or Cavity Pressure Loading in Marc Volume A: Theory and User
Information.
Format
User subroutine UCAV is written with the following headers:
SUBROUTINE UCAV(ICAV,INC,NCYCLE,M,IBODY,VOL,VOLP,AMBPRES,
& GAMGAS,RPRESS,RTEMP,RDENS,CMASS,CTEMP,
PRESS)
IMPLICIT REAL*8 (A-H,O-Z)
User coding
RETURN
END
Note: AMBPRES, GAMGAS, RPRESS, RTEMP, and RDENS are from the CAVITY model
definition option.
where:
Input:
ICAV is the cavity id.
INC is the increment number.
NCYCLE is the cycle number.
M is the element number.
IBODY is the load type.
VOL is the cavity volume at the beginning of the increment.
VOLP is the cavity volume at beginning of previous increment.
Main Index
Main Index
172 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 173
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UOBJFN
Description
This user subroutine allows The user to define the objective function and its
gradient for design optimization analysis using the current values of the design
variables.
Format
User subroutine UOBJFN is written with the following headers:
SUBROUTINE UOBJFN(OBJFN,DVVECT,GRADOF)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DVVECT(*),GRADOF(*)
User coding
RETURN
END
where:
Input:
DVVECT is the array of current values of design variables.
Required Output:
OBJFN is the objective function.
GRADOF is the gradient vector of the objective function with respect to the
design variables.
Main Index
Main Index
174 Marc Volume D: User Subroutines and Special Routines
Example
SUBROUTINE UOBJFN(OBJFN,DVVECT,GRADOF)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DVVECT(*),GRADOF(*)
C
OBJFN=2.5D00*DVVECT(1)+0.3D00*DVVECT(2)/DVVECT(3)
GRADOF(1)=2.5D00
GRADOF(2)=0.3D00/DVVECT(3)
GRADOF(3)=-0.3D00*DVVECT(2)/DVVECT(3)**2
C
RETURN
END
Main Index
Main Index
CHAPTER 2 175
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UPRFILM
This user subroutine is used when the table input format is used;
otherwise, use the USPRNG user subroutine.
Description
In diffusion or soil analysis, it is often necessary to include nonuniform pressure
films. The UPRFILM user subroutine facilitates this. It is called at each time step for
each integration point on each element surface given in the PRESS FILM model
definition set, and allows the user to modify the pressure film coefficient and
ambient temperature that is input through the data lines.
Format
User subroutine UPRFILM is written with the following headers:
SUBROUTINE UPRFILM(UPFILM,PA,TS,N,TIME,INC)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION TS(*),N(*)
user coding
RETURN
END
where:
Input:
TS(1) estimated surface pressure at the end of increment.
TS(2) surface pressure at the beginning of increment.
TS(3) not used.
TS(4) integration point 1st coordinate.
TS(5) integration point 2nd coordinate.
TS(6) integration point 3rd coordinate.
Main Index
Main Index
176 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 177
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UFAH
Description
This subroutine allows the user to apply a correction factor to the convection
coefficient. This routine is used in conjunction with the SURFACE ENERGY option.
T
The flux is calculated as q = α H ⋅ f c ⎛⎝ H r e c – H e ; S⎞⎠ ,
where:
αH is the heat transfer coefficient.
TS is the specific enthalpy of the external flow, calculated for the frozen chemical
He ; composition existing at the edge of the boundary layer, but evaluated at the
surface temperature T s f e
Format
User subroutine UFAH is written with the following headers:
SUBROUTINE UFAH(M,NN,ISFENID,INC,NCRD,COORD,TEMP,DTEMP,
* TIME,DTIME,LINRIZE,KUPSTRM,ALPHAH0,ALPHAM0,BPRIMEC,
* TRANSH,RHOCURI,FAHN,FAHN1)
IMPLICIT REAL*8 (A-H,0-Z)
user coding
RETURN
END
where:
Input:
M is the element ID.
NN is the integration point number.
ISFENID is the surface energy ID.
INC is the increment number
Main Index
Main Index
178 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 2 179
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UFLUXMEC
Description
This subroutine allows the user to add an additional term to the rate of recession
which is not due to particle impact. This allows recession to occur based upon
phenomena which cannot be readily expressed. This option is used in conjunction
with the ABLATION parameter and the RECEDING SURFACE option.
Format
User subroutine UFLUXMEC is written with the following headers:
SUBROUTINE UFLUXMEC(M,NN,IREG,ISFENID,INC,NCRD,COORD,TEMP,
* DTEMP,TIME,DTIME,FLUXMEC)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
M is the element ID.
NN is the integration point number.
IREG is the receding surface input ID.
ISFENID is the surface energy ID.
INC is the increment number.
NCRD is the number of coordinates.
COORD is the integration point coordinates.
TEMP is the temperature at beginning of increment.
DTEMP is the increment of temperature.
TIME is the time at the beginning of the increment.
DTIME is the increment of time.
Required Output:
FLUXMEC is the rate of recession due to mechanical erosion
Main Index
Main Index
180 Marc Volume D: User Subroutines and Special Routines
■ UFTHP
Description
This option allows the user to include a correction effect when calculating the flux
due to ablation by liquid particles.
q = f t h, p ⋅ Σ G t h, p, j ( V p, j , D p, j , α p, t ) ⋅ m· p, j ⋅ ΔH r, p, j
m· p, j = m· p, j ( x, t )
G t h, p, j = G t h, p, j ( V p, j ( x, t ), D p, j , α p, j ( x, t ), ... )
ΔH r, p, j = ΔH r, p, j ( T s, j )
specific enthalpy of reaction for the interaction between the surface material and the
’j’ family of particles ( [ Jkg – 1 ] ) .
f t h, p = f t h, p ( T s )
Main Index
Main Index
CHAPTER 2 181
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format
User subroutine UFTHP is written with the following headers:
SUBROUTINE UFTHP(M,NN,ISFENID,INC,NCRD,COORD,TEMP,DTEMP,
* TIME,DTIME,TEMP1,TEMP2,FTHP)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
M is the element ID.
NN is the integration point number.
ISFENID is the surface energy ID.
INC is the increment number.
NCRD is the number of coordinates.
COORD is the integration point coordinates.
TEMP is the temperature at beginning of increment.
DTEMP is the increment of temperature.
TIME is the time at the beginning of the increment.
DTIME is the increment of time.
TEMP1 is the first temperature for empirical correction for thermochemical ablation
by impacting particles.
TEMP2 is the second temperature for empirical correction for thermochemical
ablation by impacting particles.
Required Output:
FTHP is the correction factor for thermochemical ablation by impacting particles.
Main Index
Main Index
182 Marc Volume D: User Subroutines and Special Routines
■ UGLAW
Description
This subroutine allows the user to define the correlation factor between the liquid
particle velocity, diameter, and angle of incidence with the resultant flux due to the
thermochemical ablation by liquid particles. This subroutine is used in conjunction
with the SURFACE ENERGY option. See also UFTHP.
Format
User subroutine UGLAW is written with the following headers:
SUBROUTINE UGLAW(ILP,M,NN,ISFENID,INC,NCRD,COORD,TEMP,
* DTEMP,TIME,DTIME,TVLP,TDIAMLP,TANGLP,TGLP)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
ILP is the liquid particle family ID.
M is the element id.
NN is the integration point number.
ISFENID is the surface energy ID.
INC is the increment number.
NCRD is the number of coordinates.
COORD is the integration point coordinates.
TEMP is the temperature at beginning of increment.
DTEMP is the increment of temperature.
TIME is the time at the beginning of the increment.
DTIME is the increment of time.
TVLP is the velocity of liquid particles.
TDIAMLP is the diameter of liquid particles
Main Index
Main Index
CHAPTER 2 183
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
184 Marc Volume D: User Subroutines and Special Routines
■ UTIMP
Description
This routine allows the user to define an additional flux due to impacting particles.
This option is used in conjunction with the SURFACE ENERGY option.
Format
User subroutine UTIMP is written with the following headers:
SUBROUTINE UTIMP(NLP,M,NN,ISFENID,INC,NCRD,COORD,TEMP,
* DTEMP,TIME,DTIME,LINRIZE,MDOTLP,IDMDOTLP,VLP,IDVLP,
* DIAMLP,IDDIAMLP,ANGLP,IDANGLP,FLUXIMP,AMSTHP)
IMPLICIT REAL*8 (A-H,O-Z)
REAL*8 MDOTLP(*)
DIMENSION IDMDOTLP(*),VLP(NCRD,*),IDVLP(NCRD,*),ANGLP(*),
* IDANGLP(*),DIAMLP(*), IDDIAMLP(*)
user coding
RETURN
END
where:
Input:
NLP is the number of liquid particle families.
M is the element ID.
NN is the integration point number.
ISFENID is the surface energy ID.
INC is the increment number.
NCRD is the number of coordinates.
COORD is the integration point coordinates.
TEMP is the temperature at beginning of increment.
DTEMP is the increment of temperature.
TIME is the time at the beginning of the increment.
DTIME is the increment of time.
LINRIZE is the flag to indicate linearization: 1 if linear, 2 if constant.
Main Index
Main Index
CHAPTER 2 185
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
186 Marc Volume D: User Subroutines and Special Routines
■ UFMEC
Description
This user subroutine allows the user to include a correction factor when calculating
the recession rate by liquid particles.
r· = f m, p ⋅ ΣG m, p, j ( V p, j, D p, j, α p, j ) ⋅ m· p, j
Format
User subroutine UFMEC is written with the following headers:
SUBROUTINE UFMEC(M,NN,IREG,ISFENID,INC,NCRD,COORD,TEMP,
* DTEMP,TIME,DTIME,TEMP1,TEMP2,FMEC)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
M is the element ID.
NN is the integration point number.
IREG is the receding surface input ID.
ISFENID is the surface energy ID.
INC is the increment number.
NCRD is the number of coordinates.
Main Index
Main Index
CHAPTER 2 187
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
188 Marc Volume D: User Subroutines and Special Routines
■ UGMEC
Description
This subroutine allows the user to define the correlation factor between the liquid
particle velocity, diameter and angle of incidence with the rate of recession.
This subroutine is used in conjunction with the ABLATION parameter and the
RECEDING SURFACE option. Also see the UFMEC user subroutine
Format
User subroutine UGMEC is written with the following headers:
SUBROUTINE UGMEC(ILP,M,NN,IREG,ISFENID,INC,NCRD,COORD,
* TEMP,DTEMP,TIME,DTIME,LINRIZE,VLP,IDVLP,DIAMLP,IDDIAMLP,
* ANGLP,IDANGLP,TGMEC)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
ILP is the liquid particle family ID.
M is the element ID.
NN is the integration point number.
IREG is the receding surface input ID.
ISFENID is the surface energy ID.
INC is the increment number.
NCRD is the number of coordinates.
COORD is the integration point coordinates.
TEMP is the temperature at beginning of increment.
DTEMP is the increment of temperature.
TIME is the time at the beginning of the increment.
Main Index
Main Index
CHAPTER 2 189
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
190 Marc Volume D: User Subroutines and Special Routines
■ UABLATE
Description
This subroutine allows the user to define the surface recession rate. This user
routine is only active if it is requested through the RECEDING SURFACE option.
Format
User subroutine UABLATE is written with the following headers:
SUBROUTINE UABLATE(M,N,NN,IREG,INC,TEMP,DTEMP,AMDOTP,ARCL,
*CPTIM,TIMINC,XORD,NCRD,RHOCURI,RECRATE)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION ARCL(2), XORD(NCRD)
user coding
RETURN
END
where
Input:
If recession calculated at surface integration points, see the ABLATION parameter
M is the element number.
N is the elsto number.
NN is the surface integration point number.
If recession calculated at surface nodal points, see the ABLATION parameter
M is the internal node number.
N is the user node number.
NN is not used = 0.
IREG is the receding surface input ID.
INC is the increment number.
TEMP is the temperature at the beginning of the increment.
DTEMP is the incremental temperature.
AMDOTP is the mass flow rate if pyrolysis calculation.
ARCL(1) is the arc length.
Main Index
Main Index
CHAPTER 2 191
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
192 Marc Volume D: User Subroutines and Special Routines
■ UABLTNORM
Description
This subroutine allows the user to redefine the direction of recession/ablation. The
default direction is prescribed by the ABLATION parameter. This routine is often
used at the corners of the model to give the user additional control.
Format
User subroutine UABLTNORM is written with the following header:
SUBROUTINE UABLTNORM(N,UNORM,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION UNORM(NCRD)
user coding
RETURN
END
where
Input:
N is the user node number.
NCRD is the number of directions (2 or 3).
Required Output:
UNORM is the normal - enters as Marc defined normal may be redefined by user.
This is the direction of the recession that is pointing into the material.
Main Index
Main Index
CHAPTER 2 193
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UWEAR
Description
This user subroutine is used to control the amount of mechanical wear that occurs
at a surface as an alternative to the Archard model. The wear may be used as an
indicator to determine the failure of the part or may be applied to the nodal
coordinates of the surface nodes. This capability is activated through the
RECEDING SURFACE option.
Format
User subroutine UWEAR is written with the following header:
SUBROUTINE UWEAR(WRND,N,NUSER,IREG,MATS,INC,
* TIME,TIMINC,COORD,I2OR3,DIRCOS,COFORND,FRFORND,
* COSTRS,FRSTRS,IDIERE,WEARCF,TEMPI,RELVELND,ET,YD,
* COEF)
INTEGER N,NUSER,IREG,MATS,INC,I2OR3,IDIERE
REAL*8 WRND,TIME,TIMINC,COORD,DIRCOS,COFORND,
* FRFORND,COSTRS,FRSTRS,WEARCF,TEMPI,RELVELND,
* ET,YD,COEF
DIMENSION DIRCOS(I2OR3)
user coding
RETURN
END
where
Input:
N is the internal node id.
NUSER is the user node id.
IREG is the recession id.
MATS is the material id.
INC is the increment number.
TIME is the time at begining of increment.
Main Index
Main Index
194 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines
List
CRPLAW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
GAPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
GENSTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
HOOKLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
HYPELA2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
ORIENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Main Index
Main Index
196 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 197
User-defined Anisotropy and Constitutive Relations User Subroutines List
VSWELL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
WKSLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Main Index
Main Index
198 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
200 Marc Volume D: User Subroutines and Special Routines
This chapter describes the user subroutines available to allow you to provide
material data to standard Marc constitutive relations, or for the user to create his
own model. The routines in this chapter cover the spectrum of anisotropic elasticity
and plasticity, creep, plasticity, rate independent nonlinear elasticity, cracking,
electrical, and magnetic materials among others. These routines are, in general,
called for each integration point for each element they have been invoked. This
provides a powerful method to provide nonhomogeneous, nonlinear material
behavior. Table 3-1 summarizes these routines and indicates what parameters or
model definition options are required to invoke the user subroutine.
Main Index
Main Index
CHAPTER 3 201
User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-1 User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
Main Index
Main Index
202 Marc Volume D: User Subroutines and Special Routines
Table 3-1 User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
Main Index
Main Index
CHAPTER 3 203
User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-1 User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
Main Index
Main Index
204 Marc Volume D: User Subroutines and Special Routines
Table 3-1 User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
Main Index
Main Index
CHAPTER 3 205
User-defined Anisotropy and Constitutive Relations User Subroutines
■ ANELAS
Elastic Anisotropy
Description
This user subroutine allows the user to define the anisotropic elastic law. In the
most generally allowed case, the isothermal stress-strain law in the preferred
orientation is:
⎧ ⎫ ⎧ ⎫
⎪ σ 11 ⎪ r 11 D 11 r 12 D 12 r 13 D 13 0 0 0 ⎪ ε 11 ⎪
⎪ ⎪ ⎪ ⎪
⎪ σ 22 ⎪ r 22 D 22 r 23 D 23 0 0 0 ⎪ ε 22 ⎪
⎪ ⎪ ⎪ ⎪
⎪ σ 33 ⎪ r 33 D 33 0 0 0 ⎪ ε 33 ⎪
⎨ ⎬ = ⎨ ⎬
⎪ τ 12 ⎪ Symmetric r 44 D 44 0 0 ⎪ γ 12 ⎪
⎪ ⎪ ⎪ ⎪
⎪ τ 23 ⎪ r 55 D 55 0 ⎪ γ 23 ⎪
⎪ ⎪ ⎪ ⎪
⎪ τ 31 ⎪ r 66 D 66 ⎪ γ 31 ⎪
⎩ ⎭ ⎩ ⎭
The arrangement of the {σ},{ε} vectors is defined for each element type in Marc
Volume B: Element Library. Dij are the incremental elastic stress-strain relation
calculated by Marc based on material data given through input data. The rij are
supplied by the user in the ANELAS user subroutine. It is often easier to directly
specify the stress-strain for compliance relationship in the HOOKLW user
subroutine.
This routine is only available for the additive elastic-plastic formulation or small
strain incompressible elasticity. It is not available for the FeFp formulation.
Main Index
Main Index
206 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine ANELAS is written with the following headers:
SUBROUTINE ANELAS (N,NN,KCUS,R,IRDIM,NDI,NSHEAR,MATUS,DT,
+DTDL,D,RPROPS,IPROPS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION R (IRDIM,IRDIM),DT(1),DTDL(1),D(IRDIM,IRDIM),
+N(2),RPROPS(1),IPROPS(1),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
N(1) is your element number.
N(2) is the internal element number.
NN is integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
IRDIM is the dimension of the R array for the current element.
NDI is the number of direct components.
NSHEAR is the number of shear components.
MATUS(1) is the user material id.
MATUS(2) is the internal material id.
DT is the array of state variables.
DTDL is the array of increments of state variables.
D is the stress-strain law as calculated by Marc using input data. To modify
this matrix directly, use user subroutine HOOKLW instead of ANELAS.
RPROPS is the array of real properties, see introduction.
IPROPS is the array of integer properties, see introduction.
Required Output:
R is the r to be defined by you; the number of allowable r being given in
Table 3-2.
Main Index
Main Index
CHAPTER 3 207
User-defined Anisotropy and Constitutive Relations User Subroutines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
1 None 1 2 1
2 Orthogonal in z-r plane 4 3 1
3 Orthogonal in x-y plane 3 2 1
4 Any in θ1 - θ2 surface 3 2 1
5 None 1 1 0
6 Orthogonal in x-y plane 4 3 1
7 Orthogonal in (x,y,z) space 6 3 3
8 Any in θ1 - θ2 surface 6 2 1
9 None 1 1 0
10 Orthogonal in z-r plane 4 2 1
11 Orthogonal in x-y plane 4 3 1
12 None 1 0 0
13 None 1 1 0
14 None 1 1 1
15 None 1 2 0
16 None 1 1 0
17 None 1 2 0
18 Any in surface 3 2 1
19 Orthogonal in (x,y,z) space 4 2 1
20 Orthogonal in (x,y,z) space 6 3 3
21 Orthogonal in (x,y,z) space 6 3 3
22 Orthogonal in (x,y,z) space 5 2 3
23 None 1 1 0
Main Index
Main Index
208 Marc Volume D: User Subroutines and Special Routines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
24 Any in θ1 - θ2 surface 3 2 1
25 None 1 1 1
26 Orthogonal in x-y plane 3 2 1
27 Orthogonal in x-y plane 4 3 1
28 Orthogonal in x-y plane 4 3 1
29 Orthogonal in x-y plane 4 3 1
30 Any in surface 3 2 1
31 Not available — — —
32 Orthogonal in x-y plane 4 3 1
33 Orthogonal in z-r plane 4 3 2
34 Orthogonal in x-y plane 4 3 1
35 Orthogonal in (x,y,z) space 6 3 3
36, 37, 38, Use the ANKOND user — — —
39, 40, 41, subroutine to supply
42, 43, 44 anisotropic conductivity
45 None 1 1 1
46, 47, 48 None — — —
49 Any in V1 - V2 3 2 1
Main Index
Main Index
CHAPTER 3 209
User-defined Anisotropy and Constitutive Relations User Subroutines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
Main Index
Main Index
210 Marc Volume D: User Subroutines and Special Routines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
75 Orthogonal in V1 - V2 5 2 3
76 None 1 1 1
77 None 1 1 0
78 None 1 1 1
79 None 1 1 0
80 Orthogonal in x-y plane 4 3 1
81 Orthogonal in x-y plane 4 3 1
82 Orthogonal in z-r plane 4 3 1
83 Orthogonal in z-r plane 4 3 1
84 Orthogonal in (x,y,z) space 6 3 3
85 Use the ANKOND user — — —
subroutine to supply
anisotropic conductivity
86 Use the ANKOND user — — —
subroutine to supply
anisotropic conductivity
87 Use the ANKOND user — — —
subroutine to supply
anisotropic conductivity
88 Use the ANKOND user — — —
subroutine to supply
anisotropic conductivity
89 None 1 2 1
90 None 1 2 3
91 Orthogonal in x-y plane 4 3 2
92 Orthogonal in z-r plane 4 3 1
93 Orthogonal in x-y plane 4 3 1
Main Index
Main Index
CHAPTER 3 211
User-defined Anisotropy and Constitutive Relations User Subroutines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
Main Index
Main Index
212 Marc Volume D: User Subroutines and Special Routines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
Main Index
Main Index
CHAPTER 3 213
User-defined Anisotropy and Constitutive Relations User Subroutines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
141 None — 1 0
142 None — 1 0
143 None — 1 0
144 None — 1 0
145 None — 1 0
146 None — 1 0
147 None — 1 0
148 None — 1 0
149 Orthogonal in (x, y, z) space 6 3 3
150 Orthogonal in (x, y, z) space 6 3 3
151 Orthogonal in x-y plane 4 3 1
152 Orthogonal in z-r plane 4 3 1
Main Index
Main Index
214 Marc Volume D: User Subroutines and Special Routines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
Main Index
Main Index
CHAPTER 3 215
User-defined Anisotropy and Constitutive Relations User Subroutines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
Main Index
Main Index
216 Marc Volume D: User Subroutines and Special Routines
Size of R. Matrix
(IRDIM) for Number Number of
Library IRDIM=1 No of Direct Shear
Element Allowable Transformations Anisotropy Stresses Stresses
Number to Preferred Operation Possible (NDI) (NSHEAR)
All parameters except the R array are defined by Marc. R must be defined by the user
in this user subroutine.
Main Index
Main Index
CHAPTER 3 217
User-defined Anisotropy and Constitutive Relations User Subroutines
Note that the R and D matrices have the dimension appropriate for the number of
stress components associated with the particular element (see Table 3-2). Thus, for
example, in elements 3 or 18, the R matrix would be of size 3 by 3, and the stress
strain law would take the form:
⎧ ⎫ ⎧ ⎫
⎪ σ1 ⎪ r 11 D 11 r 12 D 12 0 ⎪ ε 11 ⎪
⎪ ⎪ ⎪ ⎪
⎨ σ2 ⎬ = r 22 D 22 0 ⎨ ε 22 ⎬
⎪ ⎪ ⎪ ⎪
⎪ σ 12 ⎪ Symmetric r 33 D 33 ⎪ γ 12 ⎪
⎩ ⎭ ⎩ ⎭
⎧ ⎫ ⎧ ⎫
⎪ ε 11 ⎪ R 11 R 12 R 13 0 0 0 ⎪ σ 11 ⎪
⎪ ⎪ ⎪ ⎪
⎪ ε 22 ⎪ R 22 R 23 0 0 0 ⎪ σ 22 ⎪
⎪ ⎪ ⎪ ⎪
⎪ ε 33 ⎪ R 33 0 0 0 ⎪ σ 33 ⎪
⎨ ⎬ = ⎨ ⎬
⎪ γ 12 ⎪ R 44 0 0 ⎪ τ 12 ⎪
⎪ ⎪ ⎪ ⎪
⎪ γ 23 ⎪ R 55 0 ⎪ τ 23 ⎪
⎪ ⎪ ⎪ ⎪
⎪ γ 31 ⎪ R 66 ⎪ τ 31 ⎪
⎩ ⎭ ⎩ ⎭
Note: This user subroutine should not be used if you desire that the material constants should
be design variables. Use the ORTHOTROPIC option instead.
Main Index
Main Index
218 Marc Volume D: User Subroutines and Special Routines
■ HOOKLW
Description
The HOOKLW user subroutine is an alternative mechanism to the ANELAS user
subroutine. In this user subroutine, the elastic stress-strain law is supplied by the
user. A maximum of 21 terms are necessary for a three-dimensional body. This law
is given in terms of the coordinate system defined in the ORIENTATION option. The
user should insure that the stress-strain law is symmetric. Note that this user
subroutine is called for each integration point of those elements that have
anisotropic properties. The user can define either the stress-strain relation or the
compliance strain-stress relation. The returned value of argument IMOD must be set
accordingly. For example, if IMOD=1, the stress-strain law is given and the user
returns to the array B such that:
⎧ ⎫ ⎧ ⎫
⎪ σ 11 ⎪ ⎪ ε 11 ⎪
⎪ ⎪ B11 B12 B13 B14 B15 B16 ⎪ ⎪
⎪ σ 22 ⎪ ⎪ ε 22 ⎪
⎪ ⎪ B21 B22 B23 B24 B25 B26 ⎪ ⎪
⎪ σ 33 ⎪ B31 B32 B33 B34 B35 B36 ⎪ ε 33 ⎪
⎨ ⎬ = ⎨ ⎬
⎪ τ 12 ⎪ B41 B42 B43 B44 B45 B46 ⎪ γ 12 ⎪
⎪ ⎪ B51 B52 B53 B54 B55 B56 ⎪ ⎪
⎪ τ 23 ⎪ ⎪ γ 23 ⎪
⎪ ⎪ B61 B62 B63 B64 B65 B66 ⎪ ⎪
⎪ τ 31 ⎪ ⎪ γ 31 ⎪
⎩ ⎭ ⎩ ⎭
The arrangement of {s}, {ε} vectors are defined for each element type in Marc
Volume B: Element Library.
This routine is only available for the additive elastic-plastic formulation or small
strain incompressible elasticity. It is not available for the FeFp formulation.
Main Index
Main Index
CHAPTER 3 219
User-defined Anisotropy and Constitutive Relations User Subroutines
Format
User subroutine HOOKLW is written with the following headers:
SUBROUTINE HOOKLW(M,NN,KCUS,B,NGENS,DT,DTDL,E,PR,NDI,
+NSHEAR,IMOD,RPROPS,IPROPS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION B(NGENS,NGENS),DT(1),DTDL(1),RPROPS(1),IPROPS(1),
+M(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M(1) is the user element number.
M(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
NGENS is the number of stresses and strain components.
DT is the state variables at the beginning of the increment (temperature first).
DTDL is the increment of state variables.
E is the Young’s modulus including temperature effects.
PR is the Poisson’s ratio including temperature effects.
NDI number of direct components of stress.
NSHEAR number of shear components of stress.
RPROPS array of real properties; see Chapter 1 Introduction.
IPROPS array of integer properties; see Chapter 1 Introduction.
Required Output:
B is the user-defined stress-strain law if IMOD=1; or the user-defined
compliance relation if IMOD=2 to be defined here.
IMOD Set to 0 if the ANELAS user subroutine is used.
Set to 1 to indicate that the stress-strain law has been given.
Set to 2 to indicate that the compliance strain-stress, relation has
been given.
Main Index
Main Index
220 Marc Volume D: User Subroutines and Special Routines
Note that for temperature dependent properties, this user subroutine is called twice
for each integration point. The first time to evaluate the stress-strain law at the
beginning of the increment; the second time at the end of the increment.
Note: This user subroutine should not be used if the user desires that the material constants
should be design variables. Use the ORTHOTROPIC option instead.
Main Index
Main Index
CHAPTER 3 221
User-defined Anisotropy and Constitutive Relations User Subroutines
■ ANPLAS
Description
The anisotropic yield function and stress potential are assumed as:
2 2 2 2
a 1 ( σ y – σ z ) + a 2 ( σ z – σ x ) + a 3 ( σ x – σ y ) + 3a 4 τ y2z + 3a 6 τ x2y = 2σ
The user defines ratios of actual to isotropic yield (in the preferred orientation) in
the array YRDIR for direct tension yielding, and YRSHR for yield in shear (ratio of
actual shear yield to σ ⁄ 3 = isotropic shear yield). Then the a1 above are derived
as (Hill):
1 1 1
a 1 = ------------------------------- + ------------------------------- – -------------------------------
YRDIR ( 2 ) 2 YRDIR ( 3 ) 2 YRDIR ( 2 ) 2
1 1 1
a 2 = ------------------------------- + ------------------------------- – -------------------------------
YRDIR ( 3 ) 2 YRDIR ( 1 ) 2 YRDIR ( 2 ) 2
1 1
a 3 = ------------------------------- + ------------------------------- – -------------------------------
YRDIR ( 1 ) 2 YRDIR ( 2 ) 2 YRDIR ( 3 ) 2
2
a 4 = ---------------------------------
YRSHR ( 3 ) 2
2
a 5 = ---------------------------------
YRSHR ( 2 ) 2
2
a 6 = ---------------------------------
YRSHR ( 1 ) 2
Main Index
Main Index
222 Marc Volume D: User Subroutines and Special Routines
Note that YRDIR and YRSHR should be given in the order appropriate for the element
(see Library Element description).
On the output, the von Mises intensity is not affected by these material parameters.
Format
User subroutine ANPLAS is written with the following headers:
SUBROUTINE ANPLAS(N,NN,KCUS,NDI,NSHEAR,MATUS,YRDIR,YRSHR)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION YRDIR (1),YRSHR(1),N(2),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
N(1) is your element number.
N(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
NDI is the number of direct stresses.
NSHEAR is the number of shear stresses.
MATUS(1) is the user material id.
MATUS(2) is the internal material id
Required Output:
YRDIR is the array of tensile yield ratios to be defined here.
YRSHR is the array of shear yield ratios to be defined here.
All parameters except YRDIR and YRSHR are defined by Marc. YRDIR and YRSHR are
defined by the user in this user subroutine.
Main Index
Main Index
CHAPTER 3 223
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UFAIL
Description
The UFAIL user subroutine is provided to allow the user to calculate his own scalar
failure criterion. To call the UFAIL user subroutine, the user must specify failure
criterion type UFAIL in the FAIL DATA model definition option. UFAIL is then called
for every integration point associated with the material id specified in the
FAIL DATA option.
This routine may be used with all elastic-plastic materials. Progressive cracking is
only available with the additive elastic-plastic model.
Format
User subroutine UFAIL is written with the following headers:
SUBROUTINE UFAIL (N,NN,KCUS,MATUS,
1 STRESS,STRAIN,NDI,NSHEAR,FAILCR)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION STRESS(1),STRAIN(1),N(2),MATUS(2),KCUS(2),FAILCR(2)
user coding
RETURN
END
where:
Input:
N(1) is the user element number.
N(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
STRESS is the current total stress state.
STRAIN is the current total strain.
NDI is the number of direct stresses.
Main Index
Main Index
224 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 225
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UPROGFAIL
C-44 Description
This user subroutine allows users to define the stiffness reduction factors for a
progressive failure analysis.
The routine is called for an element integration point whenever failure occurs.
The failure criteria can be defined on the FAIL DATA option, or via the UFAIL
user subroutine.
Format
User subroutine UPROGFAIL is written with the following header lines:
SUBROUTINE UPROGFAIL(NELEM,NINT,KCUS,MATUS,STRESS,STRAIN,
& ICRIT,FI,REDFAC0,REDFAC,IDEACT,DT,DTDL,
& TIME,TIMEINC)
IMPLICIT REAL*8 (A-H, O-Z)
REAL*8 FI,REDFAC0,REDFAC,TIME,TIMEINC
INTEGER KCUS, MATUS, N, NELEM, NINT, ICRIT,IDEACT
REAL*8 STRAIN, STRESS,DT,DTDL
DIMENSION STRESS(*),STRAIN(*),N(2),MATUS(2),KCUS(2)
DIMENSION FI(*),REDFAC0(6),REDFAC(6),DT(*),DTDL(*)
USER CODING
RETURN
END
where:
Input:
NELEM is the user element number
NINT is the integration point number
KCUS is the layer number
kcus(1) – user layer number
kcus(2) – internal layer number
Main Index
Main Index
226 Marc Volume D: User Subroutines and Special Routines
The six components of redfac will be used for scaling the material moduli of an
orthotropic material according to
new orig
E 11 = redfac ( 1 ) × E 11
Main Index
Main Index
CHAPTER 3 227
User-defined Anisotropy and Constitutive Relations User Subroutines
new orig
E 22 = redfac ( 2 ) × E 22
new orig
E 33 = redfac ( 3 ) × E 33
new orig
G 12 = redfac ( 4 ) × G 12
new orig
G 23 = redfac ( 5 ) × G 23
new orig
G 31 = redfac ( 6 ) × G 31
The Poisson’s ratios are scaled the same way as the corresponding shear modulus.
For an isotropic material, the Young’s modulus is scaled with the smallest of the
components of redfac and the shear modulus is calculated using the updated
Young’s modulus and the Poisson’s ratio.
The case of general anisotropy is not supported.
Main Index
Main Index
228 Marc Volume D: User Subroutines and Special Routines
■ ORIENT
Description
The ORIENT user subroutine is used to supply a preferred orientation so that
ANELAS, HOOKLW, ANKOND, and ANPLAS can supply anisotropic material
constants in this orientation. This user subroutine can be activated by anisotropic
material definition options, and/or the ORIENTATION option and/or the
HYPOELASTIC option.
Format
User subroutine ORIENT is written with the following headers:
SUBROUTINE ORIENT (N,NN,KCUS,G)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION G(3,3),N(2),KCUS(2)
user coding
RETURN
END
where:
Input:
N(1) is the user element number.
N(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
Required Output:
G is the transformation matrix to be defined here.
Main Index
Main Index
CHAPTER 3 229
User-defined Anisotropy and Constitutive Relations User Subroutines
All parameters except G are passed in by Marc – the user must supply the G matrix. G
is the transformation to the preferred orientation from the usual Marc orientation:
⎧ ⎫ ⎧ ⎫
⎪ v' 1 ⎪ G 11 G 12 G 13 ⎪ v 1 ⎪
⎪ ⎪ ⎪ ⎪
⎨ v' 2 ⎬ = G 21 G 22 G 23 ⎨ v 2 ⎬
⎪ ⎪ ⎪ ⎪
⎪ v' 3 ⎪ G 31 G 32 G 33 ⎪ v 3 ⎪
⎩ ⎭ ⎩ ⎭
where:
v is the vector in the Marc system.
v' is the vector in the preferred system.
For curvilinear systems (for example, element types 4, 8, and 24), G is defined by
G(I,J) = g ij . For planar transformations, G(3,I) = G(I,3) = 0; G(3,3) = 1.0; I = 1,2
must be given.
Note: This user subroutine should not be used if the user desires that the material orientation
be a design variable. Use the COMPOSITE option instead.
Main Index
Main Index
230 Marc Volume D: User Subroutines and Special Routines
■ ANEXP
Description
The ANEXP user subroutine is used to specify anisotropic thermal strain increments
in the orientation defined by the ORIENTATION option. The user is given the
temperature at the beginning of the increment, the temperature increment, and the
base value of the thermal expansion coefficients given on the ISOTROPIC or
ORTHOTROPIC options. The user must supply the incremental thermal strain vector
j
Δε itjh ( Δε t h i
for doubly curved shell elements 4, 8, and 24) in the user subroutine.
Any components of the incremental thermal strain vector not defined in the user
subroutine assume their default program calculated values.
The ANEXP user subroutine is called for all elements at all integration points if the
temperature is nonzero for all material models.
If the HYPELA2 user subroutine is used, enter 1 to activate ANEXP in the second field
of the third data block of the HYPOELASTIC model definition option.
Format
User subroutine ANEXP is written with the following headers:
SUBROUTINE ANEXP (N,NN,KCUS,T,TINC,COED,NDI,NSHEAR,EQEXP)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION EQEXP(1),TINC(1),T(1),COED(NDI),N(2),KCUS(2)
user coding
RETURN
END
where:
Input:
N(1) is the user element number.
N(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
Main Index
Main Index
CHAPTER 3 231
User-defined Anisotropy and Constitutive Relations User Subroutines
Note: For the curvilinear coordinate elements (doubly curved shell elements 4,
8, 24) the mixed strain tensor shear components, ε12, ε21, are stored.
Otherwise, shear components are engineering shear strain.
Main Index
Main Index
232 Marc Volume D: User Subroutines and Special Routines
■ ANKOND
Description
For anisotropic heat transfer analysis, this user subroutine allows the user to define
an anisotropic conductivity matrix at each integration point in each element. The
anisotropic conductivity matrix is defined with respect to the preferred orientation
specified in the ORIENTATION option. This user subroutine is also used for
anisotropic electrical resistance in a Joule heating analysis.
Format
User subroutine ANKOND is written with the following headers:
SUBROUTINE ANKOND
(COND,CANISO,N,NN,KCUS,MATUS,ID,T,DT,TIME,
* DELTME,JOULHT)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION COND(ID,ID),CANISO(3),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
CANISO are the anisotropic conductivities kij (T) established by the user via
data blocks.
N is the element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
ID ∂T
is the size of the COND matrix; that is, the number of derivatives. --------
∂x j
Main Index
Main Index
CHAPTER 3 233
User-defined Anisotropy and Constitutive Relations User Subroutines
∂T
q i = k i j --------
∂x j
Main Index
Main Index
234 Marc Volume D: User Subroutines and Special Routines
■ UEPS
Description
For anisotropic electrostatic or electromagnetic analysis, this user subroutine allows
the user to define an anisotropic permittivity matrix at each integration point in each
element. The anisotropic permittivity matrix is defined with respect to the preferred
orientation specified in the ORIENTATION option.
Format
User subroutine UEPS is written with the following headers:
SUBROUTINE UEPS (EPS,M,NN,MATUS,ID)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION EPS(ID,ID),M(2),MATUS(2)
user coding
RETURN
END
where:
Input:
M(1) is the user element number.
M(2) is the internal element number.
NN is the integration point number.
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
ID is the size of the matrix.
Required Output:
EPS is the permittivity matrix, [ε] (D = [ε]E).
This is to be re-defined as necessary by the user.
This matrix is passed in as set-up for anisotropic permittivity. If the user
does not redefine it, it remains as given through the ISOTROPIC or
ORTHOTROPIC options.
Main Index
Main Index
CHAPTER 3 235
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UMU
Description
For anisotropic magnetostatic or electromagnetic analysis, this user subroutine
allows the user to define an anisotropic permeability matrix at each integration
point in each element. The anisotropic permeability matrix is defined with respect
to the preferred orientation specified in the ORIENTATION option.
The permeability μ is used in the relation:
B=μH + Br
where:
B is the magnetic induction.
H is the magnetic field intensity.
μ is the permeability.
Br is the remanence.
Format
User subroutine UMU is written with the following headers:
SUBROUTINE UMU (XMU,M,NN,MATUS,ID,CPTIM,DTIME,B)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XMU(ID,ID),B(3),M(2),MATUS(2)
user coding
RETURN
END
where:
Input:
M(1) is your element number.
M(2) is the internal element number.
NN is the integration point number.
Main Index
Main Index
236 Marc Volume D: User Subroutines and Special Routines
XMU
1
is the reluctivity matrix --- ⎛ H = --1- ( B – B )⎞ .
μ ⎝ μ r ⎠
Main Index
Main Index
CHAPTER 3 237
User-defined Anisotropy and Constitutive Relations User Subroutines
■ USIGMA
Description
For anisotropic electromagnetic analysis, this user subroutine allows the user to
define an anisotropic conductivity matrix at each integration point in each element.
The anisotropic permittivity matrix is defined with respect to the preferred
orientation specified in the ORIENTATION option.
Format
User subroutine USIGMA is written with the following headers:
SUBROUTINE USIGMA (SIGMA,M,NN,MATUS,ID,CPTIM,DTIME)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION SIGMA(3,3),M(2),MATUS(2)
user coding
RETURN
END
where:
Input:
M(1) is the user element number.
M(2) is the internal element number.
NN is the integration point number.
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
CPTIM is the transient time at the beginning of the increment; in a harmonic
analysis, it is the frequency.
DTIME is the increment of time.
ID is the size of the matrix.
Required Output:
SIGMA is the electric conductivity matrix, [σ] (J = [σ]E).
This is to be re-defined as necessary by the user.
This matrix is passed in as set-up for anisotropic conductivity. If the user
does not re-define it, it remains as given through the ISOTROPIC or
ORTHOTROPIC options.
Main Index
Main Index
238 Marc Volume D: User Subroutines and Special Routines
■ USPCHT
Description
This user subroutine allows the user to define the specific heat in a heat transfer or
coupled analysis. This is an alternative to the use of the ISOTROPIC or
ORTHOTROPIC and TEMPERATURE EFFECTS or TABLE options. This user
subroutine is called at each increment for every element in the mesh, hence,
allowing the user to specify a nonlinear relationship. This is often useful in welding
or casting analyses.
Format
User subroutine USPCHT is written with the following headers:
SUBROUTINE USPCHT (SPHEAT,M,NN,KCUS,INC,NCYCLE,MATUS,
+NSTATS,DT,DTDL,CPTIM,TIMINC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION M(2),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M(1) is the user element number.
M(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
INC is the increment number.
NCYCLE is the cycle number.
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
NSTATS is the number of state variables.
Main Index
Main Index
CHAPTER 3 239
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
240 Marc Volume D: User Subroutines and Special Routines
■ UCURE
Description
This subroutine allows you to define the cure kinetics models and calculation of the
degree of cure. This subroutine is activated if the cure kinetics model number is
given as –1 in the first field of the second data block under the CURE RATE model
definition option. This subroutine can be used for heat transfer or the cure-thermal-
mechanical coupled analysis of resin or composite that has resin inside. For details
of the usage of cure rate, refer to the CURING parameter and the CURE RATE model
definition option.
Format
User subroutine UCURE is written with the following headers:
SUBROUTINE UCURE(M,N,NN,KCUS,MATUS,DT,AK,DENSITY,VOLUMI,
*CUREDAT,TEMPBEG,TEMPEND,DELTIME,TIME,CURERATE)
INCLUDE '../COMMON/IMPLICIT'
INCLUDE '../COMMON/MRCPARM'
DIMENSION CUREDAT(*),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M is the element number.
N is the elsto number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
DT is the degree of cure at the beginning of the increment.
AK is the degree of cure at the end of the increment.
DENSITY is the density of the material at the initial point.
Main Index
Main Index
CHAPTER 3 241
User-defined Anisotropy and Constitutive Relations User Subroutines
Notes: UNVGAS is the universal gas constant used by Marc. The default value of UNVGAS is
(except when input by you):
UNVGAS = 8.134 (J/mol/K) with SI-m unit (N, m, S, C);
UNVGAS = 8314. (J/mol/K) with SI-mm unit (N, mm, S, C);
UNVGAS = 1.986 (Btu/lbMol/R) with US (British) unit (lbf, inch, S, F)
UNVGAS is already defined by Marc and saved in common block mrcparm. You do not
need to define UNVGAS.
Main Index
Main Index
242 Marc Volume D: User Subroutines and Special Routines
■ USHRINKAGE
Description
This user subroutine allows you to define the volumetric cure shrinkage models and
calculates the degree of cure shrinkage, the volumetric cure shrinkage strain, and
the directional Cure Shrinkage Coefficient matrix (CSC). This subroutine is
activated if the cure shrinkage model number is given as –1 in the first field of first
data block under the CURE SHRINKAGE model definition option. This subroutine
can be used for heat transfer or the cure-thermal-mechanical coupled analysis of
resin or composite that includes resin. For details of the usage of cure shrinkage,
refer to the CURING parameter and the CURE RATE and CURE SHRINKAGE model
definition options.
Format
User subroutine UCURE is written with the following headers:
SUBROUTINE USHRINKAGE(M,N,NN,KCUS,MATUS,AK,AKCBEG,
*AKCDEG,VOLFACT,SHRKDAT(1),TEMPBEG,
*TEMPEND,TIME,DELTIME,AKINC,VLMSTR)
INCLUDE '../COMMON/IMPLICIT'
DIMENSION SHRKDAT(*),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M is the element number.
N is the elsto number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
AK is the degree of cure at the end of the increment.
Main Index
Main Index
CHAPTER 3 243
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
244 Marc Volume D: User Subroutines and Special Routines
■ UCRPLW (Viscoplastic)
Description
The UCRPLW user subroutine can be used for defining complex relationships for the
factors in the power law expression for the creep strain rate. This user subroutine is
called automatically when the implicit creep option is used in Marc. Note that the
latter is implemented for isotropic materials exhibiting power law creep. For more
complex implicit creep behavior, use the UVSCPL user subroutine.
Format
UCRPLW is written with the following headers:
SUBROUTINE UCRPLW(CPA,CFT,CFE,CFTI,CFSTRE,CPTIM,TIMINC,
* EQCP,DT,DTDL,MDUM,NN,KCUS,MATUS)
C CREEP STRAIN RATE = CPA*CFT*CFE*CFTI*(STRESS**CFSTRE)
user coding
RETURN
END
where:
Input:
CPTIM time at the beginning of the increment.
TIMINC time Increment.
EQCP creep strain at the beginning of the increment.
DT temperature at the beginning of the increment.
DTDL incremental temperature.
MDUM(1) user element number.
MDUM(2) internal element number.
NN integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
Main Index
Main Index
CHAPTER 3 245
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
246 Marc Volume D: User Subroutines and Special Routines
■ CRPLAW
Description
The CRPLAW user subroutine allows the user to specify the increment of
creep strain.
The use of such a user subroutine is flagged by setting the fifth field of the second
block in the CREEP model definition option to zero. This user subroutine is called
as required during the analysis because of possible re-cycling due to
nonconvergence. The number of times the user subroutine is called in each
increment is not fixed.
Marc allows the user to input his own creep law through the CRPLAW
user subroutine.
The assumed form of the law is:
ε· c = f ( σ, T, t, ε c, p, α 1, α 2, etc )
where:
ε· c is the equivalent creep strain rate, in uniaxial tension.
Main Index
Main Index
CHAPTER 3 247
User-defined Anisotropy and Constitutive Relations User Subroutines
Format
User subroutine CRPLAW is written with the following headers:
SUBROUTINE CRPLAW(EQCP,EQCPNC,STR,CRPE,T,DT,TIMINC,CPTIM,M,
+NN,KCUS,MATUS,NDI,NSHEAR)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION T(3),DT(1),STR(1),CRPE(1),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
EQCP Passed in as total equivalent creep strain.
1⁄2
ε c = Σ ⎛ --- Δε c i j Δε c i j⎞
2
⎝3 ⎠
1⁄2
ε c = ⎛ --- ΣΔε c i j ΣΔε c i j⎞
2
⎝3 ⎠
Main Index
Main Index
248 Marc Volume D: User Subroutines and Special Routines
Δε c = Δt ⋅ f ( σ, etc )
σ
ε c = A sinh ⎛ ----⎞
·
⎝ B⎠
Main Index
Main Index
CHAPTER 3 249
User-defined Anisotropy and Constitutive Relations User Subroutines
– ε c + f ( T, σ, t n )
t = -------------------------------------------
– f′ ( T, σ, t n )
ε c = f ( T, σ, t )
with
∂f
f′ = -----
∂t
Practical experience shows this needs about four or five iterations for the creep law
in the example. The listing of CRPLAW follows:
SUBROUTINE CRPLAW(EQCP,EQCPNC,STR,CRPE,T,DT,TIMINC,
+CPTIM,M,NN,DC,MATUS,NDI,NSHEAR)
IMPILCIT *8 (A-H, O-Z)
DIMENSION T(1),DT(1),STR(1),CRPE(1),MATUS(2)
C THIS ROUTINE FORMULATES THE STRAIN HARDENING FORMULATION OF
C THE BLACKBURN CREEP LAW.
C EPSILON
C DOT=1/TIME SUB CAP T * (EPSILON SUR T - EPSILON SUSUPER T)
C + EPSILON DOT SUB M
C THE FOLLOWING DEFINITION APPLIES TO THE FUNCTION CODED
BELOW
C A IS LN(A)
C B IS ALPHA*SIGMA
C E IS N
Main Index
Main Index
250 Marc Volume D: User Subroutines and Special Routines
C C IS Q
C C IS T
C EPSILON SUB T, T, SUB T AND EPSILON SUB M DOT ARE GIVEN BY
A CURVE
C FUN + A*SINH TO N OF ALPHA SIGMA TIMES E TO Q/T EXP
C IHARD=0 USES STRAIN HARDENING
C STRAIN NOW DIMENSIONAL
C TEMPERATURE IN FAHRENHEIT
C STRESS IN PSI
C TIME IN HOURS
FTN(A,B,C,D,E)=EXP(A)*(.5*(EXP(B)-EXP(-
B))**)E*EXP(C/D))
IHARD=0
IHARD=1
EQCPNC=0
IF(T(1).LT.25.)GO TO 1
TRANK=DT(1)+459.67
ET=FTN(2.76,1.976E-3*T(1),-1,03E4,TRANK,.08778)
TT=FTN(-21.38,.09546E-3*T(1),4.54E4,TRANK,-2.31)
EDOT=FTN(57.2,.02345E-3*T(1),-9.98E4,TRANK,6.933)
C THE FOLLOWING IS A NEWTON METHOD TO EXPRESS T IN TERMS OF
KNOWN
C QUANTITIES. INITIAL GUESS IS T= (F SUB C- ET) / E DOT M
IF(IHARD.EQ.1) GO TO 10
TIME=CPTIM GO TO 2
10 CONTINUE
TIME=(100.*EQCP-ET)/EDOT
FT=ET/TT
IF(EQCP.EQ.0.) GO TO 4
2 EFT=EXP (-TIME/TT)
FT=FT*EFT/TT
4 ST=EDOT
EQCPNC=(FT+ST)*TININC*0.01
1 RETURN
END
Main Index
Main Index
CHAPTER 3 251
User-defined Anisotropy and Constitutive Relations User Subroutines
■ VSWELL
Description
The VSWELL user subroutine allows the user to include pure swelling (dilatational)
creep in Marc.
Format
User subroutine VSWELL is written with the following headers:
SUBROUTINE VSWELL(SWELL,SIG,TEMP,N,NN,KCUS,CPTIM,TIMINC,
+MATUS,DTEMP)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION SIG(3),TEMP(1),DTEMP(1),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
SIG(1) is the uniaxial equivalent of J2 stress.
SIG(2) is the hydrostatic stress.
SIG(3) is the current total swelling strain (accumulated from this
user subroutine).
1 DV
Note: This is a uniaxial component; that is, --- ---------
3 V
TEMP(1) is the temperature.
TEMP(2),TEMP(3), etc. are the additional state variables read in through the
CREDE user subroutine.
N is the element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum
element).
CPTIM is the total creep time.
Main Index
Main Index
252 Marc Volume D: User Subroutines and Special Routines
The user defines the increment of dilatational creep by this user subroutine, which
is called at each integration point where constitutive calculations are being
performed by Marc. It is called automatically when any CREEP incremental option
is used (AUTO CREEP, CREEP INCREMENT, etc.) and can be used alone or in
combination with a Mises type creep law (CRPLAW user subroutine). This user
subroutine is called as required during the analysis, so that, because of possible re-
cycling due to nonconvergence, the number of times the user subroutine is called in
each increment is not fixed.
Example
The following is a typical irradiation swelling formulation:
b b
⎛ DV
--------
- ⎞ = c ( q ⋅ t ) a exp ⎛ b + -----1- + -----2-⎞
⎝ V⎠ ⎝ 0
T 1 T 2⎠
where:
a, b0, b1, b2, c are numerical constants, q is flux, t is time and T is
temperature.
Differentiating with respect to time,
b1 b2
----- ⎛⎝ ---------⎞⎠ = acq a t a – 1 exp ⎛⎝ b 0 + -----1- + -----2-⎞⎠
d DV
dt V T T
Main Index
Main Index
CHAPTER 3 253
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
254 Marc Volume D: User Subroutines and Special Routines
■ WKSLP
Description
This user subroutine makes it possible for the user to program the yield stress and
the corresponding work-hardening slope directly as a function of equivalent plastic
strain and temperature. See the WORK HARD model definition option. The user
needs to define the value of the slope of the equivalent stress vs. equivalent
plastic strain. The current yield stress can be defined also. The specification of
the latter is optional. If the value of the current yield is not given here, Marc
calculates it from the initial yield value and the work-hardening slopes defined in
this user subroutine.
In order to use this user subroutine instead of the slope-break point data, the user
should set the number of work-hardening slopes equal to -1. No work-hardening
slope break point data blocks should be included. The user subroutine is called as
required by Marc during the elastic-plastic calculations. The number of times it is
called per increment depends on the number of points going plastic, on the
nonlinearity of the work-hardening curve, and on temperature dependence.
Format
User subroutine WKSLP is written with the following headers:
SUBROUTINE WKSLP(M,NN,KCUS,MATUS,SLOPE,EBARP,ERAT,STRYT,DT,
+IFIRST)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M is the current user element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
Main Index
Main Index
CHAPTER 3 255
User-defined Anisotropy and Constitutive Relations User Subroutines
2 p p
dε ρ = --- dε i j dε i j
3
·p
ERAT is the equivalent plastic strain rate, ε
DT is the current total temperature.
IFIRST is passed in as 1 for initial yield curve; is passed in as 2 for the tenth cycle
yield curve when ORNL constitutive theory is flagged.
Required Output:
SLOPE is the work-hardening slope to be defined by the user as:
p ·p p
dσ σ ( ε , ε ) – ( ε , 0 )
--------p + ----------------------------------------------
-
·p
dε ε Δt
3
σ = equivalent tensile stress = --- S i j S i j
2
1
S i j = σ i j – --- δ i j σ k k
3
dσ dσ
Note: --------- is not the slope of the tensile stress-strain curve, which is ------- with:
dε P dε
dε = dε e + dε p
The time increment, Δt, is given by variable TIMINC in common block CREEPS. The
user must take care to provide rate of change of stress with respect to plastic strain,
not total strain. The second term in the SLOPE expression allows the user to include
strain-rate effect if desired. The user must define SLOPE and STRYT in this user
subroutine. EBARP, DT, and IFIRST should not be changed.
Main Index
Main Index
256 Marc Volume D: User Subroutines and Special Routines
Note: If the UPDATE or LARGE STRAIN parameter is used, the stresses are Cauchy (true)
stress and the strains are logarithmic strains.
Example
Let us assume that yield surface can be expressed as:
σy = A ( 1 + εp ) n
then,
∂σ y
--------- = nA ( 1 + ε p ) n – 1
∂ε p
Main Index
Main Index
CHAPTER 3 257
User-defined Anisotropy and Constitutive Relations User Subroutines
■ USPRNG
Description
The USPRNG user subroutine permits the introduction of further modification of
nonlinear spring constants for use with the SPRINGS and/or FOUNDATION options
and input of nonlinear damping. For linear springs, your coding must supply both
the ratio of the current value of spring stiffness to the reference data input value and
the total spring force. For dynamic analysis, the ratio of damping coefficient can
also be provided. For nonlinear springs that have already been defined using the
TABLE option in the data input, your coding must supply both the ratio of the user-
defined spring stiffness to the current tabular stiffness and the spring force. The
value of the spring/dashpot constant, total time, and the element or spring number
are made available to the user subroutine. For harmonic analysis, the
spring/dashpot constants can be a function of the frequency. The USPRNG user
subroutine is accessible whenever either the SPRINGS or the FOUNDATION option
is used. USPRNG can also be used for defining spring stiffnesses in thermal analysis
(regular heat transfer analysis or thermal part of a thermo-mechanical coupled
analysis), and in Joule heating analysis.
Format
User subroutine USPRNG is written with the following headers:
SUBROUTINE USPRNG(RATK,F,DATAK,U,TIME,N,NN,NSPRNG)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION RATK(*),DATAK(*),U(*),TIME(*),N(*),F(*),NSPRNG(*)
user coding
RETURN
END
where:
Main Index
Main Index
258 Marc Volume D: User Subroutines and Special Routines
Input:
DATAK(1) is the data value of spring constant (or foundation stiffness) as defined
by the user in SPRINGS/FOUNDATION options data input. For
previously defined nonlinear springs, it is the current nonlinear data
value calculated from input tables. This is input to the program.
(a) For springs: DATAK(1) = mechanical stiffness
(b) For thermal links: DATAK(1) = thermal conduction
(c) For electrical links: DATAK(1) = electrical conduction
DATAK(2) is the data value of the damping constant as defined by you in the
SPRINGS option data input. For previously defined nonlinear dashpots,
it is the current nonlinear data value calculated from input tables. It is
only used for transient mechanical analysis. This is input to the program.
For Elastic Foundation (Only Static Contribution):
U(1) For elastic foundation: U(1) = Un.
U(2)
For dynamic spring/dashpot U ( 2 ) = U· 2 – U· 1 .
U(3) For mechanical springs in coupled analysis and for electrical links in
Joule heating analysis: U ( 3 ) = Average Temperature of Spring or it is
not used.
U(4)
Not used
For springs/dashpots (harmonic analysis):
U(1) U ( 1 ) = U 2 – U 1 static predeformation
Main Index
Main Index
CHAPTER 3 259
User-defined Anisotropy and Constitutive Relations User Subroutines
If the user subroutine is called for an elastic foundation point, NSPRNG(1) and
NSPRNG(2) are zero.
Main Index
Main Index
260 Marc Volume D: User Subroutines and Special Routines
physically consistent forces, care should be exercised on defining node 1 and node
2 correctly. For true direction springs, U(1), U(2), U(3), and U(4) are positive if
the spring is in tension and negative if the spring is in compression.
During a heat transfer run or electrical run (NSPRNG(2) = 2 or 4), springs simply act
as links. Only the user-input conduction DATAK(1) comes into the routine and the
user needs to return the modified ratio RATK(1). The dashpot is not active. The
spring force F the gradient across the spring, U, is not needed and does not need to
be defined.
Main Index
Main Index
CHAPTER 3 261
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UCRACK
Description
This user subroutine allows the user to input a constant or a temperature dependent
ultimate stress at each integration point of an element for cracking analysis. In
addition, the user can define the strain softening modulus and the crushing strain.
Format
User subroutine UCRACK is written with the following headers:
SUBROUTINE UCRACK (SCRACK,ESOFT,ECRUSH,ECP,DT,DTDL,N,NN,
1 KCUS, INC, NDI, NSHEAR, SHRFAC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION ECP(1), DT(1), DTDL(1),KCUS(2)
user coding
RETURN
END
where:
Input:
ECP is the array of crack strains.
DT is the array of state variables, temperature first.
DTDL is the array of incremental state variables, temperature first.
N is the element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
INC is the increment number.
NDI is the number of direct components.
NSHEAR is the number of shear components.
SHRFAC is the user-defined shear retention factor.
Main Index
Main Index
262 Marc Volume D: User Subroutines and Special Routines
Required Output:
SCRACK is the user-defined ultimate cracking stress.
ESOFT is the user-defined strain softening moduli.
ECRUSH is the user-defined strain at which crushing occurs.
σ C R = A ( 1 – e–R T )
Main Index
Main Index
CHAPTER 3 263
User-defined Anisotropy and Constitutive Relations User Subroutines
■ TENSOF
Description
The tension softening modulus defines the post-failure behavior at an integration
point. By default in Marc, the reduction of the cracking stress to zero is a linear
function of the crack strain. This user subroutine allows the user to define for
instance a nonlinear behavior. The user subroutine is automatically called for every
crack in the analysis.
Format
User subroutine TENSOF is written with the following headers:
SUBROUTINE TENSOF (D,SP,GFP,DEP,ECP,SCRACK,SOSTR,ETSNEW,
ETSOFT,XH,SPECLN,JSOFT)
where:
Input:
GFP is the change in stress due to incremental crack growth.
DEP is the current strain increment.
ECP is the crack strain at end of increment.
SCRACK is the critical cracking stress given in input.
SOSTR is the current cracking stress based on previous softening.
ETSNEW is the current value of temperature dependent Young’s modulus.
ESOFT is the tension softening modulus given in input.
XH is the characteristic element length.
SPECLN is the test specimen length.
Required Output:
D is the stiffness in the crack direction term to be defined by you.
SP is the stress at end of increment as function of crack strain to be defined
by the user.
JSOFT is the status indicator for softening. Used for plotting only.
= 1 inside softening range.
= 2 outside softening range.
Main Index
Main Index
264 Marc Volume D: User Subroutines and Special Routines
Note that the definition of the stiffness D does not need to be exact. The correct
definition of the stiffness only determines the speed of the convergence. In fact, in
the above user subroutine, a large negative value of the stiffness term should never
be used as this would result in convergence problems. The stress definition,
however, must be exact; otherwise, the wrong solution is obtained.
Main Index
Main Index
CHAPTER 3 265
User-defined Anisotropy and Constitutive Relations User Subroutines
■ USHRET
Description
The shear retention factor is used to define the residual shear stiffness for a cracked
integration point in a cracking analysis. The shear retention factor is defined as the
factor with which the initial shear stiffness is multiplied. With this user subroutine,
the user can define the shear retention factor to be, for instance, a function of the
crack strain. The user subroutine is automatically called for each existing crack.
Format
User subroutine USHRET is written with the following headers:
SUBROUTINE USHRET (FACTOR,ECRA1,ECRA2,ECRA12)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
ECRA1 is the crack strain in the first crack direction.
ECRA2 is the crack strain in the second crack direction.
ECRA12 is the shear strain over the crack.
Required Output:
FACTOR is a user-defined shear retention factor to be defined here.
Main Index
Main Index
266 Marc Volume D: User Subroutines and Special Routines
■ UVOID
Description
This user subroutine allows the definition of the initial void fraction in an elastic
plastic material when the damage model is being used. This user subroutine is
automatically called if the Gurson damage model is specified for a specific material.
Format
User subroutine UVOID is written with the following header:
SUBROUTINE UVOID(VOIDFI,M,NN,KCUS,MATUS,X)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION M(2),X(1),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M(1) is the user element number.
M(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
X is the coordinate position of integration point.
Required Output:
VOIDFI is the initial void fraction to be defined here.
Main Index
Main Index
CHAPTER 3 267
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UVOIDN
Description
This user subroutine allows the definition of the void nucleation rate in a material
using the Gurson model. This user subroutine is called if the void nucleation
method under the DAMAGE model definition option is set to 3.
In this model, the yield surface is given as:
σ e2 q 2 σ KK
F = -------- + 2q 1 f cosh ⎛ -----------------⎞ – [ 1 + ( q 1 f ) ] = 0
2
σm 2 ⎝ 2σ m
⎠
where:
Format
User subroutine UVOIDN is written with the following headers:
SUBROUTINE UVOIDN(A,B,M,NN,KCUS,MATUS,EPL,EPLAS,S,NDI,
+NSHEAR,DT,DTDL)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION M(2),DT(1),DTDL(1),EPL(1),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M(1) is the user element number.
M(2) is the internal element number.
Main Index
Main Index
268 Marc Volume D: User Subroutines and Special Routines
In this user subroutine, the following type of stress controlled nucleation rate can
be specified:
·
· · σk k
f = Aσ + B ---------
3
·
where σ is the von Mises equivalent stress rate, and σ· k k is the hydrostatic
stress rate.
Main Index
Main Index
CHAPTER 3 269
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UVOIDRT
Description
The UVOIDRT user subroutine allows the user to define either the initial void ratio
or the initial porosity in a soil analysis or a mass diffusion analysis. It may also be
used to define a nonhomogeneous distribution of these variables, which in turn are
used as independent variables to define other variables through the TABLE option.
Whether the void ratio or the porosity is defined is based upon whether the INITIAL
VOID RATIO or INITIAL POROSITY option.
Format
User subroutine UVOIDRT is written with the following header:
SUBROUTINE UVOIDRT(M,N,NN,KCUS,MATS,COORD,NCRD,INC,CPTIM,
*TIMINC,VALUE,IFLAG)
INCLUDE '../COMMON/IMPLICIT'
DIMENSION MATUS(2),KCUS(2)
user coding
RETURN
END
where
Input:
M element number.
N elsto number.
NN integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) user material id.
MATUS(2) internal material id.
COORD coordinate of integration point.
NCRD number of coordinates.
INC increment number.
Main Index
Main Index
270 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 271
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UGRAIN
Description
This user subroutine allows the user to calculate the typical grain size based upon
the state of material. The UGRAIN user subroutine is used in conjunction with the
GRAIN SIZE option where the initial grain size is prescribed. This user subroutine is
called at each integration point.
The calculation of grain size may be performed with all constitutive models.
Format
User subroutine UGRAIN is written with the following header lines:
SUBROUTINE UGRAIN(M,N,NN,KCUS,MATUS,EPLAS,ERATE,DT,DTDl,
* IGNMOD,GRNDAT,GRNSIZ,TIME,DELTIME)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DT(*),GRNDAT(*),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M is the element number
N is the elsto number
NN is the integration point number
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
EPLAS is the equivalent plastic strain
ERATE is the equivalent plastic strain rate
DT is the state variables at beginning of increment
DTDL is the incremental state variables
Main Index
Main Index
272 Marc Volume D: User Subroutines and Special Routines
GRNDAT is the material data, GRNDAT (1) is the initial grain size
TIME is the time - beginning of increment
DELTIME is the incremental time
IGNMOD is the input mode for different model (-1 for user-defined)
Required Output:
GRNSIZ is the current grain size
Main Index
Main Index
CHAPTER 3 273
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UDAMAG
Description
This user subroutine provides the user with the mechanism for providing a
Kachanov damage factor to be applied to the material properties. The UDAMAG user
subroutine is used in conjunction with the DAMAGE model definition option. The
user defines the damage factor (df). 0 ≤ df ≤ 1 where df = 0 implies a fully damaged
material. If model 9 is used, then:
p ·p
σ y = σ y ( ε , ε , T )* ( 1.0 – df )
p ·p
σ y = σ y ( ε , ε , T )* ( 1.0 – df ) and E = E ( T )* ( 1.0 – df )
This model is only applied to elastic-plastic materials using the additive procedure;
it does not work with the FeFp procedure.
Format
User subroutine UDAMAG is written with the following header lines:
SUBROUTINE UDAMAG(M,N,NN,KCUS,MATUS,EPLAS,ERATE,DT,DTDL,
*DAMDAT,DAMFAC,TIME,DELTIME)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DT (*),DAMDAT(*),DTDL(*),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M is the user element number.
N is the internal element number.
NN is the integration point number.
Main Index
Main Index
274 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 275
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UPOWDR
Description
Material properties of powder metals which are used in Hot Isostatic Pressing (HIP)
are typically dependent upon both the temperature and the relative density of the
material. This user subroutine provides an alternative mechanism to enter this data.
This user subroutine is called for all elements for which the POWDER option is
used. The elastic, plastic, and thermal properties can be defined in this user
subroutine. In this model, the yield function, F, is defined as:
P2 1 ⁄ 2
F = --- ⎛ --- S i j S i j + ------⎞
1 3
– σy
γ ⎝2 β 2⎠
where:
γ and β are material parameters to be entered here.
S is the deviatoric stress.
P is the hydrostatic stress.
σy is the equivalent tensile stress.
ε = --- ⎛ ------⎞
· 1 F
μ ⎝ σ y⎠
where:
μ is the viscosity.
Main Index
Main Index
276 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine UPOWDR is written with the following headers:
SUBROUTINE UPOWDR(E,G,POISS,GAMMA,BETA,VISC,SIGY,AMB,COMPF,
+REDENS,DT,DTDL,DET,IHEAT,IHCPS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION POWDAT(32)
user coding
RETURN
END
where:
Input:
E is the Young’s moduli.
G is the shear moduli.
POISS is the Poisson’s ratio.
REDENS is the relative density.
DT is the array of state variables, temperature first.
DTDT is the array of increment of state variables.
DET is the determinant which gives the change in volume.
IHEAT is the indicates if this is the heat transfer calculation in a coupled analysis.
= 0 stress pass.
= 1 heat pass.
Required Output:
GAMMA is the parameter γ in the yield function.
BETA is the parameter β in the yield function.
VISC is the viscosity μ.
SIGY is the temperature-dependent equivalent tensile stress σy
AMB is the conductivity in a coupled analysis.
COMPF is the specific heat in a coupled analysis.
In the stress pass, you should define E, G, POISS, GAMMA, VISC, and SIGY.
In the heat transfer pass, the user should define AMB and COMPF.
The values of E, G, POISS, GAMMA, BETA, VISC, AMB, COMPF upon entrance are the values
calculated by Marc based upon user input.
Main Index
Main Index
CHAPTER 3 277
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UPERM
Definition of Permeability
Description
In a diffusion or soil analysis, it might be necessary to define the permeability as a
function of the porosity or other variables. This user subroutine allows the user to
enter a general nonlinear relationship. It is called during any coupled diffusion
analysis or fluid-soil analysis.
Format
User subroutine UPERM is written with the following headers:
SUBROUTINE UPERM(PERMEA,M,NN,DT,POROP,POROS,X,
+K,STRESS,NGENS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION PERMEA(K,K),X(1),STRESS (*)
user coding
RETURN
END
where:
Input:
M is the element number.
NN is the integration point number.
DT is the temperature.
POREP is the pore pressure.
POROS is the porosity.
X is the array of integration point coordinates.
K is the dimension of the permeability matrix
STRESS is the effective stress matrix.
(in a soil analysis. In a pure diffusion analysis, stress is not used.)
NGENS is the number of stress components.
Required Output:
PERMEA is the permeability matrix.
Main Index
Main Index
278 Marc Volume D: User Subroutines and Special Routines
■ UMOONY
Mooney-Rivlin Material
Description
This user subroutine allows the user to redefine the constants used in the strain
energy function. This data is normally entered through the MOONEY model
definition option.
The form of the strain energy function is:
W = C 10 ( I 1 – 3 ) + C 01 ( I 2 – 3 ) + C 11 ( I 1 – 3 ) ( I 2 – 3 ) + C 20 ( I 1 – 3 ) 2 + C 30 ( I 1 – 3 ) 3
Format
User subroutine UMOONY is written with the following headers:
SUBROUTINE UMOONY(C10,C01,C11,C20,C30,T,N,NN,MATUS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION N(2),MATUS(2)
user coding
RETURN
END
where:
Input:
T is the temperature.
N(1) is your element number.
N(2) is the internal element number.
NN is the integration point number.
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
Required Output:
C10,C01,C11,C20,C30 are the values used in the strain energy function to be
defined by the user.
Main Index
Main Index
CHAPTER 3 279
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UENERG
Description
This user subroutine allows the user to define his own elastic strain energy function
for incompressible materials. Normally, the five constant second-order model is
entered using the MOONEY model definition option. This option must still be used
to invoke this user subroutine. This user subroutine can be used when either the
total Lagrange or updated Lagrange procedure is used. The five material
parameters, C10, C01, C11, C20, and C30 must be correctly defined with the MOONEY
option for energy calculation.
Format
User subroutine UENERG is written with the following headers:
SUBROUTINE UENERG(W,W1,W2,W11,W12,W22,WI1,WI2,
$ C10,C01,C11,C20,C30,N,NN)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION N(2)
user coding
RETURN
END
where:
Input:
WI1 is I 1 – 3 , with I 1 the first deviatoric invariant of the
right Cauchy-Green deformation tensor.
WI2 is I 2 – 3 , with I 2 the second deviatoric invariant of
the right Cauchy-Green deformation tensor.
C10, C01, C11, C20, C30 are the five material parameters of the
Mooney formulation.
N(1) is the user element number.
N(2) is the internal element number.
NN is the integration point number.
Main Index
Main Index
280 Marc Volume D: User Subroutines and Special Routines
Required Output:
W is the strain energy density.
W1 is ∂W ⁄ ∂I 1 .
W2 is ∂W ⁄ ∂I 2 .
2
W11 is ∂ 2 W ⁄ ∂I .
1
W12 is ∂ 2 W ⁄ ∂I 1 ∂I 2 .
2
W22 is ∂ 2 W ⁄ ∂I .
2
Main Index
Main Index
CHAPTER 3 281
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UOGDEN
Description
This user subroutine allows the definition of the Ogden material parameters.
Additionally, any temperature dependence of these properties can be entered here.
The OGDEN option must be used to indicate that the element uses this material law,
and the number of terms in the series must be entered through the model definition
option. When the Ogden model is used in the updated Lagrange formulation, this
user subroutine is called twice per integration point. The first time for the bulk
modulus; the second time for the μ and λ coefficients.
The strain energy function for this material is written as:
n
μi α α α
W = ∑ ----- ( λ 1 i + λ 2 i + λ 3 i – 3 ) + 4.5K ( J 1 / 3 – 1 ) 2
αi
i = 1
Format
User subroutine UOGDEN is written with the following headers:
SUBROUTINE UOGDEN(MATUS,NSER,M,NN,KCUS,INC,CPTIM,TIMINC,
+XMTDAT,BULK,DT,DTDT)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION
XMTDAT(2,NSER),M(2),DT(1),DTDL(1),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
NSER is the number of terms in the series.
Main Index
Main Index
282 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 283
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UELDAM
Description
This user subroutine allows the user to define the damage parameters for the Ogden
model. There are two types of damage: one is associated with the deviatoric (shear)
behavior, and one is associated with the dilatational (volumetric) behavior
(additional details can be found in Marc Volume A: User Information). This user
subroutine is, therefore, called twice per integration point, once for deviatoric
behavior and once for volumetric behavior. This user subroutine is called only if the
damage type is set to 6 through the DAMAGE model definition option.
Format
User subroutine UELDAM is written with the following headers:
SUBROUTINE UELDAM(M,N,NN,KCUS,INC,LOVL,MATUS,TIMINC,CPTIM,
2 TOTEN,DEVEN,TOTEND,TOTENV,SURFC,SURFD,DT,
3 DTDL,DAMD,DDAMD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DT(1),DTDL(1),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
M is the user element number.
N is the internal element/elsto number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
INC is the increment number.
LOVL is 4 for assembly phase.
is 6 for stress recovery phase.
MATUS(1) is the user material identifier.
Main Index
Main Index
284 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 285
User-defined Anisotropy and Constitutive Relations User Subroutines
■ HYPELA2
Description
This user subroutine gives the user the ability to implement arbitrary material
models in conjunction with the HYPOELASTIC model definition option (see Marc
Volume C: Program Input). Marc supplies the user with the total displacement,
incremental displacement, total mechanical strain (mechanical strain = total strain
– thermal strain), the increment of mechanical strain, and other information. Stress,
total strain, and state variable arrays at the beginning of the increment ( t = n ) are
passed to HYPELA2. The user is expected to calculate stresses S, tangent stiffness D,
and state variables (if present) that correspond to the current strain at the end of the
increment ( t = n + 1 ).
Format
User subroutine HYPELA2 is written with the following headers
SUBROUTINE HYPELA2(D,G,E,DE,S,T,DT,NGENS,N,NN,KCUS,MATUS,
2 NDI,NSHEAR,DISP,DISPT,COORD,FFN,FROTN,STRECHN,EIGVN,FFN1,
3 FROTN1,STRECHN1,EIGVN1,NCRD,ITEL,NDEG,NDM,NNODE,
4 JTYPE,LCLASS,IFR,IFU)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION E(1),DE(1),T(1),DT(1),G(1),D(NGENS,NGENS),S(1)
DIMENSION N(2),COORD(NCRD,NNODE),DISP(NDEG,NNODE),
2 DISPT(NDEG,NNODE),FFN(ITEL,ITEL),FROTN(ITEL,ITEL)
3 STRECHN(ITEL),EIGVN(ITEL,ITEL),FFN1(ITEL,ITEL)
4 FROTN1(ITEL,ITEL),STRECHN1(ITEL),EIGVN1(ITEL,ITEL)
DIMENSION MATUS(2),KCUS(2),LCLASS(2)
user coding
RETURN
END
where:
Input:
E is the total elastic mechanical strain.
DE is the increment of mechanical strain.
Main Index
Main Index
286 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 287
User-defined Anisotropy and Constitutive Relations User Subroutines
Required Output:
D is the stress strain law to be formed.
G is the change in stress due to temperature effects.
S is the stress to be updated by you.
Parameter
Without a specific parameter, engineering strain and stress are passed.
With the LARGE DISP parameter, Green-Lagrange strains and second Piola-
Kirchhott stresses are passed.
With LARGE STRAIN parameter, logarithmic strains and Cauchy stresses are passed.
For large strain rubber elasticity, the UELASTOMER user subroutine is
recommended.
For large strain inelasticity, the LARGE STRAIN parameter must be used. With the
parameter, strain and stress components are rotated by Marc to account for rigid-
body motion before HYPELA2 is called; so, the stress integration for the
co-rotational part is performed in HYPELA2 based on rotation neutralized values.
The user is required to pass back the updated rotation neutralized stress based
on the co-rotational system. The shell thickness is only updated with the LARGE
STRAIN parameter.
Strains
E ( ) and DE( ), which are passed to HYPELA2, are the elastic mechanical strain and
the increment of mechanical strain, respectively. Here, mechanical strain is defined
by “total strain – thermal strain”. Note that for the first iteration (NCYCLE = 0) during
assembly (LOVL = 4), DE is an estimate of the strain change. The variables NCYCLE
and LOVL can be obtained from common block CONCOM.
The total strain etotl(*) can be obtained using:
include’array2’
include ’heat’
include ’ngenel’
include ’space’
dinension etotl(6)
1a4=ietota+lofr+(nn-1)*ngenel-1
do i=1,ngenel
etotl(i)=varselem(1a4+i)
enddo
Main Index
Main Index
288 Marc Volume D: User Subroutines and Special Routines
Coordinate System
Continuum (3-D-Solid, plane strain, axisymmetric and 2-D plane stress) elements
use the global Cartesian coordinate system for the base vectors of stress and strain
components. Also, membranes, shells and beams usually use the local Cartesian
systems defined in Marc Volume B: Element Library (please check this volume for
the element used). However, if the LARGE STRAIN parameter is used, strain
and stress components are rotated to account of rigid-body motion before HYPELA2
is called. So, local Cartesian coordinate system is used based on rotation-
neutralized values
If the ORIENTATION model definition option is used, the stress and strain
components are stored in the local orientation axis. The basis vectors rotate with the
material by rotation tensor (R) and, so the stress and strain are already stored in the
rotated orientation axis before HYPELA2 is called.
State Variables
If there are any state variables (other than temperature) in the problem, the user can
use the array T( ) to update and return these state variables. The increments of the
state variables should be calculated and returned as the array DT ( ). T( ) and DT( )
have the size of NSTATS if NSTATS is the number of state variables defined in the
PARAMETERS model definition option in the input file. T(1) and DT(1) are reserved
for the temperature and the temperature increment, respectively, and calculated by
Marc. You must not change the values of T(1) and DT(1) even in isothermal
problems with state variables. All variables T(2) to T(NSTATS) and DT(2) to
Main Index
Main Index
CHAPTER 3 289
User-defined Anisotropy and Constitutive Relations User Subroutines
DT(NSTATS) are accessible to you. If the LARGE STRAIN parameter is used, any
nonscalar state variables (vector or tensor values) need to be rotated by using the
rotation tensor (R) provided.
Tangent Stiffness
The user also needs to provide the tangent stiffness D based on the updated stress.
∂ ( Δσ i )
D i j = -----------------
∂ ( Δε j )
Main Index
Main Index
290 Marc Volume D: User Subroutines and Special Routines
DO J=1,3
DO K=1,3
UN1 (I,J) = UN1 (I,J)+DSQRT (STRETCH1(K)*EIGVN1(I,K)*EIGVN1(J,K))
ENDDO
ENDDO
ENDDO
In this case, STRECHN1 stores the value of the squares of the stretches, and
EIGVN1(I,J) stores the I-th eigenvector component corresponding to the J-th
eigenvalue of C, where C is the right Cauchy-Green Tensor at t = n + 1 .
For shells and beams, kinematic variables are not available.
The total strain etotl(*) can be obtained using:
include’array2’
include ’heat’
include ’ngenel’
include ’space’
dinension etotl(6)
1a4=ietota+lofr+(nn-1)*ngenel-1
do i=1,ngenel
etotl(i)=varselem(1a4+i)
enddo
Main Index
Main Index
CHAPTER 3 291
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UFINITE
Description
This user subroutine is used for finite deformation isotropic material models based
on principal stretches. Both nonlinear elasticity and large strain plasticity models
can be implemented using this user subroutine. This user subroutine requires the
use of the LARGE STRAIN, 2 parameter. The UFINITE user subroutine is available for
plane strain, generalized plane strain, axisymmetric, axisymmetric with twist, and
3-D elements.
Format
User subroutine UFINITE is written with the following headers:
SUBROUTINE UFINITE(STRECH,EIGV,DETFE,DETFT,DEFGR,DT,
1 DTDL,STRESS,TANGENT,M,NN,GF,D)
IMPLICIT REAL *8 (A-H,O-Z)
DIMENSION STRECH(3),STRESS(3),TANGENT(3,3),EIGV(3,3),
2 DEFGR(3,3),DIMENSION N(2),COORD(NCRD,NNODE),
3 DISP(NDEG,NNODE),BEN(6),DT(1),DTDL(1),GF(1),D(1)
user coding
RETURN
END
where
Input:
STRECH is the squares of deviatoric trial elastic principal stretch ratios.
EIGV(I,J) is the I principal direction components for J eigenvalues of the trial
elastic left Cauchy-Green tensor (Finger tensor).
DEFGR is the total deformation gradient for continuum elements.
DETFE is the elastic part of the Jacobian.
DETFT is the total Jacobian.
DT is the array of the total state variables (temperature is first).
DTDL is the array of the incremental state variables.
Main Index
Main Index
292 Marc Volume D: User Subroutines and Special Routines
This user subroutine allows the user to implement arbitrary finite elasticity and
large strain plasticity models. The user does not need to be concerned with
preserving objectivity under large rotations in large strain problems, but must only
deal with the small strain problem. The user needs to update principal deviatoric
Kirchhoff stresses and provide a consistent deviatoric part of tangent in principal
space and calculate any change in stresses due to temperature dependent thermal
properties. Marc calculates the kinematic large strain contributions to the tangent
automatically. The user does not need to calculate the pressure or the volumetric
part of the tangent. Also, transformation from the principal to global space for both
stresses and the tangent is done automatically by Marc.
If there are any state variables in the problem, you can use the array DT() to update
and return these state variables. The increments of the state variables must be
calculated and returned as the array DTDL(). DT() and DTDL() are the size NSTATS
where NSTATS is the number of state variables and is set in the PARAMETERS option
in the input file. It must be remembered that DT(1) and DTDL(1) are reserved for
the temperature and the temperature increment, respectively and are supplied to you
by Marc. The user must not change the values of DT(1) and DTDL(1) even in
isothermal problems. All variables DT(2) to DT(NSTATS) and DTDL(2) to
DTDL(NSTATS) are accessible to the user.
Main Index
Main Index
CHAPTER 3 293
User-defined Anisotropy and Constitutive Relations User Subroutines
The framework used in this user subroutine is based on principal stretches of the
trial left Cauchy-Green tensor. For more details, please refer to the work of Simo
and coworkers.
The rate of convergence of the global residual in this approach is critically
dependent on the accuracy of the consistent tangent and the accuracy of the
stress update procedure.
Main Index
Main Index
294 Marc Volume D: User Subroutines and Special Routines
■ UELASTOMER
3 Description
User-defined Anisotropy and Constitutive
Relations User Subroutines
This user subroutine allows definition of the user’s own hyperelastic models. The
subroutine is activated by one of the following model definition options: FOAM,
MOONEY, ARRUDBOYCE, GENT, and OGDEN. The UELASTOMER user subroutine
must be used with the LARGE STRAIN,2 parameter.
Foam Models
For compressible foam materials, four types of strain energy functions can be
defined using the UELASTOMER user subroutine, depending on the iflag entered in
the 4th field of the 3rd data block of the FOAM model definition option:
1. iflag = 1, Invariant-based model
W = W ( I 1, I 2, I 3 )
W = W d e v ( I 1, I 2 ) + U ( J )
W = W d e v ( λ 1, λ 2, λ 3 ) + U ( J )
Main Index
Main Index
CHAPTER 3 295
User-defined Anisotropy and Constitutive Relations User Subroutines
W = W d e v ( I 1, I 2 )
W = W d e v ( λ 1, λ 2, λ 3 )
Note: If iflag=5 or iflag=6, only the deviatoric part of the energy function is defined via the user
subroutine UELASTOMER. The volumetric part is calculated internally by Marc. For this
purpose, the bulk modulus MUST be defined with either MOONEY, or ARRUDBOYCE,
or GENT, or OGDEN model definition option.
Main Index
Main Index
296 Marc Volume D: User Subroutines and Special Routines
In case of the direct definition of material properties through input deck, if no bulk
modulus is given, the default bulk modulus is calculated as 5000 times initial shear
modulus. However, if UELASTOMER is used, the initial shear modulus is not explicitly
available and the bulk modulus must be directly defined.
Compared to the foam models (iflag from 1 to 4), working only for compressible
materials, the rubber-like model (iflag equal to 5 or 6) can be used for both
compressible and incompressible materials. The foam and rubber models (when
using FEATURE,3402 parameter with iflag=7) allow the user to define a general
nonlinear volumetric energy function.
Format
User subroutine UELASTOMER is written with the following headers:
subroutine (iflag,m,nn,matus,be,x1,x2,x3,detft,
$ enerd,w1,w2,w3,w11,w22,w33,w12,w23,w31,
$ dudj,du2dj,dt,dtdl,iarray,array)
c
c user defined, generalized strain energy function
c implemented in the framework of updated Lagrange
c
implicit real*8 (a-h,o-z)
dimension m(2),be(6),dt(*),dtdl(*),iarray(*),array(*)
dimension matus(2)
c
return
end
where:
Main Index
Main Index
CHAPTER 3 297
User-defined Anisotropy and Constitutive Relations User Subroutines
Input:
iflag Activated by FOAM model definition option:
= 1 energy function in terms of invariants
= 2 energy function in terms of principal stretches
= 3 energy function in terms of invariants with deviatoric split
= 4 energy function in terms of principal stretches with deviatoric split
Activated by MOONEY, or ARRUDBOYCE, or GENT model
definition option:
= 5 energy function in terms of invariants deviatoric part only. The bulk
modulus MUST be defined with either MOONEY, ARRUDBOYCE, or
GENT model definition option (except when using FEATURE,3402
where the bulk modulus must be defined as =-1; in which case, the
routine is called twice with iflag=6 and 7.)
Activated by OGDEN model definition option
= 6 energy function in terms of principal stretches deviatoric part only.
The bulk modulus MUST be defined with OGDEN model
definition option
= 7 energy function in terms of volumetric ratio only. This is possible with
FEATURE,3402 and the bulk modulus must be defined as -1
m(1) user element number
m(2) internal element number
nn integration point number
mats(1) user material identification number
mats(2) internal material identification number
be left Cauchy Green deformation tensor
x1,x2,x3 if iflag = 1: invariants of be
if iflag = 2: principal stretches
if iflag = 3: deviatoric part of invariants of be
if iflag = 4: deviatoric principal stretches
if iflag = 5: deviatoric part of invariants of be
if iflag = 6: deviatoric principal stretches
detft determinate of deformation gradient
dt array of state variables (temperature at first) at t n
Main Index
Main Index
298 Marc Volume D: User Subroutines and Special Routines
Foam Rubber
iflag = 1 iflag = 2 iflag = 3 iflag = 4 iflag = 5 iflag = 6 iflag = 7
W1 ∂W ∂W ∂W ∂W ∂W ∂W N/A
--------- --------- --------- --------- --------- ---------
∂I 1 ∂λ 1 ∂I 1 ∂λ 1 ∂I 1 ∂λ 1
W2 ∂W ∂W ∂W ∂W ∂W ∂W N/A
--------- --------- --------- --------- --------- ---------
∂I 2 ∂λ 2 ∂I 2 ∂λ 2 ∂I 2 ∂λ 2
W3 ∂W ∂W ∂W ∂W N/A
--------- --------- N/A --------- N/A ---------
∂I 3 ∂λ 3 ∂λ 3 ∂λ 3
W11 ∂2W ∂2W ∂2 W ∂2W ∂2 W ∂2W N/A
-----------
2
-----------
2
-----------
2
-----------
2
-----------
2
-----------
2
∂I 1 ∂λ 1 ∂I 1 ∂λ 1 ∂I 1 ∂λ 1
W22 ∂2W ∂2W ∂2 W ∂2W ∂2 W ∂2W N/A
-----------
2
-----------
2
-----------
2
-----------
2
-----------
2
-----------
2
∂I 2 ∂λ 2 ∂I 2 ∂λ 2 ∂I 2 ∂λ 2
W33 ∂2W ∂2W ∂2W ∂2W N/A
----------- ----------- N/A ----------- N/A -----------
2 2 2 2
∂I 3 ∂λ 3 ∂λ 3 ∂λ 3
W12 ∂2W ∂2W ∂2 W ∂2W ∂2 W ∂2W N/A
---------------- ------------------- ---------------- ------------------- ---------------- -------------------
∂I 1 ∂I 2 ∂λ 1 ∂λ 2 ∂I 1 ∂I 2 ∂λ 1 ∂λ 2 ∂I 1 ∂I 2 ∂λ 1 ∂λ 2
W23 ∂2W ∂2W ∂2W ∂2W N/A
---------------- ------------------- N/A ------------------- N/A -------------------
∂I 2 ∂I 3 ∂λ 2 ∂λ 3 ∂λ 2 ∂λ 3 ∂λ 2 ∂λ 3
W31 ∂2W ∂2W ∂2W ∂2W N/A
---------------- ------------------- N/A ------------------- N/A -------------------
∂I 3 ∂I 1 ∂λ 3 ∂λ 1 ∂λ 3 ∂λ 1 ∂λ 3 ∂λ 1
dudj ∂U ∂U ∂W
N/A N/A ------- ------- N/A N/A ---------
∂J ∂J ∂J
du2dj ∂2 U ∂2U ∂2 W
N/A N/A ---------2- ---------2- N/A N/A -----------
∂J ∂J ∂J 2
Main Index
Main Index
CHAPTER 3 299
User-defined Anisotropy and Constitutive Relations User Subroutines
■ GENSTR
Description
This user subroutine allows the user to enter the generalized stress-strain law for
shells and beams which are conventionally integrated through their thickness. This
is often convenient in composite analysis where the experimental information is for
the total material, not individual plies. This option is activated using the SHELL
SECT parameter. As no layer integration is performed, the number of layers can be
set to one.
The user needs to provide the generalized stress-strain law D and the total
generalized stress at the end of the increment.
Format
User subroutine GENSTR is written with the following headers:
SUBROUTINE GENSTR(D,DC,FCRP,ETOTA,DE,HT,S,T,DT,ER,EC,
* SR,SC,NGENS,M,N,NN,MATUS,IHRESP,ICRESP)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION D(NGENS,NGENS),DC(NGENS,NGENS),FCRP(1),ETOTA(1),
*
DE(1),S(1),T(1),DT(1),ER(1),EC(1),SR(1),SC(1),N(2),MATUS(2)
user coding
RETURN
END
where:
Input:
ETOTA is the total strain array.
DE is the increment of strain array.
HT is the shell thickness.
S is the stress array.
T are the state variables (temperature).
DT are the increments of state variables.
ER is the real strain array during harmonic sub-increment.
Main Index
Main Index
300 Marc Volume D: User Subroutines and Special Routines
For thin shell elements (types 4, 8, 24, 49, 72, 138, and 139):
Components Description
1, 2, and 3 are membrane strains
4, 5, and 6 are curvatures (correspond to 1, 2, and 3)
7 is an inplane rotation term related to drilling degrees of freedom (only
elements 138 and 139 have component 7)
Main Index
Main Index
CHAPTER 3 301
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UBEAM
Description
The UBEAM user subroutine allows the user to define nonlinear elastic cross-section
properties as a function of generalized elastic strains and state variables for beam
element 52 or beam element 98:
This is used in conjunction with the hypoelastic option. The user must use the
HYPOELASTIC model definition option.
Note: This user subroutine should not be used if the material properties or the beam cross-
section data are design variables. Use the ISOTROPIC and GEOMETRY option instead.
Format
User subroutine UBEAM is written with the following headers.
SUBROUTINE UBEAM(D,FCRP,DF,DFI,ETOT,DE,DEI,S,SI,GS,GSI,
+TEMP,DTEMP,NGENS,N,NN,MATUS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSIOND(NGENS,NGENS),DF(1),S(1),GS(NGENS),DE(NGENS),
+TEMP(1),DTEMP(1),FCRP(1),ETOT(1),DFI(1),DEI(NGENS),SI(1),
GSI(1),MATUS(2)
user coding
RETURN
END
where:
Input:
ETOT are the total generalized strains.
DE are the increments of generalized strain.
DEI are the increments of imaginary generalized strain, if complex
harmonic analysis.
S is not used.
SI is not used.
Main Index
Main Index
302 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 303
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
304 Marc Volume D: User Subroutines and Special Routines
■ UCOHESIVE
Format
The UCOHESIVE user subroutine is written with the following headers:
SUBROUTINE UCOHESIVE(D,ETOT,E,S,SEND,NGENS,RELOP,DT,DTDL,
NCYCLE,MDUM,NN,KCUS,MATUS,COHPROP)
INCLUDE ’../COMMON/IMPLICIT’
DIMENSION D(NGENS,NGENS),ETOT(*),E(*),S(*),SEND(*),
$ RELOP(*),DT(*),DTDL(*),KCUS(*),MATUS(*),COHPROP(*)
user coding
RETURN
END
Main Index
Main Index
CHAPTER 3 305
User-defined Anisotropy and Constitutive Relations User Subroutines
where:
Required Input:
ETOT is the accumulated total relative displacements at beginning of increment
E is the current incremental relative displacements
S is the accumulated stress at beginning of increment
NGENS is the number of stress components
DT is the state variables
DTDL is the incremental state variables
NCYCLE is the current cycle number
MDUM(1) is the user element number
MDUM(2) is the internal element number
NN is the integration point number
KCUS(1) is the user layer number
KCUS(2) is the internal layer number
MATUS(1) is the user material identifier
MATUS(2) is the internal material identifier
COHPROP is the cohesive material properties defined via the COHESIVE model
definition option
Required Output:
D is the matrix defining the relation between the stresses and the
relative displacements
SEND is the total stress at end of increment
Optional Output:
RELOP(1) is the equivalent relative opening displacement
RELOP(2) is the damage parameter
Main Index
Main Index
306 Marc Volume D: User Subroutines and Special Routines
■ UPHI
Description
This user subroutine allows the input of PHI functions to be expressed analytically.
The values of PHI are then passed into a Marc user subroutine where they are used
in calculation of the Laplace transform for harmonic analysis.
Format
User subroutine UPHI is written with the following headers:
SUBROUTINE UPHI(ELCG,FREQ,WI1,WI2,C10,C01,C11,C20,C30,NDI,
*NSHEAR,FI0,FI1,FI2,FI11,FI12,FI21,FI22,IFLAG,DERIVS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION ELCG(1),DERIVS(1)
user coding
RETURN
END
where:
Input:
ELCG is the left Cauchy-Green strain vector.
FREQ is the excitation frequency in radians/ time unit.
WI1,WI2 are the first and second invariants of ELCG.
C10,C01,C11,C20,C30 are the five material parameters of the Mooney formulation.
NDI is the number of direct strain components.
NSHEAR is the number of shear strain components.
IFLAG = 1: The sine PHI functions should be defined.
IFLAG = 2: The cosine PHI functions should be defined.
DERIVS is the array which contains the variables W, W1, W2, W11,
W12, W21, and W22.
Required Output:
FI0,FI1,FI2,FI11,FI1 are the seven PHI functions which should be defined in this
2,FI21,FI22 user subroutine by the user.
Main Index
Main Index
CHAPTER 3 307
User-defined Anisotropy and Constitutive Relations User Subroutines
where:
W is the strain energy density.
W1 is ∂W ⁄ ∂I 1 .
W2 is ∂W ⁄ ∂I 2 .
W11 2 2
is ∂ W ⁄ ∂I .
1
W12 is ∂ 2 W ⁄ ∂I 1 ∂I 2 .
W21 2
is ∂ W ⁄ ∂I 2 ∂I 1 .
W22 2 2
is ∂ W ⁄ ∂I 2 .
Main Index
Main Index
308 Marc Volume D: User Subroutines and Special Routines
■ UCOMPL
Description
The UCOMPL user subroutine allows the user to input a real (elastic) and imaginary
(damping) stress-strain relation for complex harmonic analysis. If not used, only the
real portion is formed in the conventional manner. This user subroutine is called for
all elements, integration points, and layers in a harmonic subincrement. the user
specifies the C matrix and can alter the existing B matrix if necessary. The stress is
then calculated from σ = Bε + Cε· where ε, ε· are the harmonic strain and strain
rate, respectively.
Format
User subroutine UCOMPL is written with the following headers:
SUBROUTINE UCOMPL(C,B,ETOT,EELAS,EPLAS,S,T,XINTP,COORD,
2 DISPT,FREQ,N,NN,KCUS,NGENS,INC,INCSUB,NDEG,NCRD,NDI,
NSHEAR)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION C(NGENS,NGENS),B(NGENS,NGENS),ETOT(1),
2 EELAS(1),EPLAS(1),T(1),XINTP(NCRD),COORD(NCRD,1),
2 DISPT(NDEG,1),N(2),KCUS(2)
C USER SUBROUTINE TO INPUT A COMPLEX STRESS STRAIN LAW
C FOR HARMONIC ANALYSIS C IS IMAGINARY PART
C B IS REAL PART
user coding
RETURN
END
where:
Input:
ETOT are the total strains.
EELAS are the total elastic strains.
EPLAS are the plastic strains.
S are the stresses.
Main Index
Main Index
CHAPTER 3 309
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
310 Marc Volume D: User Subroutines and Special Routines
■ GAPU
Description
This user subroutine allows input or modification of the direction and closure
distance of gap element type 12 and 97 based on the current position of the end
nodes of the element. This makes it possible to model contact sliding along curved
surfaces which can occur in the analysis of metal forming problems. Although the
gap direction and closing distance can be changed, this user subroutine does not
allow for finite sliding of two meshes with respect to each other, since the load
transfer path is unchanged. In addition, it allows for specification of a nonlinear
relationship between the normal force and the maximum friction force instead of the
regular linear Coulomb relation.
Note: If this user subroutine is used to change the direction of the gap, friction should not
be included.
The user subroutine also allows the user to specify certain tolerances to control gap
closure and friction iterations. This last feature is not generally used.
Format
User subroutine GAPU calls for the following headers:
SUBROUTINE GAPU(DIR,DIST,X1,X4,TOL1,TOL2,TOL3,M,MSUB,INC,
+NCR,FN,FF)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DIR(3),X1(3),X4(3),M(2)
user coding
RETURN
END
where:
Input:
X1 is the current array of coordinates of the first node of the element.
X4 is the current array of coordinates of the fourth node of the element.
TOL1 is the tolerance on gap overclosure. Default is 0.
Main Index
Main Index
CHAPTER 3 311
User-defined Anisotropy and Constitutive Relations User Subroutines
TOL2 is the tolerance on gap force which allows the gap to remain closed even if
small negative force.
TOL3 is the tolerance on frictional force. Default is 0.
M(1) is your element number.
M(2) is the internal element number.
MSUB is the subelement number (only for Marc element type 97).
INC is the current increment number.
NCR is the dimension of the gap.
2 for 2-D problems.
3 for 3-D problems.
FN is the current gap force.
Required Output:
DIR is the array of direction cosines of the current gap direction. This can be
modified by the user.
DIST is the current closure distance (distance that the nodes must travel to obtain
closure), which is to be defined by the user.
FF is the frictional force limit, to be specified by the user.
In two dimensional problems, DIR, X1, and X4 have two components; otherwise,
DIR, X1, and X4 have three components.
Main Index
Main Index
312 Marc Volume D: User Subroutines and Special Routines
■ UGASKET
Description
In modeling gaskets, it is often easiest to specify a uniform gasket thickness and
define an initial gap distance. This gap distance is a reflection that the gap does not
fill the complete region. This user subroutine provides a mechanism to define a
nonuniform gap distance.
Format
The UGASKET User subroutine calls for the following headers:
SUBROUTINE UGASKET(MDUM,NN,XINTP,NCRD,NGASK,GASGAP)
REAL*8 GASGAP,XINTP
INTEGER MDUM, NCRD, NGASK, NN
DIMENSION XINTP(NCRDS),MDUM(2)
user coding
RETURN
END
where:
Input:
MDUM(1) is the element id.
MDUM(2) is the internal element storage number.
NN is the integration point number.
XINTP is the array with integration point coordinates.
NCRD is the number of coordinates.
NGASK is the gasket material number.
Required Output:
GASGAP is the initial gap distance (to be defined).
Main Index
Main Index
CHAPTER 3 313
User-defined Anisotropy and Constitutive Relations User Subroutines
■ USELEM
User-defined Element
Description
This user subroutine allows the user to calculate his own finite element stiffness or
mass matrix. This can also be used as interface with other numerical techniques. In
general, in the finite element calculation, several matrices are required; hence, for
a particular element, this user subroutine is called a multiple number of times. The
calls and the user’s requirements are defined as follows:
IFLAG=1 Return the equivalent nodal loads (F) given distributed surface or body
loads. If the ELASTIC, FOLLOW FOR parameters or the AUTO STEP,
AUTO TIME, AUTO INCREMENT options are used, these are total loads or
else incremental loads. In a heat transfer analysis, this is the total
flux vector.
IFLAG=2 Return the element tangent stiffness matrix (K). For an elastic analysis, this
is the usual stiffness. For a heat transfer matrix analysis, this is the
conductivity matrix. Also calculate the total internal forces (R). This is not
necessary in a linear elastic analysis if the LOAD COR parameter has been
turned off.
IFLAG=3 Return the mass matrix (M) for a dynamic analysis or specific heat matrix for
a heat transfer problem.
IFLAG=4 Calculate the incremental strains (DE), generalized stresses (GSIGS) and
the internal force (R). For a linear elastic solution, if only displacements are
required, the user does not need to return any values. In a heat transfer
analysis, the thermal gradient and the heat fluxes (both stored via SIGXX)
and the internal flux vector (R) need to be calculated.
IFLAG=5 Output element results if so desired.
To use this option, the USER parameter must be included to define the size of the
element stiffness matrix and other critical dimensions and the element type given
on the connectivity must be a negative number.
Main Index
Main Index
314 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine USELEM calls for the following headers:
SUBROUTINE USELEM(M,XK,XM,NNODE,NDEG,F,R,
* JTYPE,DISPT,DISP,NDI,NSHEAR,IPASS,NSTATS,NGENEL,
* INTEL,COORD,NCRD,IFLAG,IDSS,T,DT,ETOTA,GSIGS,DE,
* GEOM,JGEOM,SIGXX,NSTRMU)
DIMENSION
XK(IDSS,IDSS),XM(IDSS,IDSS),DISPT(NDEG,*),DISP(NDEG,*)
DIMENSION T(NSTATS,*),DT(NSTATS,*),COORD(NCRD,*)
DIMENSION ETOTA(NGENEL,*),GSIGS(NGENEL,*),DE(NGENEL,*)
DIMENSION F(NDEG,*),R(NDEG,*),SIGXX(NSTRMU,*),GEOM(*),
JGEOM(*)
user coding
RETURN
END
where:
Input:
M is the user element number.
NNODE is the number of nodes per element.
NDEG is the maximum number of degrees of freedom per node.
JTYPE is the user element type (negative).
DISPT is the total nodal displacements array of this element.
In heat transfer, DISPT is the temperature array at which material
properties were last calculated.
DISP is the incremental nodal displacements of this element.
In heat transfer, DISP is the total current nodal temperatures of
this element.
NDI is the number of direct components of stress/internal heat flux.
NSHEAR is the number of shear components of stress.
In heat transfer, NSHEAR is zero.
Main Index
Main Index
CHAPTER 3 315
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
316 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 317
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UNEWTN
Description
It is possible to solve Newtonian and non-Newtonian laminar incompressible
steady state fluid analyses using the R-P FLOW parameter in Marc. The UNEWTN
user subroutine is used to define the viscosity at a particular spatial location. An
Eulerian approach is then used to solve for the nodal velocities. This user
subroutine can also be used to define the nonlinear viscosity in Navier Stokes fluid
analysis when the FLUID parameter is used.
Format
User subroutine UNEWTN is written with the following headers:
SUBROUTINE UNEWTN (N,NN,V,E,NGENS,DT,DTDL)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION E(NGENS),N(2)
user coding
RETURN
END
where:
Input:
N(1) is the user’s element number.
N(2) is the internal element number.
NN is the integration point number.
E are the components of the strain rate.
NGENS is the number of components.
DT is the temperature at the beginning of the increment.
DTDL is the increment of temperature.
Required Output:
V is the viscosity to be defined here.
Note: If Herrmann elements are used, the last component of E represents a rate of change of
volumetric strain.
Main Index
Main Index
318 Marc Volume D: User Subroutines and Special Routines
■ URPFLO
Rigid-Plastic Flow
Description
This user subroutine allows the user to define the current yield stress as a function
of the equivalent strain rate, equivalent strain, temperature, and user-defined
state variables. This user subroutine is used in conjunction with the transient
R-P FLOW parameter.
Format
User subroutine URPFLO is written with the following headers:
SUBROUTINE URPFLO(MDUM,NN,KCUS,MATUS,INC,NDI,NGENS,NCRD,
+NSTAT,CPTIM,TIMINC,EBAR,ERATE,DT,DTDL,STATS,DSTATS,
+COORD,YD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MDUM(2),STATS(NSTAT),DSTATS(NSTAT),COORD(NCRD)
DIMENSION MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
MDUM(1) element number.
MDUM(2) internal element/elsto number.
NN integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) user material identification number.
MATUS(2) internal material identification number.
INC increment number.
NDI number of direct components.
NGENS total number of components.
NCRD number of coordinates.
Main Index
Main Index
CHAPTER 3 319
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
320 Marc Volume D: User Subroutines and Special Routines
■ UARRBO
Description
This user subroutine allows the user to redefine the constants used in the strain
energy function. This data is normally entered through the ARRUDBOYCE model
definition option.
The form of the strain energy function is:
2 3 4 5
W = n k θ --- ( I 1 – 3 ) + ---------- ⎛ I – 9⎞ + ------------------2- ⎛ I – 27⎞ + ------------------3- ⎛ I – 81⎞ + ------------------------4- ⎛ I – 243⎞ + …
1 1 11 19 519
2 20 N ⎝ 1 ⎠
1050 N 1
⎝ ⎠
7000 N 1
⎝ ⎠
673750 N 1
⎝ ⎠
Format
User subroutine UARRBO is written with the following headers:
SUBROUTINE UARRBO(A1,A2,T,N,NN,MATUS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION N(2),MATUS(2)
user coding
RETURN
END
where:
Input:
T is the temperature.
N(1) is your element number.
N(2) is the internal element number.
NN is the integration point number.
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
Required Output:
A1 = nkθ is the linear term (in the strain energy function) to be defined by the user.
A2 = N is the number of statistical links of length l in the chain between chemical
crosslinks (in the strain energy function) to be defined by the user.
Main Index
Main Index
CHAPTER 3 321
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UGENT
Description
This user subroutine allows the user to redefine the constants used in the strain
energy function. This data is normally entered through the GENT model
definition option.
The form of the strain energy function is:
E ⎛ I1 – 3 ⎞
W = – --- ( I m – 3 ) log ⎜ 1 – ---------------⎟
6 ⎝ I m – 3⎠
Format
User subroutine UGENT is written with the following headers:
SUBROUTINE UGENT(E,AI,T,N,NN,MATUS,BUKLM)
IMPLICIT REAL *8 (A-H,O-Z)
DIMENSION N(2),MATUS(2)
user coding
RETURN
END
where:
Input:
T is the temperature.
N(1) is the user’s element number.
N(2) is the internal element number.
NN is the integration point number.
MATUS(1) is the user’s material identifier.
MATUS(2) is the internal material identifier.
Main Index
Main Index
322 Marc Volume D: User Subroutines and Special Routines
Required Output:
E = E is the modulus (used in the strain energy function) to be defined by
the user.
AI = Im is the maximum value of first invariant (used in the strain energy function)
to be defined by the user.
BUKLM is the bulk modulus K (to be defined); if not defined, BULKM = 10000.*E/6
Main Index
Main Index
CHAPTER 3 323
User-defined Anisotropy and Constitutive Relations User Subroutines
■ UACOUS
Description
This user subroutine allows the user to redefine the material constants of an
acoustic medium (fluid) as a function of the frequency in an acoustic harmonic
analysis. This data is normally entered through the ACOUSTIC model
definition option.
Format
User subroutine UACOUS is written with the following headers:
SUBROUTINE UACOUS(MDUM,FREQC,XKF,DRAG,RHOHT)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION MDUM(2)
user coding
RETURN
END
where:
Input:
MDUM(1) is the user’s element number.
MDUM(2) is the Marc element storage number.
FREQC is the frequency in cycles per time.
Required Output:
XKF is the fluid bulk modulus to be defined by the user.
DRAG is the fluid volumetric drag to be defined by the user.
RHOHT is the fluid density to be defined by the user.
Main Index
Main Index
324 Marc Volume D: User Subroutines and Special Routines
■ USSUBS
Format
User subroutine USSUBS is written with the following headers:
SUBROUTINE USSUBS(NLEV,NSS,IC,NODSUB,NDEG,LMI,LM,
* TIME,TIMINC,INC,IPASS,
* XLOAD,XDISP,XRESI,XMAT)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION LMI(NODSUB),LM(NODSUB)
DIMENSION XLOAD(NDEG,NODSUB),XDISP(NDEG,NODSUB),
* XRESI(NDEG,NODSUB)
DIMENSION XMAT(NDEG*NODSUB,NDEG*NODSUB)
user coding
RETURN
END
where:
Input:
NLEV is the superelement level = 1.
NSS is the superelement number.
Main Index
Main Index
CHAPTER 3 325
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
326 Marc Volume D: User Subroutines and Special Routines
■ UPYROLSL
Description
This user subroutine allows you to define the rate of decomposition due to pyrolysis
as an alternative to the Arrhenius law. This routine is called at Streamline
Integration Point during pyrolysis if requested or at each conventional integration
point if D’Arcy law model is used.
Format
User subroutine UPYROLSL is written with the following headers:
SUBROUTINE UPYROLSL(IREG,ISTL,MATE,IEND,NCRD,XSIP,CPTIM,
* DELTIM,ND,ARRPRY,PHIJN,PHIJN1,XSIPN,TEMPE,DRODT)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION ARRPY(6,ND),PHIJN(ND),PHIJN1(ND)
user coding
RETURN
END
where:
Input:
IREG is the region ID (Streamline model).
is the element number (D’Arcy flow).
ISTL is the streamline ID (Streamline flow).
is the integration point number (D’Arcy flow).
MATE is the material ID.
IEND is the flag indicating if end SIP on streamline:
= -1 first point (interior)
= 0 point along streamline
= +1 last point (exterior)
= 0 for D’Arcy flow
NCRD is the number of coordinates.
XSID is the coordinate of streamline integration point, or conventional integration
point for D’Arcy flow.
CPTIM is the time at beginning of increment.
Main Index
Main Index
CHAPTER 3 327
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
328 Marc Volume D: User Subroutines and Special Routines
■ UCOKSL
Description
This user subroutine allows you to define the mass fraction of carbon in the
pyrolysis gas as an alternative to the Arrhenius law. This routine is called at each
Stream Integration Point, while coking, for coking model if requested or at each
conventional integration point if D’Arcy law model is used.
Format
User subroutine UCOKSL is written with the following headers:
SUBROUTINE UCOKSL(IREG,ISTL,MATE,IEND,NCRD,XXSIP,CPTIM,
* DELTIM,AKCGN,AKCGN1,XSICN,NC,ARRCOK,PRESSURE,TEMPE)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION ARRCOK(4,NC),XXSIP(NCRD)
C USER RETURNS AKCGN1
user coding
RETURN
END
where:
Input:
IREG is the region ID (Streamline model).
is the element number (D’Arcy flow).
ISTL is the streamline id (Streamline flow).
is the integration point number (D’Arcy flow).
MATE is the material ID.
IEND is the flag indicating if end SIP on streamline:
= -1 first point (interior)
= 0 point along streamline
= +1 last point (exterior)
= 0 for D’Arcy flow
NCRD number of coordinates.
Main Index
Main Index
CHAPTER 3 329
User-defined Anisotropy and Constitutive Relations User Subroutines
Example
C
C EXAMPLE : THE ARRHENIUS MODEL
C
INCLUDE '../COMMON/MRCPARM'
PRESSURE=1.0D0
DKCG=-1.D0*ARRCOK(1,1)*EXP(-
1.D0*ARRCOK(2,1)/(UNVGAS*TEMPE))
* *(PRESSURE*(AKCG-ARRCOK(4,1)))**ARRCOK(3,1)
AKCGN1=AKCGN+DKCG*DELTIM
Main Index
Main Index
330 Marc Volume D: User Subroutines and Special Routines
■ UWATERSL
Description
This user subroutine allows you to define the rate of evaporation of the water
component in the pyrolysis analysis. The water vapor created contributes to the
pyrolysis gas. This user routine is an alternative to the Arrhenius law or the Sullivan
and Stokes model. This routine is called at each Stream Integration Point or each
conventional integration point if D’Arcy law is used, and the water drying state is
less than 0.98.
Format
User subroutine UWATERSL is written with the following headers:
SUBROUTINE UCOKSL(IREG,ISTL,MATE,IEND,NCRD,XSIP,CPTIM,
* DELTIM,ARRWVP,PHIWN,RHOL0,TEMPE,DRODT)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION ARRWVP(4),XSIP(NCRD)
user coding
RETURN
END
where:
Input:
IREG is the region ID (Streamline model).
is the element number (D’Arcy flow).
ISTL is the streamline ID (Streamline flow).
is the integration point number (D’Arcy flow).
MATE is the material ID.
IEND is the flag indicating if end SIP on streamline:
= -1 first point (interior)
= 0 point along streamline
= +1 last point (exterior)
= 0 for D’Arcy flow
NCRD is the number of coordinates.
Main Index
Main Index
CHAPTER 3 331
User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
332 Marc Volume D: User Subroutines and Special Routines
■ UPYROLEFF
Description
This user subroutine allows the user to define the effective conductivity for a
material subjected to pyrolysis. This may be used as an alternative to the ATAS
(linear) model or the CMA-PTIMAD (weighted average) model. This routine is
called at all integration points for those materials identified on the THERMO-PORE
option. The number of effective conductivities that must be defined is one for
isotropic materials or between 1 and 6 depending on the level of anisotropy desired.
The values of the conductivity (virgin, charred, and coked) provided already include
the effects of tables, so the temperature dependence, and/or nonhomogeneous
behavior is already accounted for.
Format
User subroutine UPYROLSL is written with the following headers:
SUBROUTINE UPYROLEFF(M,N,NN,KC,IFLAG,INEED,MATE,IP,IC,IW,
*
XDP,XDC,PHIW,CONDEFF,ECONDVR,ECONDC,ECONDCK,ECONDL,RHO,RHON,
* DT,TEE,CPTIM,DELTIM)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION CONDEFF(*),ECONDVR(*),ECONDC(*),ECONDCK(*)
user coding
RETURN
END
where:
Input:
M is the user element number.
N is the elsto number.
NN is the integration point number.
KC is the layer number (always 1).
IFLAG 1 return conductivity - called by konduc.f.
Main Index
Main Index
CHAPTER 3 333
User-defined Anisotropy and Constitutive Relations User Subroutines
For ρ :
1 virgin material
2 charred material
Main Index
Main Index
334 Marc Volume D: User Subroutines and Special Routines
3 not used
4 not used
5 not used
6 liquid data
7 coke data
For isotropic material INEED=1, and only the 1st component CONDEFF(1) needs to
be returned.
Main Index
Main Index
CHAPTER 3 335
User-defined Anisotropy and Constitutive Relations User Subroutines
■ USPCHTAB
Description
This USPCHTAB user subroutine would allow the user to specify the specific heat
for the simplified pyrolysis model. This routine is called at every integration point
when the THERMO-PORE option indicates that the simplified model is to be used.
Format
The USPCHTAB user subroutine is written with the following headers:
SUBROUTINE USPCHTAB(SPHEAT,M,NN,KC,INC,NCYCLE,MATS,NSTATS,
* TEMP0,DTEMP,TIME,DTIME,RANGE,IFIRST,TPYRBEG,TCOMBEND)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
M element number
NN integration point number
KC layer number
ING increment
NCYCLE current cycle number
MATS material id
NSTATS number of state variables
TEMP0 temperature at beginning of increment
DTEMP estimated temperature increment
TIME time at beginning of increment
DTIME time increment
RANGE lowest and highest previous temperature
IFIRST flag to indicate which curve - either 1 or 2
Main Index
Main Index
336 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 3 337
User-defined Anisotropy and Constitutive Relations User Subroutines
References
1. Simo, J. C. and Taylor, R. L., “Quasi incompressible finite elasticity in
principal stretches. Continuum basis and numerical algorithms”, Comp.
Meth. App. Mech. Engrg., 85, pp. 273-310, 1991.
2. Simo, J. C., “Algorithms for static and dynamic multiplicative plasticity
that preserve the classical return mapping schemes of the infinitesimal
theory”, Comp. Meth. App. Mech. Engrg., 99, pp. 61-112, 1992.
Main Index
Main Index
338 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 4 Viscoplasticity and Generalized Plasticity User Subroutines List
4 Viscoplasticity and
Generalized Plasticity User
Subroutines List
ASSOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
NASSOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
SINCER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
YIEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
ZERO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Main Index
Main Index
340 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 4 Viscoplasticity and Generalized Plasticity User Subroutines
4 Viscoplasticity and
Generalized Plasticity
User Subroutines
Main Index
Main Index
342 Marc Volume D: User Subroutines and Special Routines
The user subroutines in this chapter are used to describe viscoplastic materials or a
user-defined general plasticity model. There are two numeric procedures for
viscoplasticity: implicit and explicit. This is activated on the CREEP parameter. The
implicit method is preferred. The generalized plasticity allows the user to develop
a yield surface, equivalent stress, and flow rate that is different from one provided
by Marc. Table 4-1 summarizes these routines and indicates what parameters or
model definition options are required to invoke the user subroutine.
Table 4-1 Viscoplasticity and Generalized Plasticity User Subroutine Requirements
Main Index
Main Index
CHAPTER 4 343
Viscoplasticity and Generalized Plasticity User Subroutines
■ UVSCPL
Description
This user subroutine is used for computing the inelastic strain increment for an
elastic-viscoplastic material. This routine allows very general material laws to be
entered. The user must define the inelastic strain and the stress increment.
This user subroutine is activated when the implicit creep procedure is used, and
VISCO PLAS material is selected on the ISOTROPIC or ORTHOTROPIC option.
Format
User subroutine UVSCPL is written with the following headers:
SUBROUTINE UVSCPL(YOUNG,POISS,SHEAR,B,USTRRT,ETOT,E,
1 THMSTI,EELAS,S,SINC,GF,EPL,AVGINE,EQCRP,EQCPNC,YD,YD1,
2 VSCPAR,DT,DTDL,CPTIM,TIMINC,XINTP,NGENS,M,NN,KCUS,MATUS,
3 NDI,NSHEAR,NCRD,IANISO,NSTATS,INC,NCYCLE,LOVL,NVSPLM)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION POISS(3,2),YOUNG(3,2),B(NGENS,NGENS),
1 USTRRT(NGENS),ETOT(NGENS),E(NGENS),THMSTI(NGENS),
2 EELAS(NGENS),S(NGENS),SINC(NGENS),GF(NGENS),EPL(NGENS),
3 AVGINE(NGENS),DT(NSTATS),DTDL(NSTATS),XINTP(NCRD),
SHEAR(3,2),VSCPAR(NVSPLM),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
YOUNG is the Young’s modulus.
POISS is the Poisson’s modulus.
SHEAR is the shear modulus.
B is the tangent elastic matrix.
ETOT is the accumulated total strain at beginning of increment.
E is the current strain increment.
Main Index
Main Index
344 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 4 345
Viscoplasticity and Generalized Plasticity User Subroutines
Note: To ensure convergence, it should be noted that the returned values of these quantities
must be mutually compatible; that is, they simultaneously must satisfy within tolerance:
1. SINC = B*(E - AVGINE - THMSTI) + GF
2. the creep law employed.
The tolerance should be at least one order of magnitude smaller than the global
Newton-Raphson tolerance. The values of USTRRT, AVGINE, and SINC are
expected to be returned from the routine for both LOVL=4 and LOVL=6.
Main Index
Main Index
346 Marc Volume D: User Subroutines and Special Routines
■ UCRPLW (Viscoplastic)
Description
The UCRPLW user subroutine can be used for defining complex relationships for the
factors in the power law expression for the creep strain rate. This user subroutine is
automatically called when the implicit creep option is used in Marc. Note that the
latter is implemented for isotropic materials exhibiting power law creep. For more
complex implicit creep behavior, use the UVSCPL user subroutine.
Format
User subroutine UCRPLW is written with the following headers:
SUBROUTINE UCRPLW(CPA,CFT,CFE,CFTI,CFSTRE,CPTIM,TIMINC,
* EQCP,DT,DTDL,MDUM,NN,KCUS,MATUS)
C CREEP STRAIN RATE = CPA*CFT*CFE*CFTI*(STRESS**CFSTRE)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION MDUM(*),MATUS(2), KCUS(2)
user coding
RETURN
END
where:
Input:
CPTIM time at the beginning of the increment
TIMINC time Increment
EQCP creep strain at the beginning of the increment
DT temperature at the beginning of the increment
DTDL incremental temperature
MDUM(1) user element number
MDUM(2) internal element number
NN integration point number
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
Main Index
Main Index
CHAPTER 4 347
Viscoplasticity and Generalized Plasticity User Subroutines
Main Index
Main Index
348 Marc Volume D: User Subroutines and Special Routines
■ CRPLAW (Viscoplastic)
Description
The CRPLAW user subroutine can also be used for calculating the viscoplastic
behavior. All the creep quantities are treated as viscoplastic strain quantities when
the appropriate flag is set on the CREEP parameter.
The basic information on the use of this subroutine can be found in Chapter 3 of this
manual. Additionally, the user can use common block VISCPL.
The variables in common block VISCPL are:
Example
The following is a simple viscoplastic strain rate law that depends on the differences
between the current stress state and the static yield stress, raised to the nth power.
(Note that T(1), the current equivalent stress also includes Mohr-Coulomb terms
when the option is flagged.)
·
ε = c ( σ – σy ) n
where:
σ is the current total equivalent stress.
Main Index
Main Index
CHAPTER 4 349
Viscoplasticity and Generalized Plasticity User Subroutines
c is the constant that depends on the index n. Here the strain rate equation is made.
dimensionless in stress by setting c = 0.01 ⁄ σ n y o where σ y o is the equivalent
stress at first yield.
Main Index
Main Index
350 Marc Volume D: User Subroutines and Special Routines
■ NASSOC
Description
The NASSOC user subroutine allows the user to calculate a strain increment with a
flow rule differing from the normality rule of plasticity, which is the default used by
Marc. This must be activated by the CREEP parameter.
Format
User subroutine NASSOC is written with the following headers:
SUBROUTINE NASSOC(EQCPNC,STOT,SINC,E,
1 AMOHR,NGENS,NDI,T,TZERO)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION STOT(NGENS),SINC(NGENS),E(NGENS),T(2)
user coding
RETURN
END
where:
Input:
EQCPNC is the increment of the equivalent viscoplastic strain.
STOT is the current stress array.
E(I) is the Ith viscoplastic strain increment. It is later set equal to
EQCPNC*SINC(I) in Marc; thus, it is not set in this subroutine.
AMOHR is the Mohr-Coulomb parameter entered in the ISOTROPIC option
(third field).
NGENS is the number of stresses or strains.
NDI is the number of direct stresses.
T(1) is the current equivalent stress.
T(2) is the current mean hydrostatic stress.
TZERO is the equivalent stress including Mohr-Coulomb terms, temperature and
work hardening effects.
Main Index
Main Index
CHAPTER 4 351
Viscoplasticity and Generalized Plasticity User Subroutines
Required Output:
∂σ
SINC is the dimensionless flow directions ------- . The current values in this subroutine
∂σ
are associated with the yield criterion used. The user are free to vary the flow
rule in NASSOC by changing SINC.
It is often useful to have the information regarding the yield surface. This can be
obtained from common block VISCPL
yd, yd1, yd2, yd21, ydzer
where:
YD is the equivalent stress at first yield.
YD1 is the equivalent yield stress including current work hardening and
temperature effects.
YD2 is the equivalent stress for ORNL tenth cycle yield.
YD21 is the equivalent stress including current work hardening and temperature
effects for ORNL tenth cycle yield.
YDZER is the equivalent yield stress including Mohr-Coulomb terms
(defaults to YD1).
Example
The following example calculates a nonassociated flow rule for a Mohr-Coulomb
problem. The default flow rule is the one associated with the von Mises yield
criterion.
SUBROUTINE NASSOC(EQCPNC,STOT,SINC,E,
+ AMOHR,NGENS,NDI,T,TZERO)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION STOT(1),SINC(1),E(1),T(1)
NSHEAR=NGENS-NDI
DO 1 I=1,NDI
1 SINC(I)=0.5*3.0*(STOT(1)-T(2))
TR=1./TZERO
DO 2 I=1,NDI
2 SINC(I)=SINC(I)*TR
RETURN
END
Main Index
Main Index
352 Marc Volume D: User Subroutines and Special Routines
■ ZERO
Description
The ZERO user subroutine is used to calculate the equivalent yield stress based on
the current total stresses. The ZERO user subroutine in Marc applies the von Mises
yield criterion as a default. The user can substitute another yield criterion by writing
a new ZERO user subroutine. Mohr-Coulomb models specified in the ISOTROPIC
option should not be used when ZERO user subroutine is used because of the danger
of taking into account the effects of hydrostatic pressure twice.
Format
User subroutine ZERO is written with the following headers:
REAL*8 FUNCTION ZERO(NDI,NSHEAR,T,IORT,IANISO,YRDIR,YRSHR,
* AMM,AO)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION T(1),YRDIR(3),YRSHR(3),AMM(3)
user coding
RETURN
END
where:
Input:
NDI is the number of direct components of stress.
NSHEAR is the number of shear components of stress.
T(I) is the Ith component of stress.
IORT is the flag indicating if curvilinear coordinates are used.
This is 1 for element types 4, 8, and 24.
IANISO is the flag indicating if anisotropy is used.
YRDIR are the components for Hill’s anisotropic plasticity.
YRSHR are the shear components for Hill’s anisotropic plasticity.
AMM is the metric if curvilinear coordinates are used.
AO is the metric scale factor if curvilinear coordinates are used.
Required Output:
ZERO is the equivalent yield stress.
Main Index
Main Index
CHAPTER 4 353
Viscoplasticity and Generalized Plasticity User Subroutines
■ YIEL
Description
The YIEL user subroutine is used to define the yield stress based on the current work
hardening and other state variables.
Format
User subroutine YIEL is written with the following headers:
REAL*8 FUNCTION YIEL(M,NN,KCUS,YIELD,IFIRST,DT,EPLAS,ERATE,
MATS,JPROPS)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
M is the element numbers.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
YIELD is the yield stress entered as data in the ISOTROPIC option.
IFIRST =1 Calculate yield stress.
=2 Calculate 10th cycle yield stress (ORNL only).
=3 Calculate 100th cycle yield stress (ORNL only).
DT is the current temperature
EPLAS is the total equivalent plastic strain. Note that this is implied by the yield
criterion used in the ZERO user subroutine (or the Mohr-Coulomb yield
criterion, if that is used).
ERATE is the equivalent plastic strain rate. Not available for viscoplasticity.
MATS is the material id.
JPROPS is the table id associated with the yield.
Required Output:
YIEL is the current magnitude of the yield stress.
Main Index
Main Index
354 Marc Volume D: User Subroutines and Special Routines
■ ASSOC
Description
When used in conjunction with the generalized plasticity option (defined in the
ISOTROPIC option), the ASSOC user subroutine can be used to define the flow
direction for plasticity. The default is the associated flow law with the von Mises
(J2) yield surface.
Format
User subroutine ASSOC is written with the following headers:
SUBROUTINE ASSOC(STOT,SINC,SC,T,NGENS,NDI,NSHEAR,N,NN,KCUS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION STOT(NGENS),SINC(NGENS),KCUS(2)
user coding
RETURN
END
where:
Input:
STOT is the current stress array.
SC is the trace of stress tensor (three times hydrostatic pressure).
T is the equivalent stress.
NGENS is the number of stress components.
NDI is the number of shear stress components.
N is the element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
Required Output:
∂σ
is the flow direction ------- ⋅ σ to be defined by the user, where σ is the
SINC ∂σ
equivalent stress T.
Main Index
Main Index
CHAPTER 4 355
Viscoplasticity and Generalized Plasticity User Subroutines
■ SINCER
Description
The SINCER user subroutine can be used to define how much an “elastic” stress
increment exceeds the yield stress. This allows Marc to accurately take large
increments such that the material goes from elastic to elastic-plastic. The user
returns the value of FPLAS, which is the fraction of the stress increment beyond the
yield surface. This routine should only be used if a yield surface other than the von
Mises (J2) is used in conjunction with the generalized plasticity option (defined in
the ISOTROPIC option).
Format
User subroutine SINCER is written with the following headers:
SUBROUTINE SINCER(FPLAS,SINC,STOT,NGENS)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION SINC(NGENS), STOT(NGENS)
user coding
RETURN
END
where:
Input:
SINC is the estimated elastic increment of stress.
STOT is the stress at the beginning of the increment.
NGENS is the number of stress components.
Required Output:
FPLAS is the fraction of stress increment beyond the yield stress to be defined
the user.
Main Index
Main Index
356 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 5 Viscoelasticity User Subroutines List
5 Viscoelasticity User
Subroutines List
CRPVIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
HOOKVI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
TRSFAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Main Index
Main Index
358 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 5 Viscoelasticity User Subroutines
5 Viscoelasticity User
Subroutines
Main Index
Main Index
360 Marc Volume D: User Subroutines and Special Routines
This chapter describes user subroutines used for viscoelastic analysis. There are two
procedures available. The explicit procedure uses the CRPVIS user subroutine to
describe a generalized Kelvin model. The implicit procedure uses a hereditary
integral approach and is the preferred choice. Table 5-1 summarizes these routines
and indicates what parameters or model definition options are required to invoke the
user subroutine.
Table 5-1 Viscoplasticity User Subroutines Requirements
Main Index
Main Index
CHAPTER 5 361
Viscoelasticity User Subroutines
■ CRPVIS
Description
In addition to the nonlinear Maxwell type model allowed in the CREEP option, a
general Kelvin model can be included by requesting it on the CREEP parameter. In
this case, Marc assumes an additional creep strain ε iKj , governed by
d
----- ε iKj = A i j k l S k l – B i j k l ε kKl
dt
where:
[A] and [B] are defined by the user in the user subroutine described below,
si j σk k
are the deviatoric stress components s i j = σ i j – δ i j ---------
3
and the total strain is: ε i j = ε iej + ε ipj + ε icj + ε iKj + ε itjh
where:
ε itjh are the thermal strain components.
ε icj are the creep strains defined via CRPLAW and VSWELL user subroutines and
using the CREEP option.
ε iKj are the Kelvin model strain components as defined above.
Main Index
Main Index
362 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine CRPVIS is written with the following headers:
SUBROUTINE CRPVIS(CRPR,TSIG,SINC,AE,BE,NGENS,
1 DT,DTDL,N,NN,KCUS,MATUS,NDI,NSHEAR,TIME,TIMINC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION CRPR(1),TSIG(1),SINC(1),AE(NGENS,NGENS),
1 BE(NGENS,NGENS),DT(1),DTDL(1),N(2),MATUS(2),KCUS(2)
user coding
RETURN
END
where:
Input:
CRPR are the Kelvin creep strain components.
1⁄2
is the second invariant of the deviatoric stress = ⎛ --- s i j s i j⎞
3
.
TSIG(1) ⎝2 ⎠
1
TSIG(2) is the hydrostatic stress = --- σ k k .
3
Main Index
Main Index
CHAPTER 5 363
Viscoelasticity User Subroutines
Required Output:
Only AE and BE are to be defined by the user – the other variables are provided to
assist in calculations, for example when a nonlinear Kelvin model is used.
This user subroutine is called at each integration point of each element when
necessary, when the VISCO ELAS parameter is present. Note that the use of the
VISCO ELAS parameter also requires the use of the CREEP option in the model
definition data as well. The CREEP option is required to set the tolerance control for
the maximum strain in any increment. In viscoelastic two-dimensional analysis, the
stress does not change appreciably so that all time steps are controlled by the
maximum increment in strain. The recommended and default value of this strain
increment is 0.005 of the total maximum strain. Note that this value is ten times
smaller than the default value for normal creep problems. Because of the use of the
CREEP option, Maxwell models can be included in series with the Kelvin model.
The ordering of stress and strain components is given in Marc Volume B: Element
Library for each element type.
When used with doubly curved shell elements (shell elements 4, 8, and 24), the
above relation is written in a mixed formulation:
Main Index
Main Index
364 Marc Volume D: User Subroutines and Special Routines
■ TRSFAC
Description
This user subroutine allows the user to define the shift function for the
relaxation function.
A description of T.R.S. material behavior is given in Marc Volume A: User
Information. The user is reminded that this option is only available in conjunction
with the hereditary integral form of viscoelastic constitutive representation. The use
of this user subroutine to define a shift function for a particular viscoelastic material
group is indicated by inserting a negative value in the first field of block 2 in the
SHIFT FUNCTION model definition option.
where the shift factor, B, is a function of the spatially and time dependent
temperature, T(x, t). A five-point Simpson’s rule is used to numerically integrate
this expression.
In this subroutine, the user is expected to define the shift function, φ, which is the
logarithm of the shift factor: that is,
[ φ ( x, t ) ] = – Log 10 { B [ T ( x, t ) ] }
The user subroutine is called five times at each point. These points can be the
centroids of the elements or each integrating point if the ALL POINTS parameter has
been invoked.
Main Index
Main Index
CHAPTER 5 365
Viscoelasticity User Subroutines
Format
User subroutine TRSFAC is written with the following headers:
SUBROUTINE
TRSFAC(SHFTLG,MATV,NSHFT,N,NN,KCUS,DT,DTDL,TGLASS,
*CPTIM,HXITOT,TIMINC,TINT)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DT(1),DTDL(1),N(2),KCUS(2)
user coding
RETURN
END
where:
The following parameters are passed into this user subroutine and must not
be redefined:
Input:
MATV is the viscoelastic material group identifier or number associated with the
point, x, currently being considered.
NSHFT is the negative number associated with the particular user-defined shift
function for the viscoelastic material group, MATV. This number was
specified in the first field of the second data line in the SHIFT FUNCTION
model definition option.
N(1) is the user’s element number.
N(2) is the internal element number.
NN is the current integrating point number (or centroidal point if the ALL
POINTS parameter is not used).
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
DT is the total temperature at this point corresponding to the beginning of the
current increment.
DTDL is the current incremental change in temperature for this point.
TGLASS is the reference or glassy transition temperature used in defining the
shift function.
CPTIM is the total creep or viscoelastic time up to the beginning of this increment.
HXITOT is the total pseudo- or reduced-time at this point, corresponding to the
beginning of the increment.
TIMINC is the increment of real time.
Main Index
Main Index
366 Marc Volume D: User Subroutines and Special Routines
TINT is a linearly interpolated value of the total temperature at one of the five
integrating stations between the beginning and end of the increment.
This is the variable which should be used in computing the value of the
shift function.
Required Output:
SHFTLG is the logarithm of the shift factor, φ, which must be defined by the user.
Main Index
Main Index
CHAPTER 5 367
Viscoelasticity User Subroutines
■ HOOKVI
Description
The user can specify the time dependent properties of an orthotropic material
through the VISCELORTH model definition option. The user can then modify this
data by use of the HOOKVI user subroutine which is automatically called for every
material defined in that option.
Format
User subroutine HOOKVI is called with the following header codes:
SUBROUTINE HOOKVI (M,NN,KCUS,ITERM,B,DT,DTDL,E,PR,G)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION B(6,6),DT(1),DTDL(1),E(3),PR(3),G(3),M(2)
DIMENSION KCUS(2)
user coding
RETURN
END
where:
Input:
M(1) is the user’s element number.
M(2) is the internal element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
ITERM is the viscoelastic series number.
DT is the current temperature.
DTDL is the current increment in temperature.
E is vector of time dependent Young’s moduli input in the
VISCELORTH option.
PR is the vector of time dependent Poisson’s ratios input in the
VISCELORTH option.
G is the vector of time dependent shear moduli given in the
VISCELORTH option.
Required Output:
B is the user-defined 6 x 6 matrix of viscoelastic time dependent constants
for this element and series number.
Main Index
Main Index
368 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 6 Geometry Modifications User Subroutines List
MAP2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
REBAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Main Index
Main Index
370 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 6 Geometry Modifications User Subroutines
6 Geometry Modifications
User Subroutines
Main Index
Main Index
372 Marc Volume D: User Subroutines and Special Routines
The user subroutines described in this section are provided to allow the user to
define the initial geometry of the finite element mesh, or to change the mesh due to
rezoning or rigid plastic analyses. Often these user subroutines are used to
customize already existing meshes. The UTRANS user subroutine is a powerful way
to provide transformations to the degrees of freedom of a node. Table 6-1
summarizes these routines and indicates what parameters or model definition
options are required to invoke the user subroutine.
Table 6-1 Geometry Modifications User Subroutines Requirements
Required Parameters or
User Subroutine Purpose
Model Definition Options
MAP2D MESH2D Define the coordinates of key boundary nodes for
MAPPER mesh generation.
REBAR ELEMENTS Define the orientation and effective thickness of
(rebar element types) the elements.
UACTIVE Activate or deactivate elements.
UACTUAT GEOMETRY Define the length of the actuator element.
UADAP ADAPTIVE (parameter) Define a user-defined error criterion for
ADAPTIVE (model definition adaptive meshing.
option)
UADAP2 ADAPTIVE (parameter) Define unrefinement for adaptive meshing.
ADAPTIVE (model definition
option)
UADAPBOX ADAPTIVE (parameter) User-defined region for local adaptive meshing.
ADAPTIVE (model definition
option)
UCOORD ADAPTIVE (parameter) Describe of the location of newly created nodes.
ADAPTIVE (model definition
option)
UCRACK_PARIS VCCT Defines the increment of crack growth.
UFCONN UFCONN Modifies the connectivity of an element.
UCRACKGROW VCCT Allows definition of the crack growth direction and
crack growth increment.
UFRORD REZONING Modify the coordinates of a node during rezoning.
REZONE
UFRORD
UFXORD UFXORD Modify the initial nodal coordinates.
UMAKNET ADAPT GLOBAL User-defined standalone mesher
Main Index
Main Index
CHAPTER 6 373
Geometry Modifications User Subroutines
Required Parameters or
User Subroutine Purpose
Model Definition Options
UPNOD R-P FLOW Update the nodal coordinates in a rigid plastic
analysis using the Eulerian procedure.
URCONN UFCONN Modify the connectivity of an element
during rezoning.
USHELL GEOMETRY Define the integration point thickness for
shell elements.
USIZEOUTL ADAPT GLOBAL Define refinement boxes with different element
edge length on the 2-D outlines for remeshing.
USPLIT ADAPT GLOBAL Define where to split a continuous deformable body
into two separate parts.
USPLIT_MESH ADAPT GLOBAL Define edges, nodes, or faces to split up a mesh.
UTHICK NODAL THICKNESS Define the initial thickness at the nodes for
shell elements.
UTRANS UTRANFORM Define a transformation to be applied to the
degrees of freedom at a node.
Main Index
Main Index
374 Marc Volume D: User Subroutines and Special Routines
■ UFXORD
Description
The UFXORD user subroutine can be used to modify (or expand) coordinates input
through use of the COORDINATES option, or as an internal coordinate generator. The
user must input the UFXORD model definition option, followed by a block giving
the nodes for which UFXORD is used. Marc calls UFXORD for each node in the list,
so that the coordinates of that node can be modified or generated. The UFXORD
option can be repeated as many times as necessary.
Format
User subroutine UFXORD is written with the following headers:
SUBROUTINE UFXORD (XORD, NCRD, N)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD (NCRD)
user coding
RETURN
END
where:
Input:
NCRD is the number of coordinates per node.
N is the node number.
Required Output:
XORD is the array of coordinates in the Nth node and is passed in containing
coordinates previously generated at the Nth node by COORDINATES,
FXORD or UFXORD options.
This user subroutine is most commonly used with shell or beam elements (for
example, elements 4, 8, 13, 15) where the full coordinate set is usually generated on
the basis of reduced set of coordinates. See, for example, the description of the
FXORD option in Marc Volume A: User Information. The user can also use this
routine to generate special coordinate systems (for example, cylindrical or
spherical) or to convert from special coordinate systems to a rectangular system.
Main Index
Main Index
CHAPTER 6 375
Geometry Modifications User Subroutines
■ UFCONN
Description
The UFCONN user subroutine can be used to modify (or expand) input given
through use of the CONNECTIVITY option, or as an internal connectivity generator.
The user must input the UFCONN model definition option, followed by a block
giving the elements for which UFCONN is used. Marc calls UFCONN for each
element in the series, so that the connectivity of that element can be modified or
generated. The UFCONN option can be repeated as many times as necessary.
Format
User subroutine UFCONN is written with the following headers:
SUBROUTINE UFCONN(J,ITYPE,LM,NNODMX)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION LM(1)
user coding
RETURN
END
where:
Input:
J is the element number.
ITYPE is the element type.
LM is the array of nodes making up the element.
NNODMX is the maximum number of nodes in an element.
Required Output:
ITYPE is the element type.
LM is the array of nodes making up the element.
Main Index
Main Index
376 Marc Volume D: User Subroutines and Special Routines
this routine. Note there is no checking to determine if ITYPE has been defined on
the SIZING or ELEMENTS parameter, or if node numbers are in the range
1 ≤ N ≤ NUMNP .
Main Index
Main Index
CHAPTER 6 377
Geometry Modifications User Subroutines
■ MAP2D
Description
The MAP2D user subroutine can be used to modify coordinates input for the
boundary nodes in MESH2D by the BOUNDARY option. The user must input the
MAPPER option as part of the two-dimensional mesh generation. Marc calls MAP2D
once, so that the coordinates of all the boundary nodes can be modified
or generated.
Format
User subroutine MAP2D is written with the following headers:
SUBROUTINE MAP2D(NNO,X,Y)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION X(NNO),Y(NNO)
user coding
RETURN
END
where:
Input:
NNO is the number of boundary nodes.
Required Output:
X and Y are the user-defined coordinates of the boundary nodes.
Main Index
Main Index
378 Marc Volume D: User Subroutines and Special Routines
■ USIZEOUTL
C-44 Description
This user subroutine allows users to define refinement boxes with different
element edge length on the 2-D outlines for remeshing. The position of the
refinement box can be attached to the current reference center of any rigid body.
Therefore, if the body is moving, the box can move along with it. The position of
the refinement box can be attached to a nodal position as long as the node number
does not change during the analysis.
Format
User subroutine USIZEOUTL is written with the following header lines:
SUBROUTINE USIZEOUTL(NBODY,IDIERE,XCENT,YCENT,INC,CPTIM,
& ELLEN,ESIZE,XYZ,NUMOUT)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION ESIZE(*),XYZ(2,*),XCENT(NBODY),YCENT(NBODY)
DIMENSION POS(5)
user coding
RETURN
END
where:
Input:
NBODY is the number of contact bodies (= 0, if there is no contact).
IDIERE is the current body number for remeshing.
XCENT is the x reference center of rigid contact bodies.
YCENT is the y reference center of rigid contact bodies.
INC is the current increment number.
CPTIM is the current analysis time.
ELLEN is the input element length for remeshing.
Main Index
Main Index
CHAPTER 6 379
Geometry Modifications User Subroutines
Main Index
Main Index
380 Marc Volume D: User Subroutines and Special Routines
■ UMAKNET
Description
This subroutine is used as user-defined standalone mesher. It cannot be used to
replace the internal 2-D overlay mesher. The routine can be used to generate 2-D
(quad) and 3-D (hexahedral). For 2-D, the correct t18 file needs to be output. For
3-D, the correct feb file needs to be output.
Examples
Userguide_auto/user_extru2d.mfd and user_extru3d.mfd. The user
subroutines are user_extru2d.f and user_extru3d.f, respectively.
Format
SUBROUTINE
UMAKNET(IDO,IFLAG,NCRDMX,NDEGMX,NUMNP,NUMEL,NDEG,
& NCRD,IEL_TYPE,NNODMX,NUMELMX,NELTEAB,
& XORD,DISP,IELCON,IELTAB,FILENAME)
INCLUDE '../COMMON/IMPLICIT'
DIMENSION xord(ncrdmx,*),disp(ndegmx,*),ieltab(neltab,*)
DIMENSION ielcon(nnodmx,*)
IFLAG=1
user coding
RETURN
END
where:
Input:
ido=2 is the 2-D remeshing.
ido=3 is the 3-D remeshing.
iel_type is the element type.
nnodmx is the maximum number of nodes per element.
ncrdmx is the maximum number of coordinate components.
ndegmx is the maximum number of degrees of freedom per node.
Main Index
Main Index
CHAPTER 6 381
Geometry Modifications User Subroutines
Format
Format Data
Fixed Free Type Entry
Main Index
Main Index
382 Marc Volume D: User Subroutines and Special Routines
Format Data
Fixed Free Type Entry
Main Index
Main Index
CHAPTER 6 383
Geometry Modifications User Subroutines
Format
Format Data
Fixed Free Type Entry
Main Index
Main Index
384 Marc Volume D: User Subroutines and Special Routines
Format Data
Fixed Free Type Entry
Main Index
Main Index
CHAPTER 6 385
Geometry Modifications User Subroutines
■ UPNOD
Description
This user subroutine is used in conjunction with Eulerian flow solutions (for
example, R-P FLOW parameter) to update the mesh after a velocity field has been
found. The user can access the velocity field and re-define the nodal coordinates.
The user subroutine is called in a loop over all the nodes in the mesh at the end of
convergent step of the flow calculation. This user subroutine should not be used in
conjunction with the CONTACT option.
Format
User subroutine UPNOD is written with the following headers:
SUBROUTINE UPNOD (XORD,VEL,NCRD,NDEG,NODE)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSIONAL XORD (NCRD), VEL(NDEG)
user coding
RETURN
END
where:
Input:
VEL is the array of current velocities at this node.
NCRD is the size of the XORD array (number of coordinates per node).
NDEG is the size of the VEL array (number of velocity components per node).
NODE is the node number.
Required Output:
XORD is the array of coordinates at this node, to be redefined in this routine
as required.
Main Index
Main Index
386 Marc Volume D: User Subroutines and Special Routines
Example
A typical user subroutine UPNOD for use with higher order elements would be:
SUBROUTINE UPNOD(XORD,VEL,NCRD,NODE)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRD),VEL(NDEG)
TIME=
DO 5 I=1,NCRD
XORD(I)=XORD(I)+VEL(I)*TIME
5 CONTINUE
RETURN
END
Main Index
Main Index
CHAPTER 6 387
Geometry Modifications User Subroutines
■ UACTIVE
Description
The UACTIVE user subroutine can be used to either activate or deactivate elements
in the model. The user subroutine is called at the beginning of the analysis and at
the end of each increment. A deactivated element does not contribute to the load,
mass, stiffness, or internal force calculation. If an element is activated after
previously being deactivated, the user can specify if the material is to come back in
its previous state or in a modified state.
Format
User subroutine UACTIVE is written with the following headers:
SUBROUTINE UACTIVE(M,N,MODE,IRSTSTR,IRSTSTN,INC,TIME,TIMINC)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION MODE(3)
user coding
RETURN
END
where:
Input:
M(1) is the element number.
M(2) is the master element number in an adaptive analysis.
N is the internal elsto number.
NN is the internal element number.
INC is the increment number.
TIME is the time at the beginning of the increment.
TIMINC is the incremental time.
Required Output:
MODE(1) -1 deactivate element and remove element from post file.
-11 deactivate element and keep element on post file
2 leave in current status.
Main Index
Main Index
388 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 6 389
Geometry Modifications User Subroutines
■ REBAR
Description
This user subroutine is used in conjunction with the single strain rebar elements (23,
46, 47, 48, 142-148, 165-170). See the description of these elements for details of
the use of this user subroutine. Any nonzero value defined in the this subroutine
overwrites the corresponding value defined by the REBAR model definition option
if it is used with this user subroutine.
Format
User subroutine REBAR is written with the following headers:
SUBROUTINE REBAR (N,NN,T,PR,TR,A)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION A(3),NN(3)
user coding
RETURN
END
where:
Input:
N is the element number.
NN(1) is the integration point number.
NN(2) is the layer number.
NN(3) is the integration point number in this layer.
T,PR,TR,A are to be defined by the user.
Required Output:
T is the nominal size in thickness direction.
PR is the relative position of rebar layer with respect to T.
Marc uses the ratio PR/T to position the rebar layer in the
thickness direction.
TR is the equivalent thickness of rebar.
A is the direction cosines of the rebar.
Main Index
Main Index
390 Marc Volume D: User Subroutines and Special Routines
■ UFRORD
Description
The UFRORD user subroutine can be used to modify (or expand) coordinate change
input in a rezoning analysis. The user must input the UFRORD rezoning option,
followed by a block giving a list of nodes for which UFRORD is used. Marc
calls UFRORD for each node in the list, so that the coordinates for that node can be
modified or generated. The UFRORD rezoning option can be repeated as many times
as necessary.
Format
User subroutine UFRORD is written with the following headers:
SUBROUTINE UFRORD(XORD,NCRD,DISPT,NDEG,N)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRD),DISPT(NDEG)
user coding
RETURN
END
where:
Input:
NCRD is the number of coordinates per node.
DISPT is the total displacements of node N.
NDEG is the number of degrees of freedom per node.
N is the node number.
Required Output:
XORD is the coordinates of node N which should be generated or modified in this
user subroutine.
Main Index
Main Index
CHAPTER 6 391
Geometry Modifications User Subroutines
■ URCONN
Description
The URCONN user subroutine can be used to modify (or expand) input given
through use of the CONNECTIVITY CHANGE option, or as an internal connectivity
generator. The user must input the URCONN rezoning option, followed by a block
giving the elements for which URCONN is used. Marc calls URCONN for each
element in the series, so that the connectivity of that element can be modified or
generated.
Format
User subroutine URCONN is written with the following headers:
SUBROUTINE URCONN(J,ITYPE,LM,NNODMX)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION LM(1)
user coding
RETURN
END
where:
Input:
J is the element number.
NNODMX is the maximum number of nodes in an element.
Required Output:
ITYPE is the element type.
LM is the array of nodes making up the element.
Main Index
Main Index
392 Marc Volume D: User Subroutines and Special Routines
■ USPLIT
C-45 Description
This subroutine is used to split a continuous deformable body into two separate
parts. Currently, the criterion for splitting the body is defined by the thickness and
the splitting is done through global remeshing. When the thickness of the body is
less than the value given in the subroutine, the body is split into two parts and
remeshed. This user subroutine can only be used with 2-D Advancing Front and
Delaunay meshers.
Format
User subroutine USPLIT is written with the following headers:
SUBROUTINE USPLIT (IDIERE,IFLAG,SPLIT0)
implicit real*8 (a-h,o-z)
C THIS ROUTINE DEFINES MATERIAL SPLIT USER CONTROL
C METHOD 1:
C IFLAG=1 : BODY SPLIT DUE TO THIN SECTION
C SPLIT0 - MINIMUM THICKNESS TO AVOID SPLIT
C IF SPLIT0=0, NO BODY SPLIT CHECK
RETURN
END
where:
Input:
IDIERE is the body number.
Required Output:
IFLAG=1 a body is split by checking the thickness or distance of any pair of the
opposite segments.
SPLIT0 the distance value at which the body will be split.
Main Index
Main Index
CHAPTER 6 393
Geometry Modifications User Subroutines
■ UCOORD
Description
The UCOORD user subroutine can be used to define the location of a new node
created due to local adaptive meshing. The default if this routine is not used is to
put the newly created node geometrically half way between the old nodes. This user
subroutine is called for each new node created.
Format
User subroutine UCOORD is written with the following headers:
SUBROUTINE UCOORD(XORD, NCRD, INOD, LM, NNOD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRD,1),LM(1)
user coding
RETURN
END
where:
Input:
NCRD is the number of coordinates per node.
INOD is the node number of new node.
LM(I) is the nodes on which INOD is depending.
NNOD is the number of nodes on which INOD is depending.
= 2 middle of edge between LM(1) and LM(2).
= 3 center of triangle LM(1), LM(2), LM(3).
= 4 center of plane LM(1), LM(2), LM(3), LM(4).
= 4 center of tetrahedral 4 LM(1), LM(2), LM(3), LM(4).
= 8 center of brick LM(1), LM(2), LM(3), LM(4), LM(5), LM(6),
LM(7), LM(8).
Required Output:
XORD(J,I) is the current coordinate j of node i.
Main Index
Main Index
394 Marc Volume D: User Subroutines and Special Routines
■ UADAP
Description
The UADAP user subroutine can be used to define an error criterion for local
adaptive meshing. The value of USERCR must be returned. It is a measure of the
quality of this element. If the value of USERCR is greater than f1 * user_max or
greater than f2, the element refines.
Note that the f1 and f2 must be specified on the ADAPTIVE model definition option.
User_max is the largest value of USERCR over all of the elements.
Format
User subroutine UADAP is written with the following headers:
SUBROUTINE UADAP(MM,XORD,DSXT,NCRDMX,NDEGMX,LM,NNODE,USERCR)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRDMX,*),DSXT(NDEGMX,*),LM(*)
user coding
RETURN
END
where:
Input:
MM is the user’s element number.
XORD is the original coordinates.
DSXT is the total displacements.
NCRDMX is the maximum number of coordinates per node.
NDEGMX is the maximum number of degrees of freedom per node.
LM is the node numbers of this element.
NNODE is the number of nodes per element.
Required Output:
USERCR is the user error criteria to be defined here.
Main Index
Main Index
CHAPTER 6 395
Geometry Modifications User Subroutines
■ UCRACKGROW
Description
This user subroutine allows you to define the crack growth direction and crack
growth increment when using the VCCT model definition option. The routine is
called at the end of each increment if the VCCT option is used. The crack growth
direction can be defined both for 2-D and 3-D and is available on the post file.
Both the crack growth direction and the crack growth increment are used for
crack propagation if this option is flagged in the VCCT option.
The routine is called once for each crack tip node of each crack.
Format
User subroutine UCRACKGROW is written with the following header lines:
SUBROUTINE UCRACKGROW(G1,G2,G3,DIR,CTOD,TRANSF,GROWINC,
& NODE,LCRACK,ICFN,INC,TIME, TIMEINC)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DIR(3),CTOD(3),TRANSF(3,3)
user coding
RETURN
END
where:
Input:
G1,G2,G3 are the three modes of the energy release rate
Gtot=abs(G1)+abs(G2)+abs(G3)
DIR is the estimated growth direction in the local crack tip system calculated
by Marc. Can be modified in this routine.
CTOD is the crack tip opening displacement in the local crack tip system.
TRANSF is transformation matrix between the local crack tip system and the
global system.
GROWINC is the initial crack growth increment given in the VCCT input option.
NODE is the user node number of the current crack tip.
Main Index
Main Index
396 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 6 397
Geometry Modifications User Subroutines
■ USPLIT_MESH
Description
For 2-D and shells: enter a list of edges where the mesh should be split. The mesh
is only be split where it is possible to do so. For example, the internal end point of
an edge is not split.
For 3-D solids: enter a list of faces similar to 2-D and shells.
A list of nodes can also be given to specify which nodes are candidates for a split.
If this list is given, only these nodes may be split. If this list is empty, all nodes of
the edges or faces are candidates for a split. For 2-D and shells, a sequence of edges
can be given in the node list. If no edges are given in iedgelist, it is filled up from
the list of nodes. For 3-D solids, one must give a list of faces.
Format
The USPLIT-MESH user subroutine is written with the following headers:
SUBROUTINE USPLIT_MESH(ICALL,NODELIST,NLIST,IEDGELIST,
$ NEDGELIST,IFACELIST,NFACELIST,INC,TIME,TIMEINC)
INTEGER NODELIST,NLIST,IEDGELIST,NEDGELIST,IFACELIST,
INTEGER NFACELIST,ICALL,INC
REAL*8 TIME,TIMEINC
DIMENSION NODELIST(*),IEDGELIST(2,*),IFACELIST(4,*)
user coding
RETURN
END
where:
Input:
ICALL =1 is called before the analysis begins.
=2 is called during recycles of increment inc after convergence is
obtained (including contact separation). If a split occurs, more
recycles are forced.
=3 is called at the end of increment INC.
Main Index
Main Index
398 Marc Volume D: User Subroutines and Special Routines
NLIST is the number of nodes specified in list. If nlist = 0, all nodes in the
specified edges or faces are used.
IEDGELIST is the list of edges given as node pairs where the mesh should be split.
NEDGELIST is the number of edges given in iedgelist.
IFACELIST is the list of faces where the mesh should be split. For triangular faces,
set the fourth face node to zero. For higher order, elements only
specify the corner nodes of the face.
NFACELIST is the number of faces given in ifacelist.
INC is the current increment number.
TIME is the current solution time at the start of increment INC.
TIMEINC is the current time increment.
Required Output
NODELIST is the array of nodes defining where the mesh is to be split.
Main Index
Main Index
CHAPTER 6 399
Geometry Modifications User Subroutines
■ UADAP2
User-defined Unrefinement
Description
The UADAP2 user subroutine can be used to define unrefinement for local
adaptive meshing.
A refined element is unrefined if all its slave elements are marked for unrefine. An
element is marked for unrefine if USERCR specified in this routine is larger than
f1 * user_max or f2.
Note that f1 and f2 must be specified on the ADAPTIVE model definition option.
User_max is the largest value of USERCR over all of the elements.
Format
User subroutine UADAP2 is written with the following headers:
SUBROUTINE UADAP2(MM,XORD,DSXT,NCRDMX,NDEGMX,LM,NNODE,
USERCR)
IMPLICIT REAL*8 (A-H, O-Z)
DIMENSION XORD(NCRDMX,*),DSXT(NDEGMX,*),LM(*)
user coding
RETURN
END
where:
Input:
MM is the internal element number.
ielext (mm) gives the user element number.
XORD contains the original coordinates.
DSXT contains the total displacements.
NCRDMX is the maximum number of coordinates per node.
NDEGMX is the maximum number of degrees of freedom per node.
LM contains the node numbers of this element.
NNODE is the number of nodes of this element.
Required Output:
USERCR is the criterion is to be defined in this routine.
Main Index
Main Index
400 Marc Volume D: User Subroutines and Special Routines
■ UADAPBOX
Description
The UADAPBOX user subroutine can be used to define and move the region used
with either the adaptive criteria node within a box, cylinder, or sphere for local
adaptive meshing.
The position and latest motion of rigid contact bodies are provided in this routine;
the numbering used is the same as in the input file. Please note that the values of
position and motion of deformable bodies will be zero.
Format
User subroutine UADAPBOX is written with the following. headers:
SUBROUTINE UADAPBOX(REGCOORD,ICRITERION,TIME,DTIME,
$ BODYCOORD,BODYMOTION,NBODIES,NFIRSTRIGID)
IMPLICIT REAL*8 (A-H,O-Z)
REAL*8 REGCOORD(*),BODYCOORD(3,*),BODYMOTION(3,*),TIME,DTIME
INTEGER ICRITERION(2),NBODIES,NFIRSTRIGID
user coding
RETURN
END
where:
Input
REGCOORD(*) are the region coordinates (see below).
ICRITERION(1) is the adaptive criterion number (from input).
ICRITERION(2) is the adaptive criterion type.
TIME is the time at the end of the previous increment.
DTIME is the time increment of the previous increment.
BODYCOORD(I,J) are the current coordinates of the reference point of contact
body j
Main Index
Main Index
CHAPTER 6 401
Geometry Modifications User Subroutines
Main Index
Main Index
402 Marc Volume D: User Subroutines and Special Routines
Example
The following code lets the box defined in adaptive criterion 1 follow the motion of
rigid body number 2.
IF (ICRITERION.EQ.1) THEN
REGCOORD(1)=REGCOORD(1)+BODYMOTION(1,2)
REGCOORD(4)=REGCOORD(4)+BODYMOTION(1,2)
REGCOORD(2)=REGCOORD(2)+BODYMOTION(2,2)
REGCOORD(5)=REGCOORD(5)+BODYMOTION(2,2)
REGCOORD(3)=REGCOORD(3)+BODYMOTION(3,2)
REGCOORD(6)=REGCOORD(6)+BODYMOTION(3,2)
ENDIF
Main Index
Main Index
CHAPTER 6 403
Geometry Modifications User Subroutines
■ UCRACK_PARIS
Description
This user subroutine allows the user to define the increment of crack growth for
VCCT or crack propagation.
Format
The UCRACK_PARIS user subroutine is written with the following header:
SUBROUTINE UCRACK_PARIS(GMAX,GMIN,GTHRESH,C,EXPON,GROWINCMIN,
* GROWINC,NODE,LCRACK,NAME,ICFN,INC,
* TIME,TIMEINC)
IMPLICIT REAL*8 )A-H,O-Z)
CHARACTER*(*) NAME
USER CODING
RETURN
END
where:
Required Input
GMIN, GMAX are the max and min values of the energy release rate during the
load sequence.
GTHRESH is the threshold value for the energy release rate, from input. Possibly
scaled by table.
C is the user input C parameter for Paris law possibly scaled by table.
EXPON is the user input m parameter (exponent) for Paris law possibly scaled
by table.
GROWINCMI is the minimum growth increment, from input possibly scaled by table.
N
NODE is the user node number of the current crack tip node.
LCRACK is the crack number.
NAME is the name of the crack, from input.
ICFN is the index of the crack tip node in the crack front. For 2-D and shells, it
is always equal to 1.
Main Index
Main Index
404 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 6 405
Geometry Modifications User Subroutines
■ UTRANS
Description
This user subroutine allows the user to specify a local coordinate system for
user-specified nodes. The node numbers are given in the UTRANFORM model
definition option. This user subroutine is called a multiple number of times for each
increment of analysis. The local coordinate system can be modified (updated) at
each increment to facilitate the input of complex boundary conditions. Incremental
nodal displacements and reaction forces are output in both the local and global
coordinate system. All total nodal quantities are output in the global system.
Format
User subroutine UTRANS is written with the following headers:
SUBROUTINE UTRANS (DICOS, NDEG, XORD, NCRD, I, N)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DICOS (NDEG, NDEG), XORD(NCRD)
user coding
RETURN
END
where:
Input:
NDEG is the number of degrees of freedom.
XORD is the coordinates of the node updated if either the LARGE STRAIN or
FOLLOW FOR parameter is used.
NCRD is the number of coordinates per node.
I is the user’s node number.
N is the transformation number.
Required Output:
DICOS is the user-defined rotation matrix from the local to global coordinate
system. Note that this matrix must be proper orthogonal.
Main Index
Main Index
406 Marc Volume D: User Subroutines and Special Routines
■ USHELL
Description
This user subroutine allows the user to specify the thickness of shell elements for
each integration point. This user subroutine is called twice for each increment of
analysis. It is not advisable to change the thickness during an analysis.
Note: This user subroutine should not be used if the thickness is to be considered a design
variable. Use the GEOMETRY option instead.
Format
User subroutine USHELL is written with the following headers:
SUBROUTINE USHELL (THICK,XINTP,NCRD,M,NN)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION XINTP(NCRD),M(2)
user coding
RETURN
END
where:
Input:
XINTP is the integration point coordinates.
NCRD is the number of coordinates per point.
M(1) is the user’s element number.
M(2) is the internal element number.
NN is the integration point number.
Required Output:
THICK is the thickness of shell, to be modified by the user.
Main Index
Main Index
CHAPTER 6 407
Geometry Modifications User Subroutines
■ UTHICK
Description
The UTHICK user subroutine is called automatically by the NODAL THICKNESS
model definition block. The value of the THICK argument upon input is the value
for nodal thickness entered by the user. If this user subroutine is not used, the nodal
thickness data entered through the NODAL THICKNESS block are used.
Note: This user subroutine should not be used if the thickness is to be considered a design
variable. Use the GEOMETRY option instead.
Format
User subroutine UTHICK is called with the following headers:
SUBROUTINE UTHICK (THICK,COORD,NCRD,NOD,BEARC,NBEARF,INC,
INCSUB)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION COORD (NCRD), BEARC(6, NBEARF)
user coding
RETURN
END
where:
Input:
COORD is the array of coordinates for this node. This array is only available if the
COORDINATES option (and UFXORD option, if used) precedes the
NODAL THICKNESS option.
NCRD is the maximum number of coordinates per node.
NOD is the node number.
BEARC is not used.
NBEARF is not used.
INC is not used.
INCSUB is not used.
Required Output:
THICK is the user-defined nodal thickness of node NOD. Upon input, THICK takes
the value input through the NODAL THICKNESS option.
Main Index
Main Index
408 Marc Volume D: User Subroutines and Special Routines
■ UACTUAT
Description
The UACTUAT user subroutine allows the user to control the length of an actuator in
an incremental analysis. This is often useful in mechanism analyses, where the
kinematics are prescribed. This is used with the truss element type 9, when an initial
length is given in the fourth field of the GEOMETRY option.
Format
User subroutine UACTUAT is called with the following headers:
SUBROUTINE UATUAT (M,INC,CPTIM,TIMINC,XLNGTH,OLNGTH)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION M(2)
user coding
RETURN
END
where:
Input:
M(1) is the user’s element number.
M(2) is the internal element number.
INC is the increment number.
CPTIM is the time.
TIMINC is the time increment.
OLNGTH is the current length of actuator.
Required Output:
XLNGTH is the length of actuator to be set by the user.
Main Index
Main Index
Chapter 7 Output Quantities User Subroutines List
ELEVAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
ELEVEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
IMPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
INTCRD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
PLOTV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Main Index
Main Index
410 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 7 Output Quantities User Subroutines
7 Output Quantities
User Subroutines
Main Index
Main Index
412 Marc Volume D: User Subroutines and Special Routines
This chapter describes user subroutines which can be used to obtain results from the
analysis and manipulate it for postprocessing. There are also four dummy user
subroutines that can be used to set parameters for the advanced user. Table 7-1
summarizes these user subroutines and indicates what parameters or model
definition options are required to invoke the user subroutine.
Table 7-1 Output Quantities User Subroutines Requirements
Main Index
Main Index
CHAPTER 7 413
Output Quantities User Subroutines
■ PLOTV
Description
The PLOTV user subroutine is used in conjunction with either element code 19 or a
negative code entered in the POST option. This allows the user to define an element
variable to be written to the post file.
Format
User subroutine PLOTV is written with the following headers:
SUBROUTINE PLOTV(V,S,SP,ETOT,EPLAS,ECREEP,T,M,NN,KCUS,NDI,
+ NSHEAR,JPLTCD)
IMPLICIT REAL*8 (A-H, O-Z)
DIMENSION S(*),SP(*),ETOT(*),EPLAS(*),ECREEP(*),T(*),
+ M(2),KCUS(2)
user coding
RETURN
END
where:
Input:
S is the array of stresses at this integration point. For heat transfer analysis, S
contains ∂T ⁄ ∂ X i and K i ∂ T ⁄ ∂X i . For a magnetostatic analysis, S contains the
magnetic induction (B) (positions 1, 2, 3 for x, y, z) and the magnetic field
intensity (H) (positions 5, 6, 7 for x, y, z).
SP is the array of stresses in the preferred direction if ORIENTATION is used.
ETOT is the total strain (generalized) at this integration point.
EPLAS is the total plastic strain at this integration point.
ECREEP is the total creep strain at this integration point.
T is the array of state variables at this integration point (temperature first).
M(1) is the user’s element number.
M(2) is the internal element number.
NN is the integration point number.
KCUS(1) is the internal layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum elements).
Main Index
Main Index
414 Marc Volume D: User Subroutines and Special Routines
Example
For example, suppose the user wishes to output the sum of the squares of the two
shear stresses in the friction theory. These are S(2) and S(3), so the user subroutine
would appear as:
SUBROUTINE PLOTV(V,S,SP,ETOT,EPLAS,ECREEP,T,M,NN,KCUS,NDI,
+ NSHEAR,JPLTCD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION S(*),SP(*),ETOT(*),EPLAS(*),ECREEP(*), T(*)
+ M(2),KCUS(2)
V=SQRT(S(2)**2 + S(3)**2)
RETURN
END
This quantity could then be postprocessed using Marc Mentat or MD Patran.
For electromagnetics, the PLOTV variables are:
V is the variable.
ERI is the real and imaginary components of the electric field intensity.
DRI is the real and imaginary components of the electric displacement.
BRI is the real and imaginary components of the magnetic induction.
HRI is the real and imaginary components of the magnetic field intensity.
CRI is the real and imaginary components of the current density.
T is the current temperature; not used.
M(1) is the user’s element number.
M(2) is the internal element number
NN is the integration point number.
KCUS(1) is not used (always 1).
KCUS(2) is not used (always 1).
NDI is the number of components = 3
NSHEAR is not used.
JPLTCD is the absolute value of the user’s post code.
Main Index
Main Index
CHAPTER 7 415
Output Quantities User Subroutines
■ UPOSTV
Description
The UPOSTV user subroutine is used in conjunction with the POST option to define
a vector quantity that is to be written to the post file. This routine should only be
used with post revision formats 8 or earlier. For later post revisions, use the
UPSTNO user subroutine.
Format
User subroutine UPOSTV is written with the following headers:
SUBROUTINE
UPOSTV(N,NDEG,NCRD,NUMNP,IANTYP,JNODE,IUID,UPOST,
* XORD,VECTOR,INC,CPTIM)
IMPLICIT REAL*8 (A-H, O-Z)
DIMENSION UPOST(NDEG),XORD(NCRD),VECTOR(NDEG,JNODE)
user coding
RETURN
END
where:
Input:
N is the user’s node number.
NDEG is the number of degrees of freedom per node.
NUMNP is the number of nodes in the mesh.
IANTYP is the analysis type – see PLDUMP in Chapter 9.
JNODE is the number of vector quantities already defined – see PLDUMP in
Chapter 9.
IUID is the user’s vector number.
XORD is the coordinates of this node.
VECTOR is the displacement, etc. of this node. See PLDUMP in Chapter 9.
INC is the increment number.
CPTIM is the total time.
Required Output:
UPOST is user-defined components of vector for this node.
Main Index
Main Index
416 Marc Volume D: User Subroutines and Special Routines
Example
For example, the user would like to postprocess the relative displacement of all
nodes with respect to his node 5 for all time. The user would need to obtain the
displacement of node 5 and subtract this from the other displacements. This is done
as follows:
SUBROUTINE UPOSTV(N,NDEG,NCRD,NUMNP,IANTYP,JNODE,IUID,
* UPOST,XORD,VECTOR,INC,CPTIM)
implicit real*8 (a-h,o-z)
c
c user subroutine to define nodal post variables
c
c n user node number
c ndeg number of degrees of freedom per node
c ncrd number of coordinates per node
c numnp number of nodes in mesh
c iantyp analysis type - see PLDUMP in volume D
c jnode number of vector quantities already defined
c - see PLDUMP in volume D
c iuid user vector number
c upost user defined components of vector for this
node
c xord coordinates of this node
c vectors displacement, etc of this node.
c see iantyp/jnode table in PLDUMP section in
volume D
c inc increment number
c cptim total time
c
dimension upost(ndeg),xord(ncrd),vector(ndeg,jnode)
include 'space'
include 'array2'
dimension disp5(12)
c set reference node lext=5
lext=5
c get internal node number
Main Index
Main Index
CHAPTER 7 417
Output Quantities User Subroutines
lint=nodint (lext)
c get reference displacement and store into disp5
la3=idsxt+(lint-1)*ndeg
call mcpy(vars(la3),disp5,ndeg,1,0)
c
c get displacement of current node from vector and
c subtract off reference displacement and store back into
upost
c
do i=1,ndeg
upost(i)=vector(i,1)-disp5(i)
enddo
c
return
end
Main Index
Main Index
418 Marc Volume D: User Subroutines and Special Routines
■ UPSTNO
Description
The UPSTNO user subroutine is used in conjunction with the POST option to define
nodal quantities to be written on the post file. This routine is called for post revision
nine and higher. For 7- and 8-style post files, the UPOSTV user subroutine should
be used.
Format
User subroutine UPSTNO is written with the following headers:
SUBROUTINE UPSTNO(NQCODE,NODEID,VALNO,NQNCOMP,NQTYPE,
* NQAVER,NQCOMPTYPE,NQDATATYPE,NQCOMPNAME)
IMPLICIT REAL*8 (A-H,O-Z)
c
DIMENSION VALNO(*)
CHARACTER*24 NQCOMPNAME(*)
user coding
RETURN
END
where
Input:
NQCODE User nodal post code, defined on the POST option
NODEID Node number
NQCOMPNAME Not used (reserved for future expansion)
Required Output:
VALNO() Nodal values:
real/imaginary VALNO( 1: NQNCOMP) real
VALNO(NQNCOMP+1:2*NQNCOMP) imagaginary
magnitude/phase VALNO( 1: NQNCOMP) magnitude
VALNO(NQNCOMP+1:2*NQNCOMP) phase
Main Index
Main Index
CHAPTER 7 419
Output Quantities User Subroutines
Example
For example, the user would like to vector plot the total contact force on nodes
whereby the total contact force is the vector sum of the normal and friction force
vectors. The UPSTNO user subroutine can be selected to perform the vector addition
and place the sum on the post file. This is done as follows:
subroutine upstno(nqcode,nodeid,valno,nqncomp,nqtype,
* nqaver,nqcomptype,nqdatatype,
* nqcompname)
implicit real*8 (a-h,o-z)
dimension valno(*)
character*24 nqcompname(*)
c......................................... Begin User Coding
dimension valno1(3),valno2(3)
if (nqcode.eq.-1) then
c... pick up contact normal force and store in valno1
call nodvar(35,nodeid,valno1,nqncomp,nqdatatype)
c... pick up contact friction force and store in valno2
call nodvar(37,nodeid,valno2,nqncomp,nqdatatype)
c... add normal and friction force
do 1 i = 1, nqncomp
valno(i)=valno1(i)+valno2(i)
1 continue
c... indicate that valno represents a vector
nqtype=1
end if
c......................................... End User Coding
return
end
Main Index
Main Index
420 Marc Volume D: User Subroutines and Special Routines
■ IMPD
Description
The IMPD user subroutine makes the displacements, coordinates, reaction forces,
velocities, and accelerations available at the end of each increment so that the user
can save them in any form convenient for postprocessing. During harmonic
subincrements, IMPD allows the user to obtain the complex displacements and
reactions. In heat transfer (or Joule heating) analysis, this user subroutine allows the
user to obtain nodal temperatures, fluxes, and voltages for his postprocessing. This
user subroutine is used in conjunction with the UDUMP option.
Stress Analysis
Format
User subroutine IMPD is written with the following headers:
SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DD (NDEG), TD (NDEG), XORD
(NCRD),F(NDEG),V(NDEG),A(NDEG), LNODE(2)
user coding
RETURN
END
where:
Input:
LNODE(1) is the node number (the user subroutine is called once per node
per increment).
LNODE(2) =1
DD is the array of displacement increments at this node.
TD is the array of total displacements at this node.
XORD are the coordinates of this node.
F are the reaction forces at prescribed boundary conditions; residual load
correction elsewhere at this node.
V is the total velocity at this node.
A is the total acceleration at this node.
Main Index
Main Index
CHAPTER 7 421
Output Quantities User Subroutines
NDEG is the number of degrees of freedom per node (that is, the size of the DD,
TD, V, and A arrays).
NCRD is the number of coordinate directions per node (equals the size of the
XORD array).
During harmonic subincrements:
Input:
DD is the array of real displacements.
TD is the array of imaginary displacements.
F is the array of real reaction forces.
V is the array of imaginary reaction forces.
Example
For example, suppose the user wishes to write on a file the displaced position of a
three-dimensional solid structure for subsequent plotting. A scale factor of 5 is
used on the displacements.
SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DD(NDEG), TD(NDEG),XORD(NCRD),F(NDEG),
1 V(NDEG), A(NDEG), LNODE(2)
DIMENSION TXORD(3)
C TXORD WILL BE THE COORDS + 5X TOTAL DISPLACEMENTS
DO 1 I = 1,3
1 TXORD(I) = XORD(I) + 5.0*TD(I)
C WRITE OUT DISPLACED POSITIONS ON TAPE 20.
WRITE (20) LNODE(1), TXORD
RETURN
END
After each increment, there are NUMNP records (number of nodal points) on logical
unit 20; each contains a node number and three adjusted coordinates. Note that
any additional file unit must be taken care of with the appropriate machine
dependent JCL.
Note: In a coupled thermal-stress analysis, IMPD is called at the end of the stress pass of an
increment. If one then wants to have the temperature of a node (or the top, bottom, and
middle temperature in the case of shell elements), use can be made of the NODVAR
user subroutine as follows:
DIMENSION TXORD(3)
C
CALL NODVAR (14, N, DDTEMP, N1DUM,N2DUM)
Now DDTEMP contains the temperature(s) of node n.
Main Index
Main Index
422 Marc Volume D: User Subroutines and Special Routines
Format
User subroutine IMPD is written with the following headers:
SUBROUTINE IMPD (N,DD,TD,XORD,F,V,A,NDEG,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DD (NDEG),TD(NDEG),XORD(NCRD),F(NDEG),V(NDEG),A(NDEG),LNODE(2)
user coding
RETURN
END
where:
Input:
LNODE(1) is the node number (the user subroutine is called once per node
per increment).
LNODE(2) = 2
DD is the array of temperatures at this node.
TD is the array of reaction fluxes at this node.
XORD is the coordinates of this node.
F is not used.
V is not used.
A is not used.
NDEG is the number of degrees of freedom per node (that is, the size of the DD, TD,
V, and A arrays).
NCRD is the number of coordinate directions per node (equals the size of the
XORD array).
Main Index
Main Index
CHAPTER 7 423
Output Quantities User Subroutines
where:
Input:
LNODE(1) is the node number (the user subroutine is called once per node
per increment).
LNODE(2) = 4
DD is the array of voltages at this node.
TD is the array of reaction currents at this node.
XORD is the coordinates of this node.
F is not used.
V is not used.
A is not used.
NDEG is the number of degrees of freedom per node (that is, the size of the DD,
TD, V, and A arrays).
NCRD is the number of coordinate directions per node (equals the size of the XORD
array).
Electrostatic Analysis
Format
User subroutine IMPD is written with the following headers:
SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRD)
user coding
RETURN
END
where:
Input:
LNODE(1) is the node number (the user subroutine is called once per node
per increment).
LNODE(2) = 6.
DD is the potential at this node.
TD is the reaction charge at this node.
XORD is the coordinates of this node.
F is not used.
Main Index
Main Index
424 Marc Volume D: User Subroutines and Special Routines
V is not used.
A is not used.
NDEG is the number of degrees of freedom per node = 1.
NCRD is the number of coordinate directions per node (equals the size of the
XORD array).
Magnetostatic Analysis
Format
User subroutine IMPD is written with the following headers:
SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRD),LNODE(2)
user coding
RETURN
END
where:
Input:
LNODE(1) is the node number (the user subroutine is called once per node
per increment).
LNODE(2) = 7
DD is the potential at this node.
TD is the reaction current at this node.
XORD is the coordinates of this node.
F is not used.
V is not used.
A is not used.
NDEG is the number of degrees of freedom per node = 1.
NCRD is the number of coordinate directions per node (equals the size of the
XORD array).
Main Index
Main Index
CHAPTER 7 425
Output Quantities User Subroutines
Format
User subroutine IMPD is written with the following headers:
SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DD
(NDEG),TD(NDEG),XORD(NCRD),F(NDEG),V(NDEG),A(NDEG), LNODE(2)
user coding
RETURN
END
where:
Input:
LNODE(1) is the node number (the user subroutine is called once per node
per increment).
LNODE(2) = 8
DD is the array of real component of potential at this node.
TD is the array of imaginary component of potential at this node.
XORD is the coordinates of this node.
F is the real component of the reaction.
V is the imaginary component of the reaction.
A is not used.
NDEG is the number of degrees of freedom per node = 1.
NCRD is the number of coordinate directions per node (equals the size of the
XORD array).
Main Index
Main Index
426 Marc Volume D: User Subroutines and Special Routines
where:
Input:
LNODE(1) is the node number (the user subroutine is called once per node
per increment).
LNODE(2) = 8
DD is the array of incremental potential at this node.
TD is the array of total potential at this node.
XORD is the coordinates of this node.
F is the reaction forces at applied boundary conditions.
V is not used.
A is not used.
NDEG is the number of degrees of freedom per node (that is, the size of the DD,
TD, and F arrays).
NCRD is the number of coordinate directions per node (equals the size of the
XORD array).
Acoustic Analysis
Format
User subroutine IMPD is written with the following headers:
SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRD),LNODE(2)
user coding
RETURN
END
where:
Input:
LNODE(1) is the node number.
LNODE(2) = 10
DD is the real displacements (nodes of structural elements).
is the real pressure (nodes of acoustic medium).
TD is the imaginary displacements (nodes of acoustic medium).
is the imaginary pressure (nodes of acoustic medium).
XORD is the coordinates.
Main Index
Main Index
CHAPTER 7 427
Output Quantities User Subroutines
Format
User subroutine IMPD is written with the following headers:
SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DD
(NDEG),TD(NDEG),XORD(NCRD),F(NDEG),V(1),A(1),LNODE(2)
user coding
RETURN
END
where:
Input:
LNODE(1) is the node number (the user subroutine is called once per node
per increment).
LNODE(2) = 3.
DD is not used.
TD is the array of velocities at this node.
XORD is the coordinates of this node.
F is the array of forces.
V is the temperature at this node in a fluid-thermal analysis.
A is the flux at this node in a fluid-thermal analysis.
NDEG is the number of degrees of freedom per node (that is, the size of the DD,
TD, and F arrays).
NCRD is the number of coordinate directions per node (equals the size of the
XORD array).
Main Index
Main Index
428 Marc Volume D: User Subroutines and Special Routines
■ ELEVAR
Description
The ELEVAR user subroutine makes element (integration point) quantities available
at the end of each increment so that the user can save them in any form convenient
for postprocessing. This user subroutine is used in conjunction with the UDUMP
option.
Format
User subroutine ELEVAR is written with the following headers:
SUBROUTINE ELEVAR(N,NN,KCUS,GSTRAN,GSTRES,STRESS,PSTRAN,
1 CSTRAN,VSTRAN,CAUCHY,EPLAS,EQUIVC,SWELL,KRTYP,PRANG,DT,
2 GSV,NGENS,NGEN1,NSTATS,NSTASS,THERM)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION GSTRAN(NGENS),GSTRES(NGENS),
1 STRESS(NGEN1),PSTRAN(NGEN1),CSTRAN(NGEN1),VSTRAN(NGEN1),
2 CAUCHY(NGEN1),DT(NSTATS),GSV(1),THERM(NGEN1),KRTYP(4),
3 PRANG(3,2),KCUS(2)
User Coding
RETURN
END
where:
Input:
N is the element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
GSTRAN is the total strain array.
GSTRES is the generalized force array.
STRESS is the total stresses array.
PSTRAN is the plastic strain array.
CSTRAN is the creep strain array.
Main Index
Main Index
CHAPTER 7 429
Output Quantities User Subroutines
Main Index
Main Index
430 Marc Volume D: User Subroutines and Special Routines
■ ELEVEC
Description
The ELEVEC user subroutine makes element (integration point) quantities available
at the end of each harmonic subincrement so that the user can save them in any form
convenient for his postprocessing. This user subroutine is used in conjunction with
the UDUMP option.
Format
User subroutine ELEVEC is written with the following headers:
SUBROUTINE ELEVEC(N,NN,KCUS,GSTRAN,GSTRES,STRESS,PSTRAN,
1 CSTRAN,VSTRAN,CAUCHY,EPLAS,EQUIVC,SWELL,KRTYP,PRANG,DT,
2 GSV,NGENS,NGEN1,NSTATS,NSTASS,STSRE,STSIM,STNRE,STNIM)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION GSTRAN(NGENS),GSTRES(NGENS),
1 STRESS(NGEN1),PSTRAN(NGEN1),CSTRAN(NGEN1),VSTRAN(NGEN1),
2 CAUCHY(NGEN1),DT(NSTATS),GSV(NSTASS),
3
STSRE(NGEN1),STSIM(NGEN1),STNRE(NGEN1),STNIM(NGEN1),KCUS(2)
user coding
RETURN
END
where:
Input:
N is the element number.
NN is the integration point number.
KCUS(1) is your layer number (always 1 for continuum elements).
KCUS(2) is the internal layer number (always 1 for continuum element).
GSTRAN is the total strain array.
GSTRES is the generalized force array.
STRESS is the total stresses array.
PSTRAN is the plastic strain array.
Main Index
Main Index
CHAPTER 7 431
Output Quantities User Subroutines
Main Index
Main Index
432 Marc Volume D: User Subroutines and Special Routines
■ INTCRD
Description
The INTCRD user subroutine makes the integration point coordinates for the
stiffness matrix available at each increment. The user can save them in any form
convenient for postprocessing.
Format
User subroutine INTCRD is written with the following headers:
SUBROUTINE INTCRD(M,NN,XORD,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION XORD(NCRD)
user coding
RETURN
END
where:
Input:
M is the element number.
NN is the integration point number.
XORD is the coordinates of this integration point.
NCRD is the number of coordinate directions.
Main Index
Main Index
CHAPTER 7 433
Output Quantities User Subroutines
■ UBGINC
Beginning of Increment
Description
The UBGINC user subroutine is called at the beginning of each new increment. It
can be used to define or modify data variables stored in common blocks.
Format
User subroutine UBGINC is written with the following headers:
SUBROUTINE UBGINC(INC,INCSUB)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
INC is the increment number.
INCSUB is the subincrement number.
Main Index
Main Index
434 Marc Volume D: User Subroutines and Special Routines
■ UEDINC
End of Increment
Description
The UEDINC user subroutine is called at the end of each increment. It can be used to
define or modify data variables stored in common blocks.
Format
User subroutine UEDINC is written with the following headers:
SUBROUTINE UEDINC(INC,INCSUB)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
INC is the increment number.
INCSUB is the subincrement number.
Main Index
Main Index
CHAPTER 7 435
Output Quantities User Subroutines
■ UBGITR
Beginning of Iteration
Description
The UBGITR user subroutine is called at the beginning of each iteration in the
solution of the nonlinear problem. It can be used to define or modify data variables
stored in common blocks.
Format
User subroutine UBGITR is written with the following headers:
SUBROUTINE UBGITR(INC,INCSUB,NCYCLE)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
INC is the increment number.
INCSUB is the subincrement number.
NCYCLE is the iteration number (the first is labeled zero).
Main Index
Main Index
436 Marc Volume D: User Subroutines and Special Routines
■ UBGPASS
Description
The UBGPASS user subroutine is called at the beginning of each pass of coupled
analyses. It can be used to define or modify data variables stored in common blocks.
Format
User subroutine UBGPASS is written with the following headers:
SUBROUTINE UBGPASS (INC,INCSUB,IPASS)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
INC is the increment number.
INCSUB is the subincrement number.
IPASS is the pass identifier:
IPASS = 1 - stress pass
IPASS = 2 - thermal pass
IPASS = 3 - fluid pass
IPASS = 4 - Joule heating pass
IPASS = 5 - pore pressure pass
IPASS = 6 - electrostatics pass
IPASS = 7 - magnetostatics pass
IPASS = 8 - electromagnetics pass
Main Index
Main Index
CHAPTER 7 437
Output Quantities User Subroutines
■ UELOOP
Description
The UELOOP user subroutine is called in a loop over the elements. It can be used to
define or modify data variables stored in common blocks.
Format
User subroutine UELOOP is written with the following headers:
SUBROUTINE UELOOP(M,N,IL)
IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:
Input:
M is the user’s element number.
N is the internal element number.
IL is the loop flag.
= 1 form consistent nodal loads from distributed loads.
= 2 stiffness matrix formation.
= 3 mass matrix formation.
= 4 stress recovery.
Main Index
Main Index
438 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 8 Hydrodynamic Lubrication User Subroutines List
8 Hydrodynamic Lubrication
User Subroutines List
Main Index
Main Index
440 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 8 Hydrodynamic Lubrication User Subroutine
8 Hydrodynamic Lubrication
User Subroutines
Main Index
Main Index
442 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 8 443
Hydrodynamic Lubrication User Subroutines
■ UBEAR
Description
In bearing analysis, the lubricant is modeled by a planar mesh due to the absence
of pressure gradients across the film height. Marc integrates the obtained pressure
distribution over the entire mesh. This yields a set of equivalent consistent nodal
forces perpendicular to the lubricant. In order to calculate the load capacity of a
particular bearing system, these forces must be transformed to the global coordinate
system. For this purpose, information is required about the direction cosines of the
lubricant normal. This can be done in the UBEAR user subroutine which is called for
each node.
Format
User subroutine UBEAR is written with the following headers:
SUBROUTINE UBEAR (COORD,DIRCOS,NODE,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION COORD (NCRD), COS(3)
user coding
RETURN
END
where:
Input:
COORD is the array of coordinates at this node.
NODE is the node number.
NCRD is the number of coordinates per node.
Required Output:
DIRCOS is the array of direction cosines of the vector perpendicular to the lubricant;
to be defined in this user subroutine. A default vector (0,0,1) is assumed if
not specified.
Main Index
Main Index
444 Marc Volume D: User Subroutines and Special Routines
■ UGROOV
Description
In bearing analysis, discontinuous film thicknesses are often applied to increase the
load carrying capacity. This is usually done by grooves, which can be defined in the
GEOMETRY option. However, this is not possible if position dependent groove
depths have to be included. In such situations, the UGROOV user subroutine must be
used. It is called at each integration point and allows the user to specify the groove
depth at these points. In addition, this user subroutine can be used for selecting
elements which are located at grooves if complex groove patterns have to
be modeled.
Format
User subroutine UGROOV is written with the following headers:
SUBROUTINE UGROOV (THICK,COORD,M,NN,NCRD)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION COORD (NCRD)
user coding
RETURN
END
where:
Input:
COORD is the array of coordinates at this integration point.
M is the element number.
NN is the integration point number.
NCRD is the number of coordinates per node.
Required Output:
THICK is the groove depth magnitude to be specified.
Main Index
Main Index
CHAPTER 8 445
Hydrodynamic Lubrication User Subroutines
■ URESTR
Description
In bearing analysis, it is often necessary to include nonuniform restrictor
coefficients and pump pressures. The URESTR user subroutine allows this. It is
called at each increment for each integration point on each element surface given
in the RESTRICTOR model definition set, and allows the user to modify the
restrictor coefficient and pump pressure input on the data blocks.
Format
User subroutine URESTR is written with the following headers:
SUBROUTINE URESTR (CR,PP,PS,N,INC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION N(3)
user coding
RETURN
END
where:
Input:
PS is the surface pressure at the beginning of the increment.
N(1) is the element number.
N(2) is the face number.
N(3) is the integration point number.
INC is the current increment number.
Required Output:
CR is the ratio of the desired restrictor coefficient to that given on the
RESTRICTOR data set for this element to be defined by the user (preset to 1).
PP is the ratio of the desired pump pressure to that given on the RESTRICTOR
data set for this element to be defined by the user (preset to 1).
Main Index
Main Index
446 Marc Volume D: User Subroutines and Special Routines
Note that since CR and PP are defined as ratios, if the user does not re-define them
in this user subroutine, the data block values are used. If the user wishes to give
absolute values here, the corresponding values on the RESTRICTOR data set can be
conveniently set to 1.
Main Index
Main Index
CHAPTER 8 447
Hydrodynamic Lubrication User Subroutines
Format
User subroutine UTHICK is written with the following headers:
SUBROUTINE UTHICK (THICK,COORD,NCRD,NOD,BEARC,NBEARF,INC,
INCSUB)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION COORD (NCRD), BEARC (6,NBEARF)
user coding
RETURN
END
where:
Input:
COORD is the array of coordinates for this node.
NCRD is the number of coordinates per node.
NOD is the node number.
BEARC is the matrix of previously calculated bearing properties. Each column
contains three bearing force and three bearing moment components. The
quantities calculated in the previous increment are stored in the first column.
Each subsequent column contains the properties pertaining to the previous
set of subincrements.
Main Index
Main Index
448 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 8 449
Hydrodynamic Lubrication User Subroutines
Description
In bearing analysis, it is sometimes necessary to include a position dependent
velocity field. The UVELOC user subroutine, which is called for each node, allows
the user the specification or re-definition of previously specified nodal velocity
vectors.
Format
User subroutine UVELOC is written with the following headers:
SUBROUTINE UVELOC (VELOC,COORD,NCRD,NODE)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION VELOC (NCRD),COORD(NCRD)
user coding
RETURN
END
where:
Input:
COORD is the array of coordinates at this node.
NCRD is the number of coordinates.
NODE is the node number.
Required Output:
VELOC is the array of nodal velocity components to be defined.
Main Index
Main Index
450 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 9 Special Routines — Marc Post File Processor List
PLDUMP13/PLDUMP2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Main Index
Main Index
452 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 9 Special Routines — Marc Post File Processor
Main Index
Main Index
454 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 9 455
Special Routines User — Marc Post File Processor
■ PLDUMP13/PLDUMP2000
Main Index
Main Index
456 Marc Volume D: User Subroutines and Special Routines
****************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(a70)’) title(1:70)
Main Index
Main Index
CHAPTER 9 457
Special Routines User — Marc Post File Processor
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (ititle(ijk),ijk=1,70)
write(title(1:70),’(70a1)’) (ititle(ijk),ijk=1,70)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
****************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) (lm(ijk),ijk=1,18)
read(formatted,’(6i13)’) (lm(ijk),ijk=19,30)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (lm(ijk),ijk=1,18)
read(binary) (lm(ijk),ijk=19,30)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
458 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CHAPTER 9 459
Special Routines User — Marc Post File Processor
blkend = =end=
*******************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) idum
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) idum
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
Main Index
Main Index
460 Marc Volume D: User Subroutines and Special Routines
***********************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) nprocd,idomit
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nprocd,idomit
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
****************************************
if(npost.gt.0) then
read(formatted,’(a70)’) blkbegin
Main Index
Main Index
CHAPTER 9 461
Special Routines User — Marc Post File Processor
do ijk=1,npost
read(formatted,’(i13,a24)’) ipost,cpost
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,npost
read(binary) ipost,(iname(ijl),ijl=1,24)
write(cpost,’(24a1)’) (iname(ijl),ijl=1,24)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
blkend = =end=
Main Index
Main Index
462 Marc Volume D: User Subroutines and Special Routines
************************************
if(numel.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,numel
read(formatted,’(6i13)’)
ielid,ityp,nnod,(iel(ijl),ijl=1,nnodmx)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,numel
read(binary) ielid,ityp,nnod,(iel(ijl),ijl=1,nnodmx)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
CHAPTER 9 463
Special Routines User — Marc Post File Processor
blkend = =end=
*******************************
if(numnp.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,numnp
read(formatted,’(i13,5e13.6,/,6e13.6)’)
inod(ijk),(xord(ijl,ijk),ijl=1,ncrd)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,numnp
read(binary) inod(ijk),(xord(ijl,ijk),ijl=1,ncrd)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
464 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) npoints
if(npoints.ne.0) then
do ijk=1,npoints
read(formatted,’(i13,3e13.6)’) ipnt(ijk),(xpnt(ijl,ijk),ijl=1,3)
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) npoints
Main Index
Main Index
CHAPTER 9 465
Special Routines User — Marc Post File Processor
if(npoints.ne.0) then
do ijk=1,npoints
read(binary) ipnt(ijk),(xpnt(ijl,ijk),ijl=1,3)
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) ncurves
if(ncurves.ne.0) then
do ijk=1,ncurves
read(formatted,’(6i13)’) (icurvinf(ijl),ijl=1,6)
icrv(ijk)=icurvinf(1)
Main Index
Main Index
466 Marc Volume D: User Subroutines and Special Routines
lct=icurvinf(2)
npu=icurvinf(3)
nou=icurvinf(4)
nrx=3
if(lct.eq.6) nrx=5
read(formatted,’(6e13.6)’) (xhomog(ijl),ijl=1,npu)
lss=npu+nou
read(formatted,’(6e13.6)’) (xknot(ijl),ijl=1,lss)
if(lct.eq.-4) then
read(formatted,’(6i13)’) (jpnt(ijl),ijl=1,npu)
elseif(lct.eq.-6) then
do itp=1,npu
read(formatted,’(i13,2e13.6)’) itpid,xiso,yiso
enddo
elseif(lct.eq.4) then
do itp=1,npu
read(formatted,’(5e13.6)’) (xpnt(kk1),kk1=1,3)
enddo
elseif(lct.eq.6) then
do itp=1,npu
read(formatted,’(5e13.6)’) (xtrim(kk1),kk1=1,3),xiso,yiso
enddo
endif
enddo
endif
read(formatted,’(a5)’) blkend
Main Index
Main Index
CHAPTER 9 467
Special Routines User — Marc Post File Processor
write(blkbegin,’(70a1)’) blkbegin
read(binary) ncurves
if(ncurves.ne.0) then
do ijk=1,ncurves
read(binary) (icurvinf(ijl),ijl=1,6)
icrv(ijk)=icurvinf(1)
lct=icurvinf(2)
npu=icurvinf(3)
nou=icurvinf(4)
nrx=3
if(lct.eq.6) nrx=5
read(binary) (xhomog(ijl),ijl=1,npu)
lss=npu+nou
read(binary) (xknot(ijl),ijl=1,lss)
if(lct.eq.-4) then
read(binary) (jpnt(ijl),ijl=1,npu)
elseif(lct.eq.-6) then
do itp=1,npu
read(binary)itpid,xiso,yiso
enddo
elseif(lct.eq.4) then
do itp=1,npu
read(binary) (xpnt(kk1),kk1=1,3)
enddo
Main Index
Main Index
468 Marc Volume D: User Subroutines and Special Routines
elseif(lct.eq.6) then
do itp=1,npu
read(binary) (xtrim(kk1),kk1=1,3),xiso,yiso
enddo
endif
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
points
defined points
Main Index
Main Index
CHAPTER 9 469
Special Routines User — Marc Post File Processor
surface
blkend = =end=
**************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nsurfaces
if(nsurfaces.ne.0) then
do ijk=1,nsurfaces
read(formatted,’(6i13)’) (isurfinf(ijl),ijl=1,7)
icrv(ijk)=isurfinf(1)
lct=isurfinf(2)
npu=isurfinf(3)
nou=isurfinf(4)
npv=isurfinf(5)
nov=isurfinf(6)
ntrim=isurfinf(7)
Main Index
Main Index
470 Marc Volume D: User Subroutines and Special Routines
nnnn=npu*npv
read(formatted,’(6e13.6)’) (xhomog(ijl),ijl=1,nnnn)
lss=npu+nou+npv+nov
read(formatted,’(6e13.6)’) (xknot(ijl),ijl=1,lss)
if(lct.eq.-9) then
read(formatted,’(6i13)’) (jpnt(ijl),ijl=1,nnnn)
elseif(lct.eq.9) then
do itp=1,nnnn
read(formatted,’(3e13.6)’) (xpnt(kk1),kk1=1,3)
enddo
endif
if(ntrim.ne.0) then
read(formatted,’(6i13)’) (jtrmcv(ijl),ijl=1,ntrim)
endif
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) nsurfaces
if(nsurfaces.ne.0) then
do ijk=1,npoints
read(binary) (isurfinf(ijl),ijl=1,7)
Main Index
Main Index
CHAPTER 9 471
Special Routines User — Marc Post File Processor
icrv(ijk)=isurfinf(1)
lct=isurfinf(2)
npu=isurfinf(3)
nou=isurfinf(4)
npv=isurfinf(5)
nov=isurfinf(6)
ntrim=isurfinf(7)
nnnn=npu*npv
read(binary) (xhomog(ijl),ijl=1,nnnn)
lss=npu+nou+npv+nov
read(binary) (xknot(ijl),ijl=1,lss)
if(lct.eq.-9) then
read(binary) (jpnt(ijl),ijl=1,nnnn)
elseif(lct.eq.9) then
do itp=1,nnnn
read(binary) (xpnt(kk1),kk1=1,3)
enddo
endif
if(ntrim.ne.0) then
read(binary) (jtrmcv(ijl),ijl=1,ntrim)
endif
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
472 Marc Volume D: User Subroutines and Special Routines
jtrmcv = array of curve ids that are the trimming curves for this
surface
blkend = =end=
**************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) natpts
if(natpts.ne.0) then
do ijk=1,natpts
Main Index
Main Index
CHAPTER 9 473
Special Routines User — Marc Post File Processor
read(formatted,’(6i13)’) jpoint(ijk),jnode(ijk)
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) natpts
if(natpts.ne.0) then
do ijk=1,natpts
read(binary) jpoint(ijk),jnode(ijk)
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
**************************
Main Index
Main Index
474 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) ncvwedat
if(ncvwedat.ne.0) then
do ijk=1,ncvwedat
read(formatted,’(6i13)’) icurvid,nedgat
read(formatted,’(6i13)’) (lelem(ilm),ilm=1,nedgat)
read(formatted,’(6i13)’) (ledge(ilm),ilm=1,nedgat)
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) ncvwedat
if(ncvwedat.ne.0) then
do ijk=1,ncvwedat
read(binary) icurvid,nedgat
read(binary) (lelem(ilm),ilm=1,nedgat)
read(binary) (ledge(ilm),ilm=1,nedgat)
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
CHAPTER 9 475
Special Routines User — Marc Post File Processor
icurvid = curve id
blkend = =end=
**************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nsfwfcat
if(nsfwfcat.ne.0) then
do ijk=1,nsfwfcat
read(formatted,’(6i13)’) isurfid,nfaceat
read(formatted,’(6i13)’) (lelem(ilm),ilm=1,nfaceat)
read(formatted,’(6i13)’) (lface(ilm),ilm=1,nfaceat)
enddo
endif
read(formatted,’(a5)’) blkend
Main Index
Main Index
476 Marc Volume D: User Subroutines and Special Routines
write(blkbegin,’(70a1)’) blkbegin
read(binary) nsfwfcat
if(nsfwfcat.ne.0) then
do ijk=1,nsfwfcat
read(binary) isurfid,nfaceat
read(binary) (lelem(ilm),ilm=1,nfaceat)
read(binary) (lface(ilm),ilm=1,nfaceat)
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
isurfid = surface id
blkend = =end=
*********************************
Main Index
Main Index
CHAPTER 9 477
Special Routines User — Marc Post File Processor
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nbcs
if(nbcs.ne.0) then
do ijk=1,nbcs
read(formatted,’(32a1)’) (ibcname(ilm),ilm=1,32)
read(formatted,’(6i13)’) (ibcinfo(ilm),ilm=1,9)
ltyp =ibcinfo(1)
lmode =ibcinfo(2)
lmact =ibcinfo(3)
lmharm=ibcinfo(4)
lmng =ibcinfo(5)
lmread=ibcinfo(7)
lmreal=ibcinfo(8)
lmdim =ibcinfo(9)
read(formatted,’(6e13)’) ( rload(ilm),ilm=1,lmreal)
read(formatted,’(6i13)’) (itrload(ilm),ilm=1,lmreal)
if(lmharm.gt.0) then
read(formatted,’(6e13)’) ( cload(ilm),ilm=1,lmreal)
read(formatted,’(6i13)’) (itcload(ilm),ilm=1,lmreal)
endif
if(lmdim.ne.0) then
read(formatted,’(6i13)’) (lm(ilm),ilm=1,lmdim)
endif
do kk2=1,lmng
read(formatted,’(6i13)’) igid,igtype
read(formatted,’(80a1)’) (kbcline(ilm),ilm=1,80)
Main Index
Main Index
478 Marc Volume D: User Subroutines and Special Routines
enddo
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(formatted) nbcs
if(nbcs.ne.0) then
do ijk=1,nbcs
read(formatted) (ibcname(ilm),ilm=1,32)
read(formatted) (ibcinfo(ilm),ilm=1,9)
ltyp =ibcinfo(1)
lmode =ibcinfo(2)
lmact =ibcinfo(3)
lmharm=ibcinfo(4)
lmng =ibcinfo(5)
lmread=ibcinfo(7)
lmreal=ibcinfo(8)
lmdim =ibcinfo(9)
read(formatted) ( rload(ilm),ilm=1,lmreal)
read(formatted) (itrload(ilm),ilm=1,lmreal)
if(lmharm.gt.0) then
read(formatted) ( cload(ilm),ilm=1,lmreal)
Main Index
Main Index
CHAPTER 9 479
Special Routines User — Marc Post File Processor
read(formatted) (itcload(ilm),ilm=1,lmreal)
endif
if(lmdim.ne.0) then
read(formatted) (lm(ilm),ilm=1,lmdim)
endif
do kk2=1,lmng
read(formatted) igid,igtype
read(formatted) (kbcline(ilm),ilm=1,80)
enddo
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
=1 mechanical displacements-pressure
=2 temperature temperature-fluxes
=3 magnetic voltage-current
=4 electrical potential-charge
=7 acoustics pressure-source
Main Index
Main Index
480 Marc Volume D: User Subroutines and Special Routines
=1 fixed
=2 point
=3 distributed
=4 foundation
=5 initial displacement/temperature/pressure
=7 initial acceleration
=9 hold node
=14 porosity
Main Index
Main Index
CHAPTER 9 481
Special Routines User — Marc Post File Processor
1= element ids
2= node ids
3= volume
4= surface
5= curve
6= point
7= element set
8= node set
9= polycurve
10= polysurface
11= element-edge
Main Index
Main Index
482 Marc Volume D: User Subroutines and Special Routines
12= element-face
15= cavity
16= surface-edge
17= curve-face
blkend = =end=
*************************
if(nsprng.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,nsprng
read(formatted,’(5i13)’) (ispr(ijl,ijk),ijl=1,5)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,nsprng
read(binary) id,node1,idof1,node2,idof2
enddo
Main Index
Main Index
CHAPTER 9 483
Special Routines User — Marc Post File Processor
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
blkend = =end=
***********************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) (inoco(ijl),ijl=1,numnp)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (inoco(ijl),ijl=1,numnp)
read(binary) (iend(ijk),ijk=1,5)
Main Index
Main Index
484 Marc Volume D: User Subroutines and Special Routines
write(blkbegin,’(5a1)’) blkend
blkend = =end=
*********************************
if(nadtie.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,nadtie
read(formatted,’(2i13)’) ityp,iret
read(formatted,’(6i13)’) (nodes(ijl),ijl=1,iret)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,nadtie
read(binary) ityp,iret
read(binary) (nodes(ijl),ijl=1,iret)
enddo
Main Index
Main Index
CHAPTER 9 485
Special Routines User — Marc Post File Processor
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
91 : nodes(1)=0.5 *(nodes(2)+nodes(3))
92 : nodes(1)=0.25*(nodes(2)+nodes(3)+nodes(4)+nodes(5))
blkend = =end=
*************************************
if(nbctra.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,nbctra
read(formatted,’(6e13.6)’) ((d(i1,i2),i1=1,3),i2=1,3)
enddo
Main Index
Main Index
486 Marc Volume D: User Subroutines and Special Routines
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,nbctra
read(binary) ((d(i1,i2),i1=1,3),i2=1,3)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
****************************
read(formatted,’(a70)’) blkbegin
do ijk=1,nset
read(formatted,’(a12)’) setnam
read(formatted,’(2i13.6)’) isetn,isett
if(isetn.ne.0) then
Main Index
Main Index
CHAPTER 9 487
Special Routines User — Marc Post File Processor
read(formatted,’(6i13)’) (nsett(ijl),ijl=1,isetn)
if(isett.eq.12.or.isett.eq.13.or.
* isett.eq.18.or.isett.eq.19)
* read(formatted,’(6i13)’) (nsettf(ijl),ijl=1,isetn)
endif
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,nset
read(binary) (isetnam(ijl),ijl=1,12)
write(setnam,’(12a1)’) (isetnam(ijl),ijl=1,12)
read(binary) isetn,isett
if(isetn.ne.0) then
read(binary) (nsett(ijl),ijl=1,isetn)
if(isett.eq.12.or.isett.eq.13.or.
* isett.eq.18.or.isett.eq.19)
* read(binary) (nsettf(ijl),ijl=1,isetn)
endif
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
488 Marc Volume D: User Subroutines and Special Routines
0 : element set
1 : node set
blkend = =end=
****************************
if(postrv.gt.10) then
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nset
do ijk=1,nset
read(formatted,’(a32)’) setnam
read(formatted,’(2i13.6)’) isetn,isett
if(isetn.ne.0) then
read(formatted,’(6i13)’) (nsett(ijl),ijl=1,isetn)
if(isett.eq.12.or.isett.eq.13)
read(formatted,’(6i13)’) (nsett(ij1).ij1=1,isetn)
endif
Main Index
Main Index
CHAPTER 9 489
Special Routines User — Marc Post File Processor
endif
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,nset
read(binary) (isetnam(ijl),ijl=1,32)
write(setnam,’(32a1)’) (isetnam(ijl),ijl=1,32)
read(binary) isetn,isett
if(isetn.ne.0) then
read(binary) (nsett(ijl),ijl=1,isetn)
if(isett.eq.12.or.isett.eq.13.or.isett.eq.18.or.isett.eq.19)
then
read(binary) (neddt(ij1),ij1=1,isetn)
endif
endif
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
490 Marc Volume D: User Subroutines and Special Routines
0 : element set
1 : node set
blkend = =end=
***********************************
if(ndie.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,ndie
if(ipstk2.lt.8) then
read(formatted,’(3i13)’) ibody,itype,nitems
Main Index
Main Index
CHAPTER 9 491
Special Routines User — Marc Post File Processor
else
read(formatted,’(4i13)’) ibody,itype,nitems,istruc
read(formatted,’(a24)’) bdname
read(formatted,(6e13.6)’)
(pos(ij1),ij1-1,3),(rot(ij1),ij1=1,3)
endif
if(itype,ne.0.or.ipstk2.ge.8) then
if(itype.eq.0) then
read(formatted,’(i13)’) nelem
read(formatted,’(6i13)’) (ielem(ijl),ijl=1,nelem)
endif
if(itype.eq.1) then
do ijl=1,nitems
read(formatted’(2i13)’) npatch,npoint
do ijm=1,npatch
read(formatted’(4i13)’) ipatn,ipatt,ip1,ip2
enddo
do ijm=1,npoint
read(formatted’(i13,2e13.6)’) ipoint,xp,yp
enddo
enddo
endif
if(ibody.eq.2) then
do ijl=1,nitems
read(formatted’(2i13)’) npatch,npoint
do ijm=1,npatch
Main Index
Main Index
492 Marc Volume D: User Subroutines and Special Routines
read(formatted’(6i13)’) ipatn,ipatt,ip1,ip2,ip3,ip4
enddo
do ijm=1,npoint
read(formatted’(i13,3e13.6)’) ipoint,xp,yp,zp
enddo
enddo
endif
if(ibody.eq.3) then
do ijl=1,nitems
read(formatted,’(6i13)’) nurbid,kpt,idum3,kor,idum5,idum6
do ijm=1,kpt
read(formatted,’(3e13.6)’) xp,yp,zp
enddo
read(formatted,’(6e13.6)’) (homo(ijm),ijm=1,kpt)
read(formatted,’(6e13.6)’) (xnot(ijm),ijm=1,kpt+kor)
enddo
endif
if(ibody.eq.4) then
do ijl=1,nitems
read(formatted,’(6i13)’) nurbid,nptu,nptv,noru,norv,itrim
do ijm=1,nptu*nptv
read(formatted,’(3e13.6)’) xp,yp,zp
enddo
read(formatted,’(6e13.6)’) (homo(ijm),ijm=1,nptu*nptv)
read(formatted,’(6e13.6)’)
(xnot(ijm),ijm=1,nptu+noru+nptv+norv)
do ijm=1,itrim
Main Index
Main Index
CHAPTER 9 493
Special Routines User — Marc Post File Processor
read(formatted,’(6i13)’) itriid,kpt,idum3,idum4,idum5,idum6
do ijl=1,kpt
read(formatted,’(3e13.6)’) xp,yp,zp
enddo
enddo
enddo
endif
endif
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,ndie
if(ipstk2.lt.8) then
read(binary) ibody,itype,nitems
else
read(binary) ibody,itype,nitems,istruc
read(binary) (ibdname(ij1),ij1=1,24)
write(bdname,’(24a1)’) (ibdname(ij1),ij1=1,24)
read(binary) (pos(ij1),ij1=1,3),(rot(ij1),ij1=1,3)
endif
if(itype.ne.0.or.ipstk2.ge.8) then
if(ibody.eq.0) then
read(binary) nelem
read(binary) (ielem(ijl),ijl=1,nelem)
Main Index
Main Index
494 Marc Volume D: User Subroutines and Special Routines
endif
if(ibody.eq.1) then
do ijl=1,nitems
read(binary) npatch,npoint
do ijm=1,npatch
read(binary) ipatn,ipatt,ip1,ip2
enddo
do ijm=1,npoint
read(binary) ipoint,xp,yp,zp
enddo
enddo
endif
if(ibody.eq.2) then
do ijl=1,nitems
read(binary) npatch,npoint
do ijm=1,npatch
read(binary) ipatn,ipatt,ip1,ip2,ip3,ip4
enddo
do ijm=1,npoint
read(binary) ipoint,xp,yp,zp
enddo
enddo
endif
if(ibody.eq.3) then
do ijl=1,nitems
read(binary) nurbid,kpt,idum3,kor,idum5,idum6
Main Index
Main Index
CHAPTER 9 495
Special Routines User — Marc Post File Processor
do ijm=1,kpt
read(binary) xp,yp,zp
enddo
read(binary) (homo(ijm),ijm=1,kpt)
read(binary) (xnot(ijm),ijm=1,kpt+kor)
enddo
endif
if(ibody.eq.4) then
do ijl=1,nitems
read(binary) nurbid,nptu,nptv,noru,norv,itrim
do ijm=1,nptu*nptv
read(binary) xp,yp,zp
enddo
read(binary) (homo(ijm),ijm=1,nptu*nptv)
read(binary) (xnot(ijm),ijm=1,nptu+noru+nptv+norv)
do ijm=1,itrim
read(binary) itriid,kpt,idum3,idum4,idum5,idum6
do ijl=1,kpt
read(binary) xp,yp,zp
enddo
enddo
enddo
endif
endif
enddo
Main Index
Main Index
496 Marc Volume D: User Subroutines and Special Routines
endif
0 : deformable
3 : 2d curves
4 : 3d surfaces
1 : rigid
2 : deformable structural
3 : symmetry
4 : deformable heat-rigid
6 : deformable acoustic
Main Index
Main Index
CHAPTER 9 497
Special Routines User — Marc Post File Processor
blkend = =end=
****************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) numcrgr,numndgr,ngrid,idum4,idum5,idum6
Main Index
Main Index
498 Marc Volume D: User Subroutines and Special Routines
do ijk=1,ngrid
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) numcrgr,numndgr,ngrid,idum4,idum5,idum6
do ijk=1,ngrid
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
Main Index
Main Index
CHAPTER 9 499
Special Routines User — Marc Post File Processor
*******************************************************
read(formatted,’(a4)’) csee
read(binary) isee
write(csee,’(a4)’) isee
csee = indicator
****************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(a70)’) title(1:70)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (ititle(ijk),ijk=1,70)
write(title(1:70),’(70a1)’) (ititle(ijk),ijk=1,70)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
500 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
*************************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) (lm(ijk),ijk=1,12)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (lm(ijk),ijk=1,12)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
1 : new mesh
Main Index
Main Index
CHAPTER 9 501
Special Routines User — Marc Post File Processor
0 : normal
1 : modal result
2 : buckle result
blkend = =end=
**********************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6e13.6)’) (xlm(ijk),ijk=1,6)
read(binary) (ibeg(ijk),ijk=1,70)
Main Index
Main Index
502 Marc Volume D: User Subroutines and Special Routines
write(blkbegin,’(70a1)’) blkbegin
read(binary) (xlm(ijk),ijk=1,6)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
xlm( 2) =
xlm( 3) =
xlm( 4) =
xlm( 5) =
blkend = =end=
**********************************************
Main Index
Main Index
CHAPTER 9 503
Special Routines User — Marc Post File Processor
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) nw
read(formatted,’(6e13.6)’) (xlm(ijk),ijk=1,nw)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nw
read(binary) (xlm(ijk),ijk=1,nw)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
xlm( 2) =
xlm( 3) =
xlm( 4) =
xlm( 5) =
Main Index
Main Index
504 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
Note: nw = 18
***********************
if(newmo.ne.0) then
Main Index
Main Index
CHAPTER 9 505
Special Routines User — Marc Post File Processor
endif
********************************************
if(ndistl.gt.0) then
read(formatted,’(a70)’) blkbegin
read(formatted,’(6e13.6)’) (dist(ijk),ijk=1,ndistl)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (dist(ijk),ijk=1,ndistl)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
506 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
****************************************
if(nsprng.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,nsprng
read(formatted,’(6e13.6)’) force1,force2
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,nsprng
read(binary) force1,force2
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
CHAPTER 9 507
Special Routines User — Marc Post File Processor
blkend = =end=
**********************************
if(ndie.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,ndie
read(formatted,’(6e13.6)’) (ddat(ijk),ijk=1,36)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,ndie
read(binary) (ddat(ijk),ijk=1,36)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
508 Marc Volume D: User Subroutines and Special Routines
endif
ddat( 1) - ddat( 3) =
ddat( 7) - ddat( 9) =
ddat(13) - ddat(15) =
ddat(16) - ddat(18) =
ddat(19) - ddat(34) =
blkend = =end=
Main Index
Main Index
CHAPTER 9 509
Special Routines User — Marc Post File Processor
**********************************************
if(jantyp.gt.100.and.npost.gt.0.and.numel.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,numel
do ijl=1,nstres
read(formatted,’(6e13.6)’) (elvar(ijk),ijk=1,npost)
enddo
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,numel
do ijl=1,nstres
read(binary) (elvar(ijk),ijk=1,npost)
enddo
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
510 Marc Volume D: User Subroutines and Special Routines
point ijl
blkend = =end=
***************************
if(jantyp.ne.60.and.jantyp.ne.61.and.knod.gt.0) then
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) nnqnod,nnvnod
do ijk=1,nnqnod
read(formatted,’(a48)’) cnam
read(formatted,’(6i13)’) (ivec(ijk),ijk=1,12)
nd=0
if(ivec(7).eq.-1) nd=numnp*ivec(4)
if(nd.gt.0) then
read(formatted,’(6e13.6)’) (vecr(ijl),ijl=1,nd)
if(ivec(6).eq.4.or.ivec(6).eq.5) then
read(formatted,’(6e13.6)’) (veci(ijl),ijl=1,nd)
Main Index
Main Index
CHAPTER 9 511
Special Routines User — Marc Post File Processor
endif
endif
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nnqnod,nnvnod
do ijk=1,nnqnod
read(binary) (inam(ijl),ijl=1,48)
write(cnam,’(48a1)’) (inam(ijl),ijl=1,48)
read(binary) (ivec(ijk),ijk=1,12)
nd=0
if(ivec(7).eq.-1) nd=numnp*ivec(4)
if(nd.gt.0) then
read(binary) (vecr(ijl),ijl=1,nd)
if(ivec(6).eq.4.or.ivec(6).eq.5) then
read(binary) (veci(ijl),ijl=1,nd)
endif
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
512 Marc Volume D: User Subroutines and Special Routines
ivec( 2) =
ivec( 3) =
ivec( 5) =
0 : normal
1 : modal
2 : buckle
3 : real harmonic
Main Index
Main Index
CHAPTER 9 513
Special Routines User — Marc Post File Processor
blkend = =end=
1 = Displacement
2 = Rotation
3 = External Force
4 = External Moment
5 = Reaction Force
6 = Reaction Moment
7 = Fluid Velocity
8 = Fluid Pressure
11 = Sound Pressure
14 = Temperature
17 = Electric Potential
20 = Magnetic Potential
Main Index
Main Index
514 Marc Volume D: User Subroutines and Special Routines
23 = Pore Pressure
26 = Bearing Pressure
27 = Bearing Force
28 = Velocity
29 = Rotational Velocity
30 = Acceleration
31 = Rotational Acceleration
32 = Modal Mass
38 = Contact Status
40 = Herrmann Variable
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cc
*****************************
if(jantyp.eq.60) then
Main Index
Main Index
CHAPTER 9 515
Special Routines User — Marc Post File Processor
read(formatted,’(a70)’) blkbegin
read(formatted,’(6e13.6)’) (respon(ijk),ijk=1,ndsvar)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (respon(ijk),ijk=1,ndsvar)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
blkend = =end=
**********************************************
if(jantyp.eq.60) then
read(formatted,’(a70)’) blkbegin
Main Index
Main Index
516 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(6e13.6)’) (elcon(ijk),ijk=1,numel)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (elcon(ijk),ijk=1,numel)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
blkend = =end=
************************************
if(jantyp.eq.61) then
read(formatted,’(a70)’) blkbegin
read(formatted,’(6e13.6)’) (desvar(ijk),ijk=1,ndsvar)
Main Index
Main Index
CHAPTER 9 517
Special Routines User — Marc Post File Processor
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (desvar(ijk),ijk=1,ndsvar)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
blkend = =end=
********************************
if(numndgr.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,numndgr
enddo
Main Index
Main Index
518 Marc Volume D: User Subroutines and Special Routines
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,numndgr
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
blkend = =end=
********************************
if(postrv.ge.11) then
read(formatted,’(a70)’) blkbegin
Main Index
Main Index
CHAPTER 9 519
Special Routines User — Marc Post File Processor
read(formatted,’(2i13)’) inumv,inumt
do ijk=1,inumv
read(formatted,’(a48)’) globename(ijk)
read(formatted,’(6i13)’) ityp,id2,inum,nnum,id5,id6
read(formatted,’(6e13.6)’) (xlm(ijl),ijl=1,nnum)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,inumv
read(binary) (inam(ijl)’),ijl=1,48)
write(globnam,’48a1)’) (inam(ijl),ijl=1,48)
read(binary) ityp,id2,inum,nnum,id5,id6
read(binary) (xlm(ijl)’),ijl=1,nnum)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
520 Marc Volume D: User Subroutines and Special Routines
1=Cavity Pressure
2=Cavity volume
4=Cavity Mass
5=Cavity Temperature
6=Throat Coordinate
blkend = =end=
*************************************
read(formatted,’(a4)’) csee
read(binary) isee
write(csee,’(a4)’) isee
csee = indicator
Main Index
Main Index
CHAPTER 9 521
Special Routines User — Marc Post File Processor
****************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(a70)’) title(1:70)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (ititle(ijk),ijk=1,70)
write(title(1:70),’(70a1)’) (ititle(ijk),ijk=1,70)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
Main Index
Main Index
522 Marc Volume D: User Subroutines and Special Routines
****************************************
read(formatted,'(a70)') blkbegin
read(formatted,'(6i13)') (lm(ijk),ijk=1,6)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,'(70a1)') blkbegin
read(binary) (lm(ijk),ijk=1,6)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,'(5a1)') blkend
blkend = =end=
Main Index
Main Index
CHAPTER 9 523
Special Routines User — Marc Post File Processor
***********************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) nprocd,idomit
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nprocd,idomit
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
****************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(2i13)’) npost
do ijk=1,npost
read(formatted,’(i13,a48)’) ipost,cpost
Main Index
Main Index
524 Marc Volume D: User Subroutines and Special Routines
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) npost
do ijk=1,npost
read(binary) ipost,(iname(ijl),ijl=1,48)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
*******************************
read(formatted,'(a70)') blkbegin
read(formatted,'(i13)') neltyp
Main Index
Main Index
CHAPTER 9 525
Special Routines User — Marc Post File Processor
do j=1,neltyp
read(formatted,'(6i13)') (lm(i),i=1,8)
read(formatted,'(2i13)') npvars(j),nintps(j)
ityps(lm(1))=j
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,'(70a1)') blkbegin
read(binary) neltyp
do j=1,neltyp
read(binary) (lm(i),i=1,8)
read(binary) npvars(j),nintps(j)
ityps(lm(1))=j
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,'(5a1)') blkend
Main Index
Main Index
526 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(2i13)’) numelp,nnodmx
do j=1,numelp
read(formatted,’(6i13)’)
ielid,ityp,nnod,(iel(ijl),ijl=1,nnodmx)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) numelp,nnodmx
do j=1,numelp
Main Index
Main Index
CHAPTER 9 527
Special Routines User — Marc Post File Processor
read(binary) ielid,ityp,nnod,(iel(ijl),ijl=1,nnodmx)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
*******************************
read(formatted,’(a70)’) blkbegin
do ijk=1,numnp
read(formatted,’(i13,5e13.6,/,6e13.6)’)
inod(ijk),(xord(ijl,ijk),ijl=1,ncrd)
enddo
Main Index
Main Index
528 Marc Volume D: User Subroutines and Special Routines
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,numnp
read(binary) inod(ijk),(xord(ijl,ijk),ijl=1,ncrd)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) npoints
if(npoints.ne.0) then
do ijk=1,npoints
read(formatted,’(i13,3e13.6)’) ipnt(ijk),(xpnt(ijl,ijk),ijl=1,3)
Main Index
Main Index
CHAPTER 9 529
Special Routines User — Marc Post File Processor
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) npoints
if(npoints.ne.0) then
do ijk=1,npoints
read(binary) ipnt(ijk),(xpnt(ijl,ijk),ijl=1,3)
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
************************
Main Index
Main Index
530 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) ncurves
if(ncurves.ne.0) then
do ijk=1,ncurves
read(formatted,’(6i13)’) (icurvinf(ijl),ijl=1,6)
icrv(ijk)=icurvinf(1)
lct=icurvinf(2)
npu=icurvinf(3)
nou=icurvinf(4)
nrx=3
if(lct.eq.6) nrx=5
read(formatted,’(6e13.6)’) (xhomog(ijl),ijl=1,npu)
lss=npu+nou
read(formatted,’(6e13.6)’) (xknot(ijl),ijl=1,lss)
if(lct.eq.-4) then
read(formatted,’(6i13)’) (jpnt(ijl),ijl=1,npu)
elseif(lct.eq.-6) then
do itp=1,npu
read(formatted,’(i13,2e13.6)’) itpid,xiso,yiso
enddo
elseif(lct.eq.4) then
do itp=1,npu
read(formatted,’(5e13.6)’) (xpnt(kk1),kk1=1,3)
enddo
elseif(lct.eq.6) then
do itp=1,npu
Main Index
Main Index
CHAPTER 9 531
Special Routines User — Marc Post File Processor
read(formatted,’(5e13.6)’) (xtrim(kk1),kk1=1,3),xiso,yiso
enddo
endif
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) ncurves
if(ncurves.ne.0) then
do ijk=1,ncurves
read(binary) (icurvinf(ijl),ijl=1,6)
icrv(ijk)=icurvinf(1)
lct=icurvinf(2)
npu=icurvinf(3)
nou=icurvinf(4)
nrx=3
if(lct.eq.6) nrx=5
read(binary) (xhomog(ijl),ijl=1,npu)
lss=npu+nou
read(binary) (xknot(ijl),ijl=1,lss)
if(lct.eq.-4) then
read(binary) (jpnt(ijl),ijl=1,npu)
Main Index
Main Index
532 Marc Volume D: User Subroutines and Special Routines
elseif(lct.eq.-6) then
do itp=1,npu
read(binary)itpid,xiso,yiso
enddo
elseif(lct.eq.4) then
do itp=1,npu
read(binary) (xpnt(kk1),kk1=1,3)
enddo
elseif(lct.eq.6) then
do itp=1,npu
read(binary) (xtrim(kk1),kk1=1,3),xiso,yiso
enddo
endif
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
defined points
Main Index
Main Index
CHAPTER 9 533
Special Routines User — Marc Post File Processor
surface
blkend = =end=
**************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nsurfaces
if(nsurfaces.ne.0) then
do ijk=1,nsurfaces
read(formatted,’(6i13)’) (isurfinf(ijl),ijl=1,7)
icrv(ijk)=isurfinf(1)
lct=isurfinf(2)
Main Index
Main Index
534 Marc Volume D: User Subroutines and Special Routines
npu=isurfinf(3)
nou=isurfinf(4)
npv=isurfinf(5)
nov=isurfinf(6)
ntrim=isurfinf(7)
nnnn=npu*npv
read(formatted,’(6e13.6)’) (xhomog(ijl),ijl=1,nnnn)
lss=npu+nou+npv+nov
read(formatted,’(6e13.6)’) (xknot(ijl),ijl=1,lss)
if(lct.eq.-9) then
read(formatted,’(6i13)’) (jpnt(ijl),ijl=1,nnnn)
elseif(lct.eq.9) then
do itp=1,nnnn
read(formatted,’(3e13.6)’) (xpnt(kk1),kk1=1,3)
enddo
endif
if(ntrim.ne.0) then
read(formatted,’(6i13)’) (jtrmcv(ijl),ijl=1,ntrim)
endif
enddo
endif
read(formatted,’(a5)’) blkend
Main Index
Main Index
CHAPTER 9 535
Special Routines User — Marc Post File Processor
write(blkbegin,’(70a1)’) blkbegin
read(binary) nsurfaces
if(nsurfaces.ne.0) then
do ijk=1,npoints
read(binary) (isurfinf(ijl),ijl=1,7)
icrv(ijk)=isurfinf(1)
lct=isurfinf(2)
npu=isurfinf(3)
nou=isurfinf(4)
npv=isurfinf(5)
nov=isurfinf(6)
ntrim=isurfinf(7)
nnnn=npu*npv
read(binary) (xhomog(ijl),ijl=1,nnnn)
lss=npu+nou+npv+nov
read(binary) (xknot(ijl),ijl=1,lss)
if(lct.eq.-9) then
read(binary) (jpnt(ijl),ijl=1,nnnn)
elseif(lct.eq.9) then
do itp=1,nnnn
read(binary) (xpnt(kk1),kk1=1,3)
enddo
endif
if(ntrim.ne.0) then
read(binary) (jtrmcv(ijl),ijl=1,ntrim)
endif
Main Index
Main Index
536 Marc Volume D: User Subroutines and Special Routines
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
jtrmcv = array of curve ids that are the trimming curves for this
surface
blkend = =end=
Main Index
Main Index
CHAPTER 9 537
Special Routines User — Marc Post File Processor
**************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) natpts
if(natpts.ne.0) then
do ijk=1,natpts
read(formatted,’(6i13)’) jpoint(ijk),jnode(ijk)
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) natpts
if(natpts.ne.0) then
do ijk=1,natpts
read(binary) jpoint(ijk),jnode(ijk)
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
538 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
**************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) ncvwedat
if(ncvwedat.ne.0) then
do ijk=1,ncvwedat
read(formatted,’(6i13)’) icurvid,nedgat
read(formatted,’(6i13)’) (lelem(ilm),ilm=1,nedgat)
read(formatted,’(6i13)’) (ledge(ilm),ilm=1,nedgat)
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) ncvwedat
if(ncvwedat.ne.0) then
do ijk=1,ncvwedat
Main Index
Main Index
CHAPTER 9 539
Special Routines User — Marc Post File Processor
read(binary) icurvid,nedgat
read(binary) (lelem(ilm),ilm=1,nedgat)
read(binary) (ledge(ilm),ilm=1,nedgat)
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
icurvid = curve id
blkend = =end=
**************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nsfwfcat
if(nsfwfcat.ne.0) then
do ijk=1,nsfwfcat
read(formatted,’(6i13)’) isurfid,nfaceat
Main Index
Main Index
540 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(6i13)’) (lelem(ilm),ilm=1,nfaceat)
read(formatted,’(6i13)’) (lface(ilm),ilm=1,nfaceat)
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(binary) nsfwfcat
if(nsfwfcat.ne.0) then
do ijk=1,nsfwfcat
read(binary) isurfid,nfaceat
read(binary) (lelem(ilm),ilm=1,nfaceat)
read(binary) (lface(ilm),ilm=1,nfaceat)
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
isurfid = surface id
Main Index
Main Index
CHAPTER 9 541
Special Routines User — Marc Post File Processor
blkend = =end=
*********************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nbcs
if(nbcs.ne.0) then
do ijk=1,nbcs
read(formatted,’(32a1)’) (ibcname(ilm),ilm=1,32)
read(formatted,’(6i13)’) (ibcinfo(ilm),ilm=1,9)
ltyp =ibcinfo(1)
lmode =ibcinfo(2)
lmact =ibcinfo(3)
lmharm=ibcinfo(4)
lmng =ibcinfo(5)
lmread=ibcinfo(7)
lmreal=ibcinfo(8)
lmdim =ibcinfo(9)
read(formatted,’(6e13)’) ( rload(ilm),ilm=1,lmreal)
read(formatted,’(6i13)’) (itrload(ilm),ilm=1,lmreal)
if(lmharm.gt.0) then
read(formatted,’(6e13)’) ( cload(ilm),ilm=1,lmreal)
Main Index
Main Index
542 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(6i13)’) (itcload(ilm),ilm=1,lmreal)
endif
if(lmdim.ne.0) then
read(formatted,’(6i13)’) (lm(ilm),ilm=1,lmdim)
endif
do kk2=1,lmng
read(formatted,’(6i13)’) igid,igtype
read(formatted,’(80a1)’) (kbcline(ilm),ilm=1,80)
enddo
enddo
endif
read(formatted,’(a5)’) blkend
write(blkbegin,’(70a1)’) blkbegin
read(formatted) nbcs
if(nbcs.ne.0) then
do ijk=1,nbcs
read(formatted) (ibcname(ilm),ilm=1,32)
read(formatted) (ibcinfo(ilm),ilm=1,9)
ltyp =ibcinfo(1)
lmode =ibcinfo(2)
lmact =ibcinfo(3)
lmharm=ibcinfo(4)
Main Index
Main Index
CHAPTER 9 543
Special Routines User — Marc Post File Processor
lmng =ibcinfo(5)
lmread=ibcinfo(7)
lmreal=ibcinfo(8)
lmdim =ibcinfo(9)
read(formatted) ( rload(ilm),ilm=1,lmreal)
read(formatted) (itrload(ilm),ilm=1,lmreal)
if(lmharm.gt.0) then
read(formatted) ( cload(ilm),ilm=1,lmreal)
read(formatted) (itcload(ilm),ilm=1,lmreal)
endif
if(lmdim.ne.0) then
read(formatted) (lm(ilm),ilm=1,lmdim)
endif
do kk2=1,lmng
read(formatted) igid,igtype
read(formatted) (kbcline(ilm),ilm=1,80)
enddo
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
544 Marc Volume D: User Subroutines and Special Routines
=1 mechanical displacements-pressure
=2 temperature temperature-fluxes
=3 magnetic voltage-current
=4 electrical potential-charge
=7 acoustics pressure-source
=1 fixed
=2 point
=3 distributed
=4 foundation
=5 initial displacement/temperature/pressure
=7 initial acceleration
=9 hold node
=14 porosity
Main Index
Main Index
CHAPTER 9 545
Special Routines User — Marc Post File Processor
1= element ids
2= node ids
3= volume
Main Index
Main Index
546 Marc Volume D: User Subroutines and Special Routines
4= surface
5= curve
6= point
7= element set
8= node set
9= polycurve
10= polysurface
11= element-edge
12= element-face
15= cavity
16= surface-edge
17= curve-face
blkend = =end=
*************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nsprng
do ijk=1,nsprng
Main Index
Main Index
CHAPTER 9 547
Special Routines User — Marc Post File Processor
read(formatted,’(5i13)’) (ispr(ijl,ijk),ijl=1,5)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nsprng
do ijk=1,nsprng
read(binary) id,node1,idof1,node2,idof2
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
548 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
***********************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) (inoco(ijl),ijl=1,numnp)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (inoco(ijl),ijl=1,numnp)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
Main Index
Main Index
CHAPTER 9 549
Special Routines User — Marc Post File Processor
*********************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nadtie
do ijk=1,nadtie
read(formatted,’(2i13)’) ityp,iret
read(formatted,’(6i13)’) (nodes(ijl),ijl=1,iret)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nadtie
do ijk=1,nadtie
read(binary) ityp,iret
read(binary) (nodes(ijl),ijl=1,iret)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
550 Marc Volume D: User Subroutines and Special Routines
91 : nodes(1)=0.5 *(nodes(2)+nodes(3))
92 : nodes(1)=0.25*(nodes(2)+nodes(3)+nodes(4)+nodes(5))
blkend = =end=
*************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nbctra
do ijk=1,nbctra
read(formatted,’(6e13.6)’) ((d(i1,i2),i1=1,3),i2=1,3)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nbctra
do ijk=1,nbctra
read(binary) ((d(i1,i2),i1=1,3),i2=1,3)
enddo
Main Index
Main Index
CHAPTER 9 551
Special Routines User — Marc Post File Processor
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
****************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) nset
do ijk=1,nset
read(formatted,’(a32)’) setnam
read(formatted,’(2i13.6)’) isetn,isett
if(isetn.ne.0) then
read(formatted,’(6i13)’) (nsett(ijl),ijl=1,isetn)
if(isett.eq.12.or.isett.eq.13)
read(formatted,’(6i13)’) (nsett(ij1).ij1=1,isetn)
endif
endif
enddo
Main Index
Main Index
552 Marc Volume D: User Subroutines and Special Routines
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,nset
read(binary) (isetnam(ijl),ijl=1,32)
write(setnam,’(32a1)’) (isetnam(ijl),ijl=1,32)
read(binary) isetn,isett
if(isetn.ne.0) then
read(binary) (nsett(ijl),ijl=1,isetn)
if(isett.eq.12.or.isett.eq.13.or.isett.eq.18.or.isett.eq.19)
then
read(binary) (neddt(ij1),ij1=1,isetn)
endif
endif
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
0 : element set
1 : node set
Main Index
Main Index
CHAPTER 9 553
Special Routines User — Marc Post File Processor
blkend = =end=
***********************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) ndie
do ijk=1,ndie
read(formatted,’(4i13)’) ibody,itype,nitems,istruc
read(formatted,’(a24)’) bdname
read(formatted,(6e13.6)’) (pos(ij1),ij1-1,3),(rot(ij1),ij1=1,3)
if(itype.eq.0) then
read(formatted,’(i13)’) nelem
read(formatted,’(6i13)’) (ielem(ijl),ijl=1,nelem)
endif
if(itype.eq.1) then
do ijl=1,nitems
read(formatted’(2i13)’) npatch,npoint
Main Index
Main Index
554 Marc Volume D: User Subroutines and Special Routines
do ijm=1,npatch
read(formatted’(4i13)’) ipatn,ipatt,ip1,ip2
enddo
do ijm=1,npoint
read(formatted’(i13,2e13.6)’) ipoint,xp,yp
enddo
enddo
endif
if(ibody.eq.2) then
do ijl=1,nitems
read(formatted’(2i13)’) npatch,npoint
do ijm=1,npatch
read(formatted’(6i13)’) ipatn,ipatt,ip1,ip2,ip3,ip4
enddo
do ijm=1,npoint
read(formatted’(i13,3e13.6)’) ipoint,xp,yp,zp
enddo
enddo
endif
if(ibody.eq.3) then
do ijl=1,nitems
read(formatted,’(6i13)’) nurbid,kpt,idum3,kor,idum5,idum6
do ijm=1,kpt
read(formatted,’(3e13.6)’) xp,yp,zp
enddo
read(formatted,’(6e13.6)’) (homo(ijm),ijm=1,kpt)
Main Index
Main Index
CHAPTER 9 555
Special Routines User — Marc Post File Processor
read(formatted,’(6e13.6)’) (xnot(ijm),ijm=1,kpt+kor)
enddo
endif
if(ibody.eq.4) then
do ijl=1,nitems
read(formatted,’(6i13)’) nurbid,nptu,nptv,noru,norv,itrim
do ijm=1,nptu*nptv
read(formatted,’(3e13.6)’) xp,yp,zp
enddo
read(formatted,’(6e13.6)’) (homo(ijm),ijm=1,nptu*nptv)
read(formatted,’(6e13.6)’)
(xnot(ijm),ijm=1,nptu+noru+nptv+norv)
do ijm=1,itrim
read(formatted,’(6i13)’) itriid,kpt,idum3,idum4,idum5,idum6
do ijl=1,kpt
read(formatted,’(3e13.6)’) xp,yp,zp
enddo
enddo
enddo
endif
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) ndie
Main Index
Main Index
556 Marc Volume D: User Subroutines and Special Routines
do ijk=1,ndie
read(binary) ibody,itype,nitems,istruc
read(binary) (ibdname(ij1),ij1=1,24)
write(bdname,’(24a1)’) (ibdname(ij1),ij1=1,24)
read(binary) (pos(ij1),ij1=1,3),(rot(ij1),ij1=1,3)
if(ibody.eq.0) then
read(binary) nelem
read(binary) (ielem(ijl),ijl=1,nelem)
endif
if(ibody.eq.1) then
do ijl=1,nitems
read(binary) npatch,npoint
do ijm=1,npatch
read(binary) ipatn,ipatt,ip1,ip2
enddo
do ijm=1,npoint
read(binary) ipoint,xp,yp,zp
enddo
enddo
endif
if(ibody.eq.2) then
do ijl=1,nitems
read(binary) npatch,npoint
do ijm=1,npatch
read(binary) ipatn,ipatt,ip1,ip2,ip3,ip4
enddo
Main Index
Main Index
CHAPTER 9 557
Special Routines User — Marc Post File Processor
do ijm=1,npoint
read(binary) ipoint,xp,yp,zp
enddo
enddo
endif
if(ibody.eq.3) then
do ijl=1,nitems
read(binary) nurbid,kpt,idum3,kor,idum5,idum6
do ijm=1,kpt
read(binary) xp,yp,zp
enddo
read(binary) (homo(ijm),ijm=1,kpt)
read(binary) (xnot(ijm),ijm=1,kpt+kor)
enddo
endif
if(ibody.eq.4) then
do ijl=1,nitems
read(binary) nurbid,nptu,nptv,noru,norv,itrim
do ijm=1,nptu*nptv
read(binary) xp,yp,zp
enddo
read(binary) (homo(ijm),ijm=1,nptu*nptv)
read(binary) (xnot(ijm),ijm=1,nptu+noru+nptv+norv)
do ijm=1,itrim
read(binary) itriid,kpt,idum3,idum4,idum5,idum6
do ijl=1,kpt
Main Index
Main Index
558 Marc Volume D: User Subroutines and Special Routines
read(binary) xp,yp,zp
enddo
enddo
enddo
endif
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
0 : deformable
3 : 2d curves
4 : 3d surfaces
1 : rigid
2 : deformable structural
3 : symmetry
4 : deformable heat-rigid
6 : deformable acoustic
Main Index
Main Index
CHAPTER 9 559
Special Routines User — Marc Post File Processor
blkend = =end=
Main Index
Main Index
560 Marc Volume D: User Subroutines and Special Routines
****************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) numcrgr,numndgr,ngrid,idum4,idum5,idum6
do ijk=1,ngrid
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) numcrgr,numndgr,ngrid,idum4,idum5,idum6
do ijk=1,ngrid
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
CHAPTER 9 561
Special Routines User — Marc Post File Processor
blkend = =end=
*******************************************************
read(formatted,’(a4)’) csee
read(binary) isee
write(csee,’(a4)’) isee
csee = indicator
Main Index
Main Index
562 Marc Volume D: User Subroutines and Special Routines
****************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(a70)’) title(1:70)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (ititle(ijk),ijk=1,70)
write(title(1:70),’(70a1)’) (ititle(ijk),ijk=1,70)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
*************************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) (lm(ijk),ijk=1,12)
Main Index
Main Index
CHAPTER 9 563
Special Routines User — Marc Post File Processor
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (lm(ijk),ijk=1,12)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
1 : new mesh
0 : normal
1 : modal result
2 : buckle result
Main Index
Main Index
564 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
**********************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) nw
read(formatted,’(6e13.6)’) (xlm(ijk),ijk=1,nw)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nw
read(binary) (xlm(ijk),ijk=1,nw)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
xlm( 2) =
xlm( 3) =
Main Index
Main Index
CHAPTER 9 565
Special Routines User — Marc Post File Processor
xlm( 4) =
xlm( 5) =
Main Index
Main Index
566 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
Note: nw = 24
***********************
if(newmo.ne.0) then
endif
********************************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(i13)’) ndistl
read(formatted,’(6e13.6)’) (dist(ijk),ijk=1,ndistl)
read(binary) (ibeg(ijk),ijk=1,70)
Main Index
Main Index
CHAPTER 9 567
Special Routines User — Marc Post File Processor
write(blkbegin,’(70a1)’) blkbegin
read(binary) ndistl
read(binary) (dist(ijk),ijk=1,ndistl)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
blkend = =end=
****************************************
if(nsprng.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,nsprng
read(formatted,’(6e13.6)’) force1,force2
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,nsprng
Main Index
Main Index
568 Marc Volume D: User Subroutines and Special Routines
read(binary) force1,force2
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
blkend = =end=
**********************************
if(ndie.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,ndie
read(formatted,’(6e13.6)’) (ddat(ijk),ijk=1,36)
enddo
Main Index
Main Index
CHAPTER 9 569
Special Routines User — Marc Post File Processor
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,ndie
read(binary) (ddat(ijk),ijk=1,36)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
ddat( 1) - ddat( 3) =
ddat( 7) - ddat( 9) =
ddat(13) - ddat(15) =
ddat(16) - ddat(18) =
ddat(19) - ddat(34) =
Main Index
Main Index
570 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
**********************************************
if(jantyp.gt.100.and.npost.gt.0.and.numel.gt.0) then
read(formatted,'(a70)') blkbegin
do k=1,numel
j=jetyp(k)
nstres=nintps(j)
npost=npvars(j)
do ijl=1,nstres
read(formatted,'(6e13.6)') (elvar(ijk),ijk=1,npost)
enddo
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,'(70a1)') blkbegin
do k=1,numel
Main Index
Main Index
CHAPTER 9 571
Special Routines User — Marc Post File Processor
j=jetyp(k)
nstres=nintps(j)
npost=npvars(j)
do ijl=1,nstres
read(binary) (elvar(ijk),ijk=1,npost)
enddo
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,'(5a1)') blkend
endif
blkend = =end=
***************************
Main Index
Main Index
572 Marc Volume D: User Subroutines and Special Routines
if(jantyp.ne.60.and.jantyp.ne.61.and.knod.gt.0) then
read(formatted,’(a70)’) blkbegin
read(formatted,’(6i13)’) nnqnod,nnvnod
do ijk=1,nnqnod
read(formatted,’(a48)’) cnam
read(formatted,’(6i13)’) (ivec(ijk),ijk=1,12)
nd=0
if(ivec(7).eq.-1) nd=numnp*ivec(4)
if(nd.gt.0) then
read(formatted,’(6e13.6)’) (vecr(ijl),ijl=1,nd)
if(ivec(6).eq.4.or.ivec(6).eq.5) then
read(formatted,’(6e13.6)’) (veci(ijl),ijl=1,nd)
endif
endif
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) nnqnod,nnvnod
do ijk=1,nnqnod
read(binary) (inam(ijl),ijl=1,48)
write(cnam,’(48a1)’) (inam(ijl),ijl=1,48)
read(binary) (ivec(ijk),ijk=1,12)
Main Index
Main Index
CHAPTER 9 573
Special Routines User — Marc Post File Processor
nd=0
if(ivec(7).eq.-1) nd=numnp*ivec(4)
if(nd.gt.0) then
read(binary) (vecr(ijl),ijl=1,nd)
if(ivec(6).eq.4.or.ivec(6).eq.5) then
read(binary) (veci(ijl),ijl=1,nd)
endif
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
ivec( 2) =
ivec( 3) =
ivec( 5) =
Main Index
Main Index
574 Marc Volume D: User Subroutines and Special Routines
0 : normal
1 : modal
2 : buckle
3 : real harmonic
blkend = =end=
1 = Displacement
2 = Rotation
3 = External Force
4 = External Moment
5 = Reaction Force
6 = Reaction Moment
7 = Fluid Velocity
Main Index
Main Index
CHAPTER 9 575
Special Routines User — Marc Post File Processor
8 = Fluid Pressure
11 = Sound Pressure
14 = Temperature
17 = Electric Potential
20 = Magnetic Potential
23 = Pore Pressure
26 = Bearing Pressure
27 = Bearing Force
28 = Velocity
29 = Rotational Velocity
30 = Acceleration
31 = Rotational Acceleration
32 = Modal Mass
Main Index
Main Index
576 Marc Volume D: User Subroutines and Special Routines
38 = Contact Status
40 = Herrmann Variable
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
*****************************
if(jantyp.eq.60) then
read(formatted,’(a70)’) blkbegin
read(formatted,’(6e13.6)’) (respon(ijk),ijk=1,ndsvar)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (respon(ijk),ijk=1,ndsvar)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
CHAPTER 9 577
Special Routines User — Marc Post File Processor
blkend = =end=
**********************************************
if(jantyp.eq.60) then
read(formatted,’(a70)’) blkbegin
read(formatted,’(6e13.6)’) (elcon(ijk),ijk=1,numel)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (elcon(ijk),ijk=1,numel)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
578 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
************************************
if(jantyp.eq.61) then
read(formatted,’(a70)’) blkbegin
read(formatted,’(6e13.6)’) (desvar(ijk),ijk=1,ndsvar)
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
read(binary) (desvar(ijk),ijk=1,ndsvar)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
CHAPTER 9 579
Special Routines User — Marc Post File Processor
blkend = =end=
********************************
if(numndgr.gt.0) then
read(formatted,’(a70)’) blkbegin
do ijk=1,numndgr
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,numndgr
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
endif
Main Index
Main Index
580 Marc Volume D: User Subroutines and Special Routines
blkend = =end=
******************************
read(formatted,’(a70)’) blkbegin
read(formatted,’(2i13)’) inumv,inumt
do ijk=1,inumv
read(formatted,’(a48)’) globename(ijk)
read(formatted,’(6i13)’) ityp,id2,inum,nnum,id5,id6
read(formatted,’(6e13.6)’) (xlm(ijl),ijl=1,nnum)
enddo
read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,’(70a1)’) blkbegin
do ijk=1,inumv
read(binary) (inam(ijl)’),ijl=1,48)
write(globnam,’48a1)’) (inam(ijl),ijl=1,48)
Main Index
Main Index
CHAPTER 9 581
Special Routines User — Marc Post File Processor
read(binary) ityp,id2,inum,nnum,id5,id6
read(binary) (xlm(ijl)’),ijl=1,nnum)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,’(5a1)’) blkend
1=Cavity Pressure
2=Cavity volume
4=Cavity Mass
5=Cavity Temperature
6=Throat Coordinate
blkend = =end=
Main Index
Main Index
582 Marc Volume D: User Subroutines and Special Routines
*************************************
read(formatted,’(a4)’) csee
read(binary) isee
write(csee,’(a4)’) isee
csee = indicator
Main Index
Main Index
Chapter 10 Mathematical Utility Routines List
DDOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
INV3X3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
INVERT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
MCPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
PRINCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
SCLA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Main Index
Main Index
584 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 10 Mathematical Utility Routines
Main Index
Main Index
586 Marc Volume D: User Subroutines and Special Routines
This chapter discusses a selection of the mathematical utility routines that may be
called from any subroutine to simplify the program.
Main Index
Main Index
CHAPTER 10 587
Utility Routines List
■ DDOT
Description
Returns the dot product of two vectors.
Format
Utility function DDOT can be used in the following format:
ANS=DDOT(NN,A,IA,B,IB)
where:
Input:
NN number of items in each vector to be used
A first input vector
IA stride in vector A
B second input vector
IB stride in vector B
Required Output:
ANS inner product of vectors A and B
Main Index
Main Index
588 Marc Volume D: User Subroutines and Special Routines
■ GMADD
Matrix Add
Description
Add two matrices and put sum into third matrix.
Format
Utility routine GMADD can be called with the following format:
CALL GMADD (W,X,Y,N,M)
where:
Input:
W first input matrix
X second input matrix
N first dimension of W, X, and Y
M second dimension of W, X, and Y
Required Output:
Y output matrix, Y = W + X
Main Index
Main Index
CHAPTER 10 589
Utility Routines List
■ GMPRD
Matrix Product
Description
Multiply two matrices and put product in third matrix.
Format
Utility routine GMPRD can be called with the following format:
CALL GMPRD (W,X,Y,N,M)
where:
Input:
W first input matrix
X second input matrix
N first dimension of W and Y
M second dimension of W and first dimension of X
L second dimension of X and Y
Required Output:
Y output matrix, Y = W * X
Main Index
Main Index
590 Marc Volume D: User Subroutines and Special Routines
■ GMSUB
Matrix Subtract
Description
Subtract two matrices and put remainder in third matrix.
Format
Utility routine GMSUB can be called with the following format:
CALL GMSUB (W,X,Y,N,M)
where:
Input:
W first input matrix
X second input matrix
N first dimension of W, X, and Y
M second dimension of W, X, and Y
Required Output:
Y output matrix, Y = W – X
Main Index
Main Index
CHAPTER 10 591
Utility Routines List
■ GMTRA
Matrix Transpose
Description
Transpose a matrix.
Format
Utility routine GMTRA can be called with the following format:
CALL GMTRA (W,X,N,M)
where:
Input:
W input matrix
N first dimension of W and second dimension of X
M second dimension of W and first dimension of X
Required Output:
X output matrix X = W T
Main Index
Main Index
592 Marc Volume D: User Subroutines and Special Routines
■ GTPRD
Description
Transpose product of two matrices.
Format
Utility routine GTPRD can be called with the following format:
CALL GTPRD (W,X,Y,N,M.L)
where:
Input:
W first input matrix
X second input matrix
N first dimension of W and X
M second dimension of W and first dimension of Y
L second dimension of X and Y
Required Output:
Y output matrix Y = W T * X
Main Index
Main Index
CHAPTER 10 593
Utility Routines List
■ INVERT
Invert Matrix
Description
Matrix inversion and system solution (for small matrices, 15x15 max).
Format
Utility routine INVERT can be called with the following format:
CALL INVERT (A,N,B,MR,D2,IDIM)
where:
Input:
A input matrix
N number of rows and columns of A, must be less than or equal 15
B array of right-hand side vectors for which the solution is required
MR number of right hand side vectors. If MR = 0 , only inversion is performed
IDIM dimension of A in storage
Required Output:
A inverse of input matrix A
B array of solution vectors
D2 determinant of A
Main Index
Main Index
594 Marc Volume D: User Subroutines and Special Routines
■ INV3X3
Invert 3 x 3 Matrix
Description
Invert 3 x 3 matrices.
Format
Utility routine INV3X3 can be called with the following format:
CALL INV3X3 (A,AINV,DET,IFLAG)
where:
Input:
A input matrix
IFLAG flag for output
Required Output:
A inverse of input matrix A if IFLAG = 1
AINV inverse of input matrix A if IFLAG is not = 1
DET determinant of A
Main Index
Main Index
CHAPTER 10 595
Utility Routines List
■ MCPY
Matrix Copy
Description
Copy a matrix.
Format
Utility routine MCPY can be called with the following format:
CALL MCPY (W,X,N,M,MS)
where:
Input:
W input matrix
N first dimension of W and X
M second dimension of W and X
MS not used
Required Output:
X output matrix, X = W
Main Index
Main Index
596 Marc Volume D: User Subroutines and Special Routines
■ PRINCV
Description
Solves 3 x 3 Eigen problem with Jacobi transformations to find principle values of
stresses and strains.
Format
Utility routine PRINCV can be called with the following format:
CALL PRINCV (PV,R,V,NDI,NSHEAR,ISS,JCR1,JCR2,JCR3)
where:
Input:
V(6) vector of strains or stresses.
NDI number of direct stress or strain components.
NSHEAR number of shear stress or strain components.
ISS flag to indicate whether V is stress or strain.
if ISS = 0, V is stress
if ISS = 1, V is strain
JCR1 set to 0
JCR2 set to 0
JCR3 set to 0
Required Output:
PV(3) vector of principal values
R(3,3) matrix of principal directions
Main Index
Main Index
CHAPTER 10 597
Utility Routines List
■ SCLA
Description
Assign a scalar value to a matrix.
Format
Utility routine SCLA can be called with the following format:
CALL SCLA (W,C,N,M,MS)
where:
Input:
W input matrix
C scalar
N first dimension of W
M second dimension of W
MS not used
Required Output:
W output matrix
Main Index
Main Index
598 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 11 Considerations for Parallel Processing
11 Considerations for
Parallel Processing
J Overview 600
J
Auxiliary Routines 600
J
Sharing Data 604
Main Index
Main Index
600 Marc Volume D: User Subroutines and Special Routines
This chapter describes some special considerations that need to be taken into
account when writing user subroutines for parallel processing.
Overview
In a parallel run with Marc, the finite element mesh is subdivided into domains
where each element is part of one domain. Nodes at the boundary between domains
are present in all domains sharing that boundary. Each domain is run on one process
in the job, normally corresponding to a processor (CPU).
Note: There is a difference between process and processor. A process is run by a processor.
A processor can run multiple processes, but in a parallel analysis, each process is
normally run by one processor for efficiency.
Auxiliary Routines
There are a number of auxiliary routines available for parallel applications.
DOMFLAG
The DOMFLAG subroutine is used for sharing variables between domains. The
variables can be summed, the maximum taken etc. Suppose the variables num1, r1,
and volume have been obtained on each domain. Each domain may have different
values of these variables. Now, the user wants to calculate the largest value of num1
and r1 and the variable volume should be summed over the domains. The code for
doing this would look like:
include ’cdominfo’
ibuff1(1)=num1
dbuff1(1)=r1
dbuff1(2)=volume
itest1(1)=1
itest2(1)=1
itest2(2)=3
call domflag(ibuff1,dbuff1,itest1,itest2,1,2)
num1=ibuff1(1)
r1=dbuff1(1)
volume=dbuff1(2)
This code sets num1 and r2 to the maximum over the domains and sets num1 to the
sum over the domains. The action taken is controlled by the value set to itest1 and
itest2:
Main Index
Main Index
CHAPTER 11 601
Considerations for Parallel Processing
= 0: minimum
= 1: maximum
= 2: average
= 3: sum
The last two arguments of DOMFLAG specify the number of integers and reals,
respectively, that are involved. The arrays ibuff1, dbuff1, itest1, and itest2 are
declared in cdominfo with a range also defined in cdominfo (currently 512). If only
one variable is used, one can skip the use of the arrays, for instance
call domflag(int1,ddummy,3,0,1,0)
for summing int1 over the domains.
Main Index
Main Index
602 Marc Volume D: User Subroutines and Special Routines
Reading Input
Reading input into a user subroutine requires that all domains get access to the data.
This can be accomplished in different ways:
A. The data file is copied to one file for each domain using a unique name and
each domain reads its own file.
B. The parent domain reads the file and sends each line to the child domains.
C. The parent domain reads the whole file, possibly processes the data and
sends the data to the child domains.
Option A has the disadvantage that the user has to copy the file before the job is
started (possibly to remote machines if the job is run on a cluster). With Option B,
the data file remains the same as for a serial run. It can be inefficient for large
amounts of data, though. Option C can be more efficient depending on the type of
data that is processed.
For Option A, it is necessary to create a filename which is unique to each domain.
Suppose a file called yourname.txt contains data that is read from a user subroutine.
For each domain, a copy of the file is made into 1yourname.txt, 2yourname.txt, etc.
These files can be read using the following piece of code:
include 'cdominfo'
include 'jname'
include 'prepro'
include 'machin'
character file*200,line*200
file=dirjid(1:ljid)
length=last_char(file)
if (nprocd.gt.0) then
if(iprcnm.lt.10) then
write(file(length+1:length+2), '(i1)') iprcnm
else
write(file(length+1:length+3), '(i2)') iprcnm
endif
endif
length=last_char(file)
file=file(1:length)//'yourname.txt'
Main Index
Main Index
CHAPTER 11 603
Considerations for Parallel Processing
The string variable dirjid contains the full path to the directory where the Marc
input file is located for each domain. The variable iprcnm (from cdominfo) is the
process (domain) number. The auxiliary function last_char returns the last
nonblank character of a string.
The following code can be used for Option B:
include 'cdominfo'
include 'jname'
include 'prepro'
include 'machin'
character file*200,line*200
c open a file on the parent process (domain 1) only, and send
c each line read to the other domains
c
file='yourname.txt'
iunit=68
iostatus=0
if (iparent.eq.0) then
open(iunit,file=file,access='sequential',
1 status='old',form='formatted',iostat=iostatus)
endif
if (nprocd.gt.0) then
call domflag(iostatus,dummy,3,0,1,0) ! share the status
flag
endif
if (iostatus.gt.0) then
c error in open file, bail out with marc exit 999
call quit(999)
endif
lastread=1
do i=1,100000 ! loop over all lines in the file
iostatus=0
if (iparent.eq.0) then ! only read on parent
read(iunit,'(a80)',iostat=iostatus) line
endif
if (nprocd.gt.0) then
call domflag(iostatus,dummy,3,0,1,0) ! share the status
flag
endif
if (iostatus.ne.0) then
go to 102 ! found end of file
else
if (nprocd.gt.0) call domstring(line)
endif
Main Index
Main Index
604 Marc Volume D: User Subroutines and Special Routines
c
c now "line" is available on all domains
c
write(kou,*) 'line',line(1:last_char(line))
enddo
102 continue
The file is only opened if iparent = 0, which is the case in a serial run and for the
parent process in a parallel run. The code also makes certain that all processes stop
if an error occurs while opening the file. Use is made of the DOMFLAG auxiliary
routine to make sure all domains have the same value of iostatus. The DOMSTRING
routine broadcasts the line read to all domains.
Sharing Data
Since elements are distributed to different domains it is sometimes necessary to
share data. Suppose that the total volume is calculated in a user subroutine by
integrating over all elements. Each domain would then calculate the volume of the
domain. To get the total volume, it is necessary to sum the contributions from all
domains. This can be done with the DOMFLAG auxiliary routine :
include ’cdominfo’
c the variable vol contains the volume of each domain
if (nprocd.gt.0) call domflag(idummy,vol,0,3,0,1)
It is crucial that all domains call this routine the same number of times. Sharing data
should be avoided inside element loops. Apart from being inefficient, it usually
causes the job to hang or crash since there are, in general, a different number of
elements in the domains. If, for example, the code for calculating the volume is done
in an element loop, the calculation of the total volume should be done outside the
element loop (for instance, in the UEDINC user subroutine, which is called at the end
of the increment).
Dealing with nodal arrays sometimes requires special attention since the nodes on
interdomain boundaries are duplicated. One such example is when counting the
total number of nodes with a certain property (like being in contact). If this number
is summed up in each domain and then later added between domains it will be too
large since the interdomain nodes are counted multiple times. This can be handled
with the following code:
Main Index
Main Index
CHAPTER 11 605
Considerations for Parallel Processing
Main Index
Main Index
606 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 12 Code Coupling Interface User Subroutines and Utility List
CPLREG_EXCHANGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
CPLREG_FINALIZE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
CPLREG_INIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Main Index
Main Index
608 MSC.Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 12 Code Coupling Interface
Main Index
Main Index
610 MSC.Marc Volume D: User Subroutines and Special Routines
The user subroutines and utility routines described in this chapter provide an
application programming interface (API) to couple MSC.Marc with external
numerical solvers, to apply complex boundary conditions to certain regions of the
model or to develop dedicated post-processing tools. They must be used in
conjunction with the COUPLING REGION model definition option (see MSC.Marc
Volume C: Program Input).
The API allows code coupling software such as MpCCI1 to couple MSC.Marc
with commercial computational fluid dynamics (CFD) codes, in order to solve
fluid-structure interaction problems involving complex (turbulent) flows with large
deformations of the structure that cannot be solved by MSC.Marc alone.
Table 12-1 summarizes the user subroutines of the API, which are called by
MSC.Marc if coupling regions are defined by the COUPLING REGION model
definition option. Table 12-2 lists the utility routines that can be called from the user
subroutines to obtain the connectivity and coordinates of coupling regions, to obtain
the current values of a large number of physical quantities on coupling regions, or
to prescribe the values of certain physical quantities on coupling regions. See
Chapter 14 Code Coupling Interface in MSC.Marc Volume A: Theory and User
Information for more information.
Table 12-1 User Subroutines for Coupling Regions.
Required Model
User Subroutine Purpose
Definition Option
CPLREG_INIT COUPLING REGION Initialize coupling regions for a coupled analysis with
an external solver.
1 Fraunhofer Institute for Algorithms and Scientific Computing SCAI. MpCCI 3.0.4: Manuals and
Tutorials. April 25, 2005, http://www.scai.fraunhofer.de/mpcci.
Main Index
Main Index
CHAPTER 12 611
Code Coupling Interface
Available in User
Utility Subroutine Purpose
Subroutines
Main Index
Main Index
612 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_INIT
Description
The CPLREG_INIT user subroutine can be used to initialize a coupled analysis with
an external solver. For example, in case the MSC.Marc mesh does not match the
mesh of the external solver at the common boundary of the two meshes,
interpolation is needed to transfer quantities from one mesh to the other. To be able
to interpolate the data, the geometrical relationship between the two meshes must
be established. The CPLREG_INIT user subroutine can be used to determine this
relationship, before the actual data exchange is performed. In the subroutine, the
CPLREG_GET_MESH utility routine (see below) can be called for all coupling
regions defined by the COUPLING REGION model definition option (see MSC.Marc
Volume C: Program Input) to obtain the positions of the nodes and the connectivity
of the edges, faces or elements of these coupling regions. The latter should then be
compared with the mesh of the external solver.
The subroutine is called only if coupling regions have been defined by the
COUPLING REGION model definition option (see MSC.Marc Volume C:
Program Input).
Format
User subroutine CPLREG_INIT is written with the following headers:
SUBROUTINE CPLREG_INIT(NCPLREG,ICPLREG)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION ICPLREG(NCPLREG)
user coding
RETURN
END
Main Index
Main Index
CHAPTER 12 613
Code Coupling Interface
where:
Input:
NCPLREG is the number of coupling regions defined by the COUPLING REGION
model definition option.
ICPLREG is the array with the internal numbers of the coupling regions in the
model.
Note: The internal numbers of the coupling regions in the array ICPLREG provide handles to
the regions and must be used in the calls to the utility routines discussed below. These
internal numbers cannot be changed by the user.
Main Index
Main Index
614 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_EXCHANGE
Description
The CPLREG_EXCHANGE user subroutine can be used to exchange data with an
external solver via calls to the various CPLREG_GET and CPLREG_PUT utility
routines (see below). The routine is called twice per coupling time step, defined as
the time between two data exchanges. The subroutine is called at the start and at the
end of each coupling step. Typically, the call at the start will set the values of the
prescribed quantities for this step via the CPLREG_PUT utility routines and the call
at the end will extract the new values of quantities computed during the step via the
CPLREG_GET utility routines.
The default coupling step is the MSC.Marc increment. In this case, the
CPLREG_EXCHANGE user subroutine is called twice per increment, once at the start
and once at the end of each increment. If the AUTO STEP stepping scheme is used,
the coupling time step can be controlled by prescribing the global quantity
"Coupling Time Step" (see CPLREG_GET_GLOBAL_VALUES below). In that
case, a coupling step may consist of multiple increments. The CPLREG_EXCHANGE
user subroutine is then called at the start of the first increment and at the end of the
last increment of the coupling step.
The routine is called only if coupling regions have been defined by the COUPLING
REGION model definition option (see MSC.Marc Volume C: Program Input).
Format
User subroutine CPLREG_EXCHANGE is written with the following headers:
SUBROUTINE CPLREG_EXCHANGE(NCPLREG,ICPLREG,ICALL,INC,TIME)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION ICPLREG(NCPLREG)
user coding
RETURN
END
Main Index
Main Index
CHAPTER 12 615
Code Coupling Interface
where
Input:
NCPLREG is the number of coupling regions defined by the COUPLING REGION
model definition option.
ICPLREG is the array with the internal numbers of the coupling regions in the model.
ICALL is a flag that indicates when the subroutine is called:
1: subroutine is called at the start of the coupling step.
2: subroutine is called at the end of the coupling step.
INC is the increment number.
TIME is the current time.
Notes: The internal numbers of the coupling regions in the array ICPLREG provide handles to
the regions and must be used in the calls to the utility routines discussed below. These
internal numbers cannot be changed by the user.
The current time, passed to the subroutine through the variable TIME, is the time at the
start of the coupling step if ICALL=1 and the updated time at the end of the of the
coupling step if ICALL=2.
Main Index
Main Index
616 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_FINALIZE
Description
The CPLREG_FINALIZE user subroutine can be used to clean up any data structures
needed for the coupled analysis or to inform the external solver that the MSC.Marc
job has ended. It is called once per job, at the end of the analysis and only if coupling
regions have been defined via the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input).
Format
User subroutine CPLREG_FINALIZE is written with the following headers:
SUBROUTINE CPLREG_FINALIZE(IEXIT)
IMPLICIT REAL*8 (A-H,O-Z)
user coding
RETURN
END
where:
Input:
IEXIT The MSC.Marc exit number of the job (see Appendix A in MSC.Marc
Volume C: Program Input).
Main Index
Main Index
CHAPTER 12 617
Code Coupling Interface
■ CPLREG_FIND_NAME
Description
The CPLREG_FIND_NAME utility routine finds the coupling region with a given
name and returns the internal number of the region. The latter can be used in calls
to the CPLREG_GET and CPLREG_PUT utility routines discussed below. The
coupling region must have been defined via the COUPLING REGION model
definition option (see MSC.Marc Volume C: Program Input).
Format
Utility routine CPLREG_FIND_NAME is called with the following headers:
SUBROUTINE CPLREG_FIND_NAME(RNAME,IREG,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
CHARACTER*32 RNAME
where:
Input:
RNAME is the name of the coupling region to find.
Required Output:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE) or -1 if no region with that
name exists.
IERROR is the error status:
= 0: on success
= 1: on error
Availability
This utility routine is available in the following user subroutines:
CPLREG_INIT
CPLREG_EXCHANGE
Main Index
Main Index
618 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_GET_INFO
Description
The CPLREG_GET_INFO utility routine returns general information about a
coupling region, defined via the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input). The routine returns, among other things, the
sizes of the finite element mesh of the region, which can be used to determine the
amount of memory needed for storing the mesh of the coupling region (see the
description of the CPLREG_GET_MESH utility below).
Format
Utility routine CPLREG_GET_INFO is called with the following headers:
SUBROUTINE CPLREG_GET_INFO(IREG,RNAME,IRDIM,IACTIVE,NRQUANT,
NRNODE,NRELEM,NRELNODE,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
CHARACTER*32 RNAME
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
Required Output:
RNAME is the name of the coupling region
IRDIM is the dimension of the coupling region:
= 1: region consists of edges or curves.
= 2: region consists of faces or surfaces.
= 3: region consists of elements or bodies.
IACTIVE is the activation state of the coupling region:
= 0: region is not active in the present loadcase.
> 0: region is active in the present loadcase.
NRQUANT is the number of prescribed quantities on this region.
NRNODE is the number of nodes of the coupling region.
Main Index
Main Index
CHAPTER 12 619
Code Coupling Interface
Availability
This utility routine is available in the following user subroutines:
CPLREG_INIT
CPLREG_EXCHANGE
Main Index
Main Index
620 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_GET_QUANTS
Description
The CPLREG_GET_QUANTS utility routine returns the quantities prescribed on a
coupling region, defined by the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input).
Format
Utility routine CPLREG_GET_QUANTS is called with the following headers:
SUBROUTINE CPLREG_GET_QUANTS(IREG,MXQUANT,IRQUANTS,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION IRQUANTS(MXQUANT)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
MXQUANT is the maximum number of prescribed quantities to return.
Required Output:
IRQUANT is the array of prescribed quantities on this region.
IERROR is the error status:
= 0: on success
= 1: on error
Availability
This utility routine is available in the following user subroutines:
CPLREG_INIT
CPLREG_EXCHANGE
Main Index
Main Index
CHAPTER 12 621
Code Coupling Interface
■ CPLREG_GET_MESH
Description
The CPLREG_GET_MESH utility routine returns the mesh of a coupling region,
defined via the COUPLING REGION model definition option (see MSC.Marc Volume
C: Program Input) in a number of arrays. It is the responsibility of the user to ensure
that the arrays are large enough to hold all data. The CPLREG_GET_INFO utility can
be used to find the required sizes of these arrays.
Depending on the dimension of the region (1, 2 or 3, see the description of the
CPLREG_GET_INFO utility routine), the CPLREG_GET_MESH utility returns the
edges, the faces or the elements of the region. If the coupling region is defined via
curves, surfaces or bodies (geometry types 3, 4, 5 or 16-19), the routine returns the
edges or faces attached to these curves or surfaces via the ATTACH EDGE and
ATTACH FACE model definition options or the elements of the bodies.
Format
Utility routine CPLREG_GET_MESH is called with the following headers:
SUBROUTINE CPLREG_GET_MESH(IREG,MXNODE,MXCRD,MXELEM,MXELNODE,
INODEIDS,COORDS,IELCLASS,IELTYPES,
IELEMIDS,NELNODES,IELNODES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION INODEIDS(MXNODE),COORDS(MXCRD,MXNODE)
DIMENSION IELCLASS(MXELEM),IELTYPES(MXELEM),IELEMIDS(MXELEM)
DIMENSION NELNODES(MXELEM),IELNODES(MXELNODE,MXELEM)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
MXNODE is the maximum number of nodes to return.
MXCRD is the maximum number of coordinates per node to return.
Main Index
Main Index
622 MSC.Marc Volume D: User Subroutines and Special Routines
Notes: The topology classes returned via the IELCLASS array uniquely characterize the
shapes of the edges, faces or elements. The different classes are listed in
Table 12-3, below.
If the region consists of edges or faces, then the element types returned via the
IELTYPES array are the types of the underlying elements.
If the region consists of elements (dimension is equal to 3), then the ids returned via the
IELEMIDS array are the user ids of the elements. If the region consists of edges or
faces (dimension is 1 or 2), then the ids are packed numbers of the form ID*100+IEF,
in which ID is the user element id of the underlying element and IEF is the edge or face
number in the MSC.Marc convention. For example, 1103 represents face 3 of
element 11.
The connectivity of the edges, faces or elements is returned in the local node numbering
within the region via the IELNODES array. User node numbers can be obtained using
INODEIDS array. That is, INODEIDS(IELNODES(I,J)) is the user node number of
node I of edge, face or element J of the region
Main Index
Main Index
CHAPTER 12 623
Code Coupling Interface
Availability
This utility routine is available in the following user subroutines:
CPLREG_INIT
CPLREG_EXCHANGE
Main Index
Main Index
624 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_GET_GLOBAL_VALUES
Description
The CPLREG_GET_GLOBAL_VALUES utility routine returns the current value of a
global quantity.
Format
Utility routine CPLREG_GET_GLOBAL_VALUES is called with the following
headers:
SUBROUTINE CPLREG_GET_GLOBAL_VALUES(IQID,MXVAL,VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION VALUES(MXVAL)
where:
Input:
IQID is the quantity to return.
MXVAL is the maximum number of values to return.
Required Output:
VALUES is the array with the current values.
IERROR is the error status:
= 0: on success
= 1: on error
Quantities
Currently only one global quantity can accessed through this routine:
Quantity ID Type Description
1 Scalar Time Step
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
CHAPTER 12 625
Code Coupling Interface
Main Index
Main Index
626 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_GET_NODE_VALUES
Description
The CPLREG_GET_NODE_VALUES utility routine returns the values of a quantity at
the nodes of a coupling region defined via the COUPLING REGION model definition
option (see MSC.Marc Volume C: Program Input).
Format
User subroutine CPLREG_GET_NODE_VALUES is called with the following
headers:
SUBROUTINE CPLREG_GET_NODE_VALUES(IREG,IQID,NNODE,MXVAL,
INODEIDS,VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION INODEIDS(NNODE),VALUES(MXVAL,NNODE)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be returned.
NNODE is the number of nodes for which the values must be returned.
MXVAL is the maximum number of values per node to return.
INODEIDS is the array with user ids of the nodes for which the values must
be returned.
Required Output:
VALUES is the array with the values of the quantity at the nodes.
IERROR is the error status:
= 0: on success
= 1: on error
Main Index
Main Index
CHAPTER 12 627
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
101 Vector Current Coordinates
102 Vector Displacement
103 Vector External Force
104 Vector Reaction Force
112 Vector Displacement (Local)
113 Vector External Force (Local)
114 Vector Reaction Force (Local)
121 Scalar Displacement X
122 Scalar Displacement Y
123 Scalar Displacement Z
124 Scalar External Force X
125 Scalar External Force Y
126 Scalar External Force Z
127 Scalar Reaction Force X
128 Scalar Reaction Force Y
129 Scalar Reaction Force Z
161 Scalar Displacement X (Local)
162 Scalar Displacement Y (Local)
163 Scalar Displacement Z (Local)
164 Scalar External Force X (Local)
165 Scalar External Force Y (Local)
166 Scalar External Force Z (Local)
167 Scalar Reaction Force X (Local)
168 Scalar Reaction Force Y (Local)
169 Scalar Reaction Force Z (Local)
201 Scalar Temperature
202 Scalar External Heat Flux
203 Scalar Reaction Heat Flux
Note: All mechanical nodal quantities are defined in the global coordinate system, except those
tagged with "(Local)". The latter are defined in the local coordinate systems of the nodes, if
such coordinate systems have been defined by the TRANSFORMATION or COORD
SYSTEM model definition option, or in the global system, otherwise.
Main Index
Main Index
628 MSC.Marc Volume D: User Subroutines and Special Routines
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
If the subroutine is called in CPLREG_EXCHANGE for ICALL=1, the values of the
quantity at the start of the coupling step (i.e., the values at the end of the previous
coupling step) are returned. If it is called for ICALL=2, the updated values at the end
of the coupling step are returned.
Main Index
Main Index
CHAPTER 12 629
Code Coupling Interface
■ CPLREG_GET_ALL_NODE_VALUES
Description
The CPLREG_GET_ALL_NODE_VALUES utility routine returns the values of a
quantity at all nodes of a coupling region defined via the COUPLING REGION model
definition option (see MSC.Marc Volume C: Program Input). This utility routine is
similar to the CPLREG_GET_NODE_VALUES utility, but more efficient if the values
at all nodes of the region must be returned.
Format
User subroutine CPLREG_GET_ALL_NODE_VALUES is called with the
following headers:
SUBROUTINE CPLREG_GET_ALL_NODE_VALUES(IREG,IQID,MXVAL,
VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION VALUES(MXVAL,*)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be returned.
MXVAL is the maximum number of values per node to return.
Required Output:
VALUES is the array with the values of the quantity at the nodes.
IERROR is the error status:
= 0: on success
= 1: on error
Notes: The dimension of the VALUES array must be at least (MXVAL,NRNODE), in which
NRNODE is the number of nodes of the coupling region as returned by the
CPLREG_GET_INFO utility. The order in which the values are returned is given by the
INODEIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
630 MSC.Marc Volume D: User Subroutines and Special Routines
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
101 Vector Current Coordinates
102 Vector Displacement
103 Vector External Force
104 Vector Reaction Force
112 Vector Displacement (Local)
113 Vector External Force (Local)
114 Vector Reaction Force (Local)
121 Scalar Displacement X
122 Scalar Displacement Y
123 Scalar Displacement Z
124 Scalar External Force X
125 Scalar External Force Y
126 Scalar External Force Z
127 Scalar Reaction Force X
128 Scalar Reaction Force Y
129 Scalar Reaction Force Z
161 Scalar Displacement X (Local)
162 Scalar Displacement Y (Local)
163 Scalar Displacement Z (Local)
164 Scalar External Force X (Local)
165 Scalar External Force Y (Local)
166 Scalar External Force Z (Local)
167 Scalar Reaction Force X (Local)
168 Scalar Reaction Force Y (Local)
169 Scalar Reaction Force Z (Local)
201 Scalar Temperature
202 Scalar External Heat Flux
203 Scalar Reaction Heat Flux
Note: All mechanical nodal quantities are defined in the global coordinate system, except those
tagged with "(Local)". The latter are defined in the local coordinate systems of the nodes, if
such coordinate systems have been defined by the TRANSFORMATION or COORD
SYSTEM model definition option, or in the global system, otherwise.
Main Index
Main Index
CHAPTER 12 631
Code Coupling Interface
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
If the subroutine is called in CPLREG_EXCHANGE for ICALL=1, the values of the
quantity at the start of the coupling step (i.e., the values at the end of the previous
coupling step) are returned. If it is called for ICALL=2, the updated values at the end
of the coupling step are returned.
Main Index
Main Index
632 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_GLOBAL_VALUES
Description
The CPLREG_PUT_GLOBAL_VALUES utility routine sets the new value of a global
quantity, to be used in the subsequent coupling steps, until changed by a subsequent
call to this routine.
Format
Utility routine CPLREG_PUT_GLOBAL_VALUES is called with the
following headers:
SUBROUTINE CPLREG_PUT_GLOBAL_VALUES(IQID,MXVAL,VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION VALUES(MXVAL)
where:
Input:
IQID is the quantity for which the new value must be set.
MXVAL is the maximum number of values to set.
VALUES is the array with new values.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Quantities
Currently only one global quantity can accessed through this routine:
Quantity ID Type Description
2 Scalar Coupling Time Step
Note: The Coupling Time Step is the time between two calls to CPLREG_EXCHANGE and defaults
to the time increment. It can be changed only if the AUTO STEP stepping scheme is used. In
that case, it must changed in the CPLREG_EXCHANGE user subroutine if ICALL=1.
Main Index
Main Index
CHAPTER 12 633
Code Coupling Interface
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
634 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_NODE_VALUES
Description
The CPLREG_PUT_NODE_VALUES utility routine sets the new values of a quantity
at the nodes of a coupling region defined via the COUPLING REGION model
definition option (see MSC.Marc Volume C: Program Input). The new values are
used in the subsequent coupling step(s), until changed by a subsequent call to this
routine. Note that the CPLREG_PUT_ALL_NODE_VALUES utility routine is more
efficient if the values at all nodes of a region must be set.
Format
User subroutine CPLREG_PUT_NODE_VALUES is called with the following headers:
SUBROUTINE CPLREG_PUT_NODE_VALUES(IREG,IQID,NNODE,MXVAL,
INODEIDS,VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION INODEIDS(NNODE),VALUES(MXVAL,NNODE)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be set.
NNODE is the number of nodes for which the values must be set.
MXVAL is the maximum number of values per node to set.
INODEIDS is the array with user ids of the nodes for which values must be set.
VALUES is the array with the new values of the quantity at the nodes.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Note: The CPLREG_PUT_NODE_VALUES routine may be called multiple times to set the
values of a quantity for a subset of nodes of the coupling region.
Main Index
Main Index
CHAPTER 12 635
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
102 Vector Displacement
103 Vector External Force
112 Vector Displacement (Local)
113 Vector External Force (Local)
161 Scalar Displacement X (Local)
162 Scalar Displacement Y (Local)
163 Scalar Displacement Z (Local)
164 Scalar External Force X (Local)
165 Scalar External Force Y (Local)
166 Scalar External Force Z (Local)
201 Scalar Temperature
202 Scalar External Heat Flux
Notes: All mechanical nodal quantities are defined in the global coordinate system, except
those tagged with "(Local)". The latter are defined in the local coordinate systems of the
nodes, if such coordinate systems have been defined by the TRANSFORMATION
model definition option, or in the global system, otherwise.
Only quantities specified in the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via
this utility routine.
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
636 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ALL_NODE_VALUES
Description
The CPLREG_PUT_NODE_VALUES utility routine sets the new values of a quantity
at all nodes of a coupling region defined via the COUPLING REGION model
definition option (see MSC.Marc Volume C: Program Input). The new values are
used in the subsequent coupling step(s), until changed by a subsequent call to this
routine. This utility routine is similar to the CPLREG_PUT_NODE_VALUES utility,
but more efficient if the values at all nodes of the region must be set.
Format
User subroutine CPLREG_PUT_ALL_NODE_VALUES is called with the
following headers:
SUBROUTINE CPLREG_PUT_ALL_NODE_VALUES(IREG,IQID,MXVAL,
VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION VALUES(MXVAL,*)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be set.
MXVAL is the maximum number of values per node to set.
VALUES is the array with the new values of the quantity at the nodes.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Notes: The dimension of the VALUES array must be at least (MXVAL,NRNODE), in which
NRNODE is the number of nodes of the coupling region as returned by the
CPLREG_GET_INFO utility. The values must be supplied in the order given by the
INODEIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
CHAPTER 12 637
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
102 Vector Displacement
103 Vector External Force
112 Vector Displacement (Local)
113 Vector External Force (Local)
161 Scalar Displacement X (Local)
162 Scalar Displacement Y (Local)
163 Scalar Displacement Z (Local)
164 Scalar External Force X (Local)
165 Scalar External Force Y (Local)
166 Scalar External Force Z (Local)
201 Scalar Temperature
202 Scalar External Heat Flux
Notes: All mechanical nodal quantities are defined in the global coordinate system, except
those tagged with "(Local)". The latter are defined in the local coordinate systems of the
nodes, if such coordinate systems have been defined by the TRANSFORMATION
model definition option, or in the global system, otherwise.
Only quantities specified in the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via
this utility routine.
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
638 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_EDGE_VALUES
Description
The CPLREG_PUT_EDGE_VALUES utility routine sets the new values of a quantity
at the edges of a coupling region defined via the COUPLING REGION model
definition option (see MSC.Marc Volume C: Program Input). The new values are
used in the subsequent coupling step(s), until changed by a subsequent call to this
routine.
Format
User subroutine CPLREG_GET_EDGE_VALUES is called with the following headers:
SUBROUTINE CPLREG_GET_EDGE_VALUES(IREG,IQID,NEDGE,MXVAL,
IEDGEIDS,VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION IEDGEIDS(NEDGE),VALUES(NVAL,NEDGE)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be set.
NEDGE is the number of edges for which the values must be set.
MXVAL is the number of values per edge to set.
IEDGEIDS is the array with ids of the edges for which the values must be set.
VALUES is the array with the new values of the quantity at the edges.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Notes: The CPLREG_PUT_EDGE_VALUES routine may be called multiple times to set the values
of a quantity for a subset of edges of the coupling region.
The IEDGEIDS array must contain packed numbers of the form ID*100+IEDGE, in
which ID is the user id of the element and IEDGE is the edge number in the MSC.Marc
convention (see CPLREG_GET_MESH utility).
Main Index
Main Index
CHAPTER 12 639
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
1101 Scalar Total Pressure
1102 Vector Total Traction
1201 Scalar Heat Flux Density
1202 Scalar Film Coefficient
1203 Scalar Environment Temperature
Note: Only quantities specified in the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via
this utility routine.
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
640 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ALL_EDGE_VALUES
Description
The CPLREG_PUT_ALL_EDGE_VALUES utility routine sets the new values of a
quantity at all edges of a coupling region defined via the COUPLING REGION model
definition option (see MSC.Marc Volume C: Program Input). The new values are
used in the subsequent coupling step(s), until changed by a subsequent call to this
routine. This utility routine is similar to the CPLREG_PUT_EDGE_VALUES
utility, but more efficient if the values at all edges of the region must be set.
Format
User subroutine CPLREG_PUT_ALL_EDGE_VALUES is called with the
following headers:
SUBROUTINE CPLREG_PUT_ALL_EDGE_VALUES(IREG,IQID,MXVAL,
VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION VALUES(MXVAL,*)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be set.
MXVAL is the number of values per edge to set.
VALUES is the array with the new values of the quantity at the edges.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Notes: The dimension of the VALUES array must be at least (MXVAL,NRELEM), in which
NRELEM is the number of edges of the coupling region as returned by the
CPLREG_GET_INFO utility. The values must be supplied in the order given by the
IELEMIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
CHAPTER 12 641
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
1101 Scalar Total Pressure
1102 Vector Total Traction
1201 Scalar Heat Flux Density
1202 Scalar Film Coefficient
1203 Scalar Environment Temperature
Note: Only quantities specified in the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via
this utility routine.
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
642 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_FACE_VALUES
Description
The CPLREG_PUT_FACE_VALUES utility routine sets the new values of a quantity
at the faces of a coupling region defined via the COUPLING REGION model
definition option (see MSC.Marc Volume C: Program Input). The new values
are used in the subsequent coupling step(s), until changed by a subsequent call to
this routine.
Format
User subroutine CPLREG_GET_FACE_VALUES is called with the following headers:
SUBROUTINE CPLREG_GET_FACE_VALUES(IREG,IQID,NFACE,MXVAL,
IFACEIDS,VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION IFACEIDS(NFACE),VALUES(NVAL,NFACE)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be set.
NFACE is the number of faces for which the values must be set.
MXVAL is the number of values per face to set.
IFACEIDS is the array with ids of the faces for which the values must be set.
VALUES is the array with the new values of the quantity at the faces.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Notes: The CPLREG_PUT_FACE_VALUES routine may be called multiple times to set the
values of a quantity for a subset of faces of the coupling region.
The IFACEIDS array must contain packed numbers of the form ID*100+IFACE, in
which ID is the user id of the element and IFACE is the face number in the MSC.Marc
convention (see CPLREG_GET_MESH utility).
Main Index
Main Index
CHAPTER 12 643
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
1101 Scalar Total Pressure
1102 Vector Total Traction
1201 Scalar Heat Flux Density
1202 Scalar Film Coefficient
1203 Scalar Environment Temperature
Note: Only quantities specified in the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via
this utility routine.
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
644 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ALL_FACE_VALUES
Description
The CPLREG_PUT_FACE_VALUES utility routine sets the new values of a quantity
at all faces of a coupling region defined via the COUPLING REGION model definition
option (see MSC.Marc Volume C: Program Input). The new values are used in the
subsequent coupling step(s), until changed by a subsequent call to this routine. This
utility routine is similar to the CPLREG_PUT_FACE_VALUES utility, but more
efficient if the values at all faces of the region must be set.
Format
User subroutine CPLREG_PUT_ALL_FACE_VALUES is called with the
following headers:
SUBROUTINE CPLREG_PUT_ALL_FACE_VALUES(IREG,IQID,MXVAL,
VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION VALUES(MXVAL,*)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be set.
MXVAL is the number of values per face to set.
VALUES is the array with the new values of the quantity at the faces.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Notes: The dimension of the VALUES array must be at least (MXVAL,NRELEM), in which
NRELEM is the number of faces of the coupling region as returned by the
CPLREG_GET_INFO utility. The values must be supplied in the order given by the
IELEMIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
CHAPTER 12 645
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
1101 Scalar Total Pressure
1102 Vector Total Traction
1201 Scalar Heat Flux Density
1202 Scalar Film Coefficient
1203 Scalar Environment Temperature
Note: Only quantities specified in the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via
this utility routine.
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
646 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ELEM_VALUES
Description
The CPLREG_PUT_ELEM_VALUES utility routine sets the new values of a quantity
at the elements of a coupling region defined via the COUPLING REGION model
definition option (see MSC.Marc Volume C: Program Input). The new values are
used in the subsequent coupling step(s), until changed by a subsequent call to this
routine. Note that the CPLREG_PUT_ALL_ELEM_VALUES utility routine is more
efficient if the values at all elements of a region must be set.
Format
User subroutine CPLREG_GET_ELEM_VALUES is called with the following headers:
SUBROUTINE CPLREG_GET_ELEM_VALUES(IREG,IQID,NELEM,MXVAL,
IELEMIDS,VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION IELEMIDS(NELEM),VALUES(NVAL,NELEM)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be set.
NELEM is the number of elements for which the values must be set.
MXVAL is the number of values per element to set.
IELEMIDS is the array with ids of the elements for which the values must be set.
VALUES is the array with the new values of the quantity at the elements.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Note: The CPLREG_PUT_ELEM_VALUES routine may be called multiple times to set the
values of a quantity for a subset of elements of the coupling region.
Main Index
Main Index
CHAPTER 12 647
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
10101 Vector Volume Load
10131 Scalar Volume Load X
10132 Scalar Volume Load Y
10133 Scalar Volume Load Z
Note: Only quantities specified in the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via
this utility routine.
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
648 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ALL_ELEM_VALUES
Description
The CPLREG_PUT_ALL_ELEM_VALUES utility routine sets the new values of a
quantity at all elements of a coupling region defined via the COUPLING REGION
model definition option (see MSC.Marc Volume C: Program Input). The new values
are used in the subsequent coupling step(s), until changed by a subsequent call to
this routine. This utility routine is similar to the CPLREG_PUT_ELEM_VALUES
utility, but more efficient if the values at all elements of the region must be set.
Format
User subroutine CPLREG_PUT_ALL_ELEM_VALUES is called with the
following headers:
SUBROUTINE CPLREG_PUT_ALL_ELEM_VALUES(IREG,IQID,MXVAL,
VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION VALUES(MXVAL,*)
where:
Input:
IREG is the internal number of the coupling region (see user subroutines
CPLREG_INIT and CPLREG_EXCHANGE or utility routine
CPLREG_FIND_NAME).
IQID is the quantity for which the values must be set.
MXVAL is the number of values per element to set.
VALUES is the array with the new values of the quantity at the elements.
Required Output:
IERROR is the error status:
= 0: on success
= 1: on error
Note: The dimension of the VALUES array must be at least (MXVAL,NRELEM), in which
NRELEM is the number of elements of the coupling region as returned by the
CPLREG_GET_INFO utility. The values must be supplied in the order given by the
IELEMIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
CHAPTER 12 649
Code Coupling Interface
Quantities
The following quantities may be accessed through this routine:
Quantity ID Type Description
10101 Vector Volume Load
10131 Scalar Volume Load X
10132 Scalar Volume Load Y
10133 Scalar Volume Load Z
Note: Only quantities specified in the COUPLING REGION model definition option (see
MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via
this utility routine.
Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
Main Index
Main Index
650 MSC.Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Appendix A User Subroutines and Special Routines List
A User Subroutines,
Special Routines, and
Utility Routines List
Main Index
Main Index
652 MSC.Marc Volume D: User Subroutines and Special Routines
DIGEOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
ELEVAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
ELEVEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
FILM . . . . ........................................................ 92
FLOW . . . ........................................................ 94
FLUX . . . . ........................................................ 66
FORCDF . ........................................................ 88
FORCDT . ........................................................ 78
FORCEM . ........................................................ 61
GAPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
GAPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
GENSTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
HOOKLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
HOOKVI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
HYPELA2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
MAP2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
MOTION (2-D) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
MOTION (3-D) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
NASSOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
NEWPO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
NEWSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Main Index
Main Index
APPENDIX A 653
User Subroutines, Special Routines, and Utility Routines List
ORIENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
PLOTV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
REBAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
TENSOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
TRSFAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Main Index
Main Index
654 MSC.Marc Volume D: User Subroutines and Special Routines
UCRACKGROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
UCRPLW (Viscoplastic) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
UCRPLW (Viscoplastic) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
UCURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
UDAMAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
UDAMAGE_INDICATOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
UEDINC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
UELASTOMER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
UELDAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
UELOOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
UENERG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
UEPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
UFAH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
UFAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
UFCONN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
UFILM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
UFINITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
UFLUXMEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
UFMEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
UFORMSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
UFOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
UFOUR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
UFRIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
UFRICBBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
UFRORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
UFTHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
UFXORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
UGASKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
UGENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
UGLAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
UGMEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
UGRAIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
UGROOV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
UGROWRIGID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
UHTCOE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
UHTCON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
UHTNRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Main Index
Main Index
APPENDIX A 655
User Subroutines, Special Routines, and Utility Routines List
UINSTR . . . . . ..................................................... 74
UMAKNET . . . ..................................................... 380
UMDCOE . . . . ..................................................... 156
UMDCON . . . . ..................................................... 159
UMDNRC . . . . ..................................................... 161
UMOONY . . . . ..................................................... 278
UMU . . . . . . . . ..................................................... 235
UNEWTN . . . . ..................................................... 317
UNORST. . . . . ..................................................... 163
UOBJFN . . . . . ..................................................... 173
UOGDEN . . . . ..................................................... 281
UPERM. . . . . . ..................................................... 277
UPHI . . . . . . . . ..................................................... 306
UPNOD. . . . . . ..................................................... 385
UPOSTV . . . . . ..................................................... 415
UPOWDR . . . . ..................................................... 275
UPRFILM . . . . ..................................................... 175
UPROGFAIL . . ..................................................... 225
UPSTNO . . . . . ..................................................... 418
UPYROLEFF. . ..................................................... 332
UPYROLSL . . . ..................................................... 326
UQVECT . . . . . ..................................................... 101
URCONN . . . . ..................................................... 391
UREACB . . . . . ..................................................... 170
URESTR . . . . . ..................................................... 445
URPFLO . . . . . ..................................................... 318
USDATA . . . . . ..................................................... 117
USELEM . . . . . ..................................................... 313
USHELL . . . . . ..................................................... 406
USHRET . . . . . ..................................................... 265
USHRINKAGE. ..................................................... 242
USIGMA . . . . . ..................................................... 237
USINC . . . . . . ..................................................... 116
USINKPT . . . . ..................................................... 100
USIZEOUTL . . ..................................................... 378
USPCHT . . . . . ..................................................... 238
USPCHTAB . . . ..................................................... 335
Main Index
Main Index
656 MSC.Marc Volume D: User Subroutines and Special Routines
USPLIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
USPLIT_MESH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
USPRNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
USSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
USSUBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
UTHICK (Hydrodynamic Lubrication) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
UTHICK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
UTIMESTEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
UTIMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
UTRANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
UVELOC (Hydrodynamic Lubrication) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
UVELOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
UVOID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
UVOIDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
UVOIDRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
UVSCPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
UVTCOE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
UVTCON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
UVTNRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
UWATERSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
UWEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
UWELDFLUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
UWELDPATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
VSWELL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
WKSLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
YIEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
ZERO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
PLDUMP13/PLDUMP2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Main Index
Main Index
APPENDIX A 657
User Subroutines, Special Routines, and Utility Routines List
CPLREG_FIND_NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
CPLREG_GET_ALL_NODE_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
CPLREG_GET_GLOBAL_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
CPLREG_GET_INFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
CPLREG_GET_MESH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
CPLREG_GET_NODE_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
CPLREG_GET_QUANTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
CPLREG_PUT_ALL_EDGE_VALUES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
CPLREG_PUT_ALL_ELEM_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
CPLREG_PUT_ALL_FACE_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
CPLREG_PUT_ALL_NODE_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
CPLREG_PUT_EDGE_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
CPLREG_PUT_ELEM_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
CPLREG_PUT_FACE_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
CPLREG_PUT_GLOBAL_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
CPLREG_PUT_NODE_VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Coupling Utility Routine Page
DDOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
INV3X3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
INVERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
MCPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
PRINCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
SCLA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
Main Index
Main Index
658 MSC.Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index