0% found this document useful (0 votes)
238 views583 pages

Marc 2010 Doc Volume D

Marc 2010 Documentation

Uploaded by

Nieczesany
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
238 views583 pages

Marc 2010 Doc Volume D

Marc 2010 Documentation

Uploaded by

Nieczesany
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 583

Marc 2010

Volume D: User Subroutines and


Special Routines
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 2010 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*V2010*Z*Z*Z*DC-VOL-D
Contents
Marc Volume D: User Subroutines and Special Routines

Contents

1 Introduction
Common Blocks Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Note on Double Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Element Result Database Utility Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16


Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Nodal Results Database Utility Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Table Evaluation Routine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

MATDAT Common Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

CONCOM Common Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

ELMCOM Common Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

BCLABEL Common Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

Determining the Elements or Nodes in a Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Internal Data Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42


Element Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Element Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Nodal Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

2 User-defined Loading, Boundary Conditions, and State Variables


User Subroutines List
2 User-defined Loading, Boundary Conditions, and State Variables
User Subroutines
FORCEM Input of Nonuniform Distributed Loads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
FLUX Input of Nonuniform Fluxes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
UWELDFLUX Input of User Defined Welding Flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
UWELDPATH Input of User-defined Welding Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4 Marc Volume D: User Subroutines and Special Routines

CUPFLX Coupling of Inelastic Energy and Internal Heat Generation . . . . . . . . . . . . . . . . . . . . . . . 69


UINSTR Input of Initial State of Stresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
UFOUR Input of a User-defined Function F() for Fourier Analysis . . . . . . . . . . . . . . . . . . . . . . . . 71
FORCDT Input of Time Dependent Nodal based Boundary Conditions . . . . . . . . . . . . . . . . . . . . . 73
FORCDF Input of Frequency Dependent Loads or Displacements in Harmonic Analysis . . . . . . . 82
FILM Input of Nonuniform Film Coefficients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
FLOW Input of Mass Flow Rate and Inlet Temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
UFOUND Input of Nonlinear Foundation Stiffness and Damping . . . . . . . . . . . . . . . . . . . . . . . . . . 89
UFILM Input of Nonuniform Convective Coefficients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
USINKPT Input of Sink Point Temperatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
UQVECT Directed Thermal Flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
GAPT Input of Thermal Contact (Conrad) Gap Temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
UFORMSN Definition of Constraint Conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
CREDE Input of Pre-specified State Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
INITSV Initialize State Variable Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
NEWSV Input New State Variable Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
INTFTMP Initialize Fictive Temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
USSD Input of Spectral Response Density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
USINC Input of Initial Conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
USDATA Input of Initial Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
UTIMESTEP Input of User-defined Time Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
UVELOC Generation or Modification of Nodal Velocity Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
MOTION (2-D) Definition of Rigid Surface Motion for 2-D Contact . . . . . . . . . . . . . . . . . . . . . . . . . 113
MOTION (3-D) Definition of Rigid Surface Motion for 3-D Contact . . . . . . . . . . . . . . . . . . . . . . . . . 116
UGROWRIGID Changes the Size of a Rigid Body During the Analysis . . . . . . . . . . . . . . . . . . . . . 119
UFRIC Definition of Friction Coefficients. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
UFRICBBC Definition of Friction Coefficients for Beam-to-Beam Contact . . . . . . . . . . . . . . . . . . . 124
DIGEOM Definition of 3-D Rigid Surface Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
SEPFOR Definition of Separation Force . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
SEPFORBBC Definition of Separation Force for Beam-to-Beam Contact . . . . . . . . . . . . . . . . . . . 131
SEPSTR Definition of Separation Stress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
SEPSTR_STS Definition of Separation Stress for Segment-to-segment Contact . . . . . . . . . . . . . 135
UBREAKGLUE User-defined Breaking Criterion for Breaking Glue Feature . . . . . . . . . . . . . . . . . 137
UACTGLUE User-defined Switching from Deact Glue State to Regular Glue . . . . . . . . . . . . . . . . 139
UHTCOE Definition of Environment Film Coefficient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
UHTCON Definition of Contact Film Coefficient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
UBSQUEAL Define Parameters used in Brake Squeal Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . 147
UDAMAGE_INDICATOR Indicator of Material Damage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
UHTNRC Definition of Thermal Near Contact Film Coefficient . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
UVTCOE Definition of Environment Electrical Film Coefficient. . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
UVTCON Definition of Electrical Film Coefficient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
UVTNRC Definition of Electrical Near Contact Film Coefficient . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
UMDCOE Definition of Environment Mass Diffusion Coefficient. . . . . . . . . . . . . . . . . . . . . . . . . . . 163
UMDCON Definition of Contact Mass Diffusion Coefficient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
5

UMDNRC Definition of Mass Diffusion Coefficients between Surfaces almost in Contact . . . . . . . . 169
INITPL Initialize Equivalent Plastic Strain Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
INITPO Initialize Pore Pressure in an Uncoupled Fluid-Soil Analysis. . . . . . . . . . . . . . . . . . . . . . . . 173
NEWPO Modify Pore Pressure in an Uncoupled Fluid-Soil Analysis . . . . . . . . . . . . . . . . . . . . . . . . 174
UREACB Definition of Reactive Boundary Coefficients in an Acoustic Harmonic Analysis . . . . . . . 175
UCAV Input of Volume-Dependant Pressure Load for Cavities . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
UOBJFN Definition of Objective Function and its Gradient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
UPRFILM Input of Nonuniform Pressure Film Coefficients. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
UFAH Define Correction Factor for Convection Coefficient H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
UFLUXMEC Determine the Rate of Ablation due to Mechanical Erosion from Sources
other than Particle Impact. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
UFTHP Define Empirical Correction for the Effect of Surface Temperature . . . . . . . . . . . . . . . . . . . 185
UGLAW Determine the Empirical Correlation G for Flux Calculation . . . . . . . . . . . . . . . . . . . . . . . . 187
UTIMP Define Thermal Effects of Particle Impact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
UFMEC Define Empirical Correction Factor for Mechanical Erosion by Particles . . . . . . . . . . . . . . 190
UGMEC Determine the Empirical Correlation G for Recession Calculation . . . . . . . . . . . . . . . . . . . 192
UABLATE Definition of Surface Recession Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
UABLTNORM Definition of Direction of Recession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
UWEARINDEX User-defined Wear Calculation for Wear Feature . . . . . . . . . . . . . . . . . . . . . . . . . . 197

3 User-defined Anisotropy and Constitutive Relations User


Subroutines List
3 User-defined Anisotropy and Constitutive Relations
User Subroutines
ANELAS Elastic Anisotropy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
HOOKLW Anisotropic Elastic Law . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
ANPLAS Anisotropic Yield Surface and Creep Potential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
UANISYLD User-defined Anisotropic Yield. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
UFAIL User-defined Failure Criterion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
UPROGFAIL Definition of Material Stiffness Reduction Factors for Progressive Failure Analysis . . 228
ORIENT2 User-defined Material Orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
ORIENT Specification of Preferred Orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
ANEXP Anisotropic Thermal Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
ANKOND Input of Anisotropic Thermal Conductivity Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
UEPS Input of Anisotropic Permittivity Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
UMU Input of Anisotropic Permeability Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
USIGMA Input of Anisotropic Electric Conductivity Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
USPCHT Definition of Specific Heat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
UCURE Define the Cure Kinetics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
USHRINKAGE Define Volumetric Cure Shrinkage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
UCRPLW (Viscoplastic) Input of Creep Factors for Power Law Implicit Creep . . . . . . . . . . . . . . . . 252
6 Marc Volume D: User Subroutines and Special Routines

CRPLAW Input of Special Creep Law. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254


VSWELL Input of Special Swelling Law . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
WKSLP Work-hardening Slope Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
USPRNG Input of Nonlinear Spring, Dashpot and Foundation Stiffness . . . . . . . . . . . . . . . . . . . . 265
UCRACK Input of Ultimate Stress for Cracking Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
TENSOF Input of Tension Softening Modulus for Cracking Analysis . . . . . . . . . . . . . . . . . . . . . . . 270
USHRET Input of Shear Retention Factor for Cracking Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . 272
UVOID Definition of the Initial Void Volume Fraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
UVOIDN Definition of the Void Nucleation Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
UVOIDRT Definition of the Initial Void Ratio or Initial Porosity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
UGRAIN Calculation of Grain Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
UDAMAG Prediction of Material Damage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
UPOWDR Definition of Material Data for Powder Metallurgy Model. . . . . . . . . . . . . . . . . . . . . . . . 281
UPERM Definition of Permeability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
UMOONY Mooney-Rivlin Material. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
UENERG Strain Energy Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
UOGDEN Definition of Ogden Material Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
UELDAM Definition of Damage Parameters in Ogden Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
HYPELA2 User-defined Material Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
UFINITE Finite Deformation Isotropic Material Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
UELASTOMER Generalized Strain Energy Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
GENSTR Generalized Stress Strain Law (Shells & Beams) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
UBEAM Input for Nonlinear Beam. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
UCOHESIVE Interface Material Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
UCOHESIVET Thermal Interface Material Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
UPHI Input of PHI Function in Harmonic Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
UCOMPL Input of Viscous Stress Strain Relationship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
GAPU Input of Gap Direction And Closure Distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
UGASKET Define the Initial Gasket Gap Distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
USELEM User-defined Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
UNEWTN Input of Viscosity in Flow Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
URPFLO Rigid-Plastic Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
UARRBO Arruda-Boyce Material Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
UGENT Gent Material Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
UACOUS Definition of Material Properties for Acoustic Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . 336
USSUBS Superelements Not Generated by Marc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
UPYROLSL Calculate the Rate of Decomposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
UCOKSL Calculate the Mass Fraction of Carbon in Pyrolysis Gas . . . . . . . . . . . . . . . . . . . . . . . . 342
UWATERSL Calculate the Rate of Water Evaporation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
UPYROLEFF Define the Effective Conductivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
USPCHTAB Define Specific Heat for Simplified Pyrolysis Model . . . . . . . . . . . . . . . . . . . . . . . . . . 349

References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
7

4 Viscoplasticity and Generalized Plasticity User Subroutines List


4 Viscoplasticity and Generalized Plasticity User Subroutines
UVSCPL Definition of the Inelastic Strain Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
UCRPLW (Viscoplastic) Input of Creep Factors for Power Law Implicit Creep . . . . . . . . . . . . . . . . 359
CRPLAW (Viscoplastic) Input of Explicit Viscoplastic Strain Rate Law . . . . . . . . . . . . . . . . . . . . . . 361
NASSOC Input of a Nonassociated Flow Law . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
ZERX Calculation of Equivalent Stress. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
YIEL Calculation of Current Yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
ASSOC Input of Associated Flow Law . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
SINCER User Subroutine for Improving Accuracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

5 Viscoelasticity User Subroutines List


5 Viscoelasticity User Subroutines
CRPVIS Viscoelasticity Generalized Kelvin Material Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
TRSFAC Define a Shift Function for Thermo-Rheologically Simple (T.R.S.) Material Behavior . . . 375
HOOKVI User-defined Anisotropic Viscoelasticity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

6 Geometry Modifications User Subroutines List


6 Geometry Modifications User Subroutines
UFXORD Coordinate Generation or Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
UFCONN Connectivity Generation or Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
MAP2D Boundary Node Coordinates Modification in Mesh2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
USIZEOUTL Local Refinement Definition for 2-D Remeshing with Advancing Front Mesher . . . . . 386
UMAKNET User-defined Remeshing Routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
UPNOD Update Nodal Positions in Flow Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
UACTIVE Activate or Deactivate Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
REBAR Input of Rebar Positions, Areas and Orientations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
UFRORD Rezoning Coordinate Generation or Modification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
URCONN Rezoning Connectivity Generation or Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
USPLIT User-defined Criterion to Split a Two-dimensional Body . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
UCOORD Relocate Nodes Created During Adaptive Meshing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
UADAP User-defined Error Criterion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
UCRACKGROW Definition of Crack Growth Direction and Crack Growth Increment
for the VCCT Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
UDELAM User-defined Delamination Index for Delamination Feature . . . . . . . . . . . . . . . . . . . . . . . 402
USPLIT_MESH User Subroutine for Splitting Up a Mesh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
UADAP2 User-defined Unrefinement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
UADAPBOX User-defined Region For Local Adaptive Meshing . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
8 Marc Volume D: User Subroutines and Special Routines

UCRACK_PARIS Define the Crack Growth Increment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409


UTRANS Implement Local Coordinate System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
USHELL Modify Thickness of Shell Elements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
UTHICK User-specified Nodal Thicknesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
UACTUAT Prescribe the Length of an Actuator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

7 Output Quantities User Subroutines List


7 Output Quantities User Subroutines
PLOTV User-selected Postprocessing of Element Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
UPOSTV User-selected Postprocessing of Nodal Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
UPSTNO User-selected Postprocessing of Nodal Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
IMPD Output of Nodal Quantities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
ELEVAR Output of Element Quantities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
ELEVEC Output of Element Quantities in Harmonic Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
INTCRD Output of Integration Point Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
UBGINC Beginning of Increment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
UEDINC End of Increment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
UBGITR Beginning of Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
UBGPASS Beginning of Pass in Coupled Analyses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
UELOOP Beginning of Element Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441

8 Hydrodynamic Lubrication User Subroutines List


8 Hydrodynamic Lubrication User Subroutines
UBEAR Input of Spatial Orientation of Lubricant Thickness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
UGROOV Input of Groove Depths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
URESTR Input of Nonuniform Restrictor Coefficients. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
UTHICK (Hydrodynamic Lubrication) Generation or Modification of Nodal Thickness
or Thickness Change Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
UVELOC (Hydrodynamic Lubrication) Generation or Modification of Nodal Velocity Vectors . . . . 449

9 Special Routines Marc Post File Processor List


9 Special Routines User Marc Post File Processor
PLDUMP13/PLDUMP2000 Marc Post File Processor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Marc Post File Layout (Revision 9 or Higher): PLDUMP 2000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Marc Post File Layout (Revision 13 or Higher): PLDUMP13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
9

10 Mathematical Utility Routines List


10 Utility Routines
DDOT Inner Product of Two Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
GMADD Matrix Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
GMPRD Matrix Product . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
GMSUB Matrix Subtract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
GMTRA Matrix Transpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
GTPRD Transpose Matrix Product . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
INVERT Invert Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
INV3X3 Invert 3 x 3 Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
MCPY Matrix Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
PRINCV Find Principle Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
SCLA Set Matrix to Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529

11 Considerations for Parallel Processing


Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

Auxiliary Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531


DOMFLAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

Reading Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532

Sharing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534

12 Code Coupling Interface User Subroutines and Utility List


12 Code Coupling Interface
CPLREG_INIT Initialization of a Coupling Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
CPLREG_EXCHANGE Exchange Data on a Coupling Region . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
CPLREG_FINALIZE Finalize the Coupling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
CPLREG_FIND_NAME Find Coupling Regions by Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
CPLREG_GET_INFO Get General Information about a Coupling Region . . . . . . . . . . . . . . . . . . . . 545
CPLREG_GET_QUANTS Get the Prescribed Quantities on a Coupling Region . . . . . . . . . . . . . . . 547
CPLREG_GET_MESH Get the Mesh of a Coupling Region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
CPLREG_GET_GLOBAL_VALUES Get the Values of a Global Quantity . . . . . . . . . . . . . . . . . . . . 551
CPLREG_GET_NODE_VALUES Get the Values of a Nodal Quantity at a Coupling Region . . . . . 552
CPLREG_GET_ALL_NODE_VALUES Get the Values of a Nodal Quantity at a Coupling Region . 555
CPLREG_PUT_GLOBAL_VALUES Put the Values of a Global Quantity . . . . . . . . . . . . . . . . . . . . 558
CPLREG_PUT_NODE_VALUES Put the Values of a Nodal Quantity at a Coupling Region. . . . . . 559
CPLREG_PUT_ALL_NODE_VALUES Put the Values of a Nodal Quantity at a Coupling Region . 561
10 Marc Volume D: User Subroutines and Special Routines

CPLREG_PUT_EDGE_VALUES Put Edge Data at Coupling Regions . . . . . . . . . . . . . . . . . . . . . 563


CPLREG_PUT_ALL_EDGE_VALUES Put Edge Data at Coupling Regions . . . . . . . . . . . . . . . . . 565
CPLREG_PUT_FACE_VALUES Put Face Data at Coupling Regions . . . . . . . . . . . . . . . . . . . . . . 567
CPLREG_PUT_ALL_FACE_VALUES Put Face Data at Coupling Regions. . . . . . . . . . . . . . . . . . 569
CPLREG_PUT_ELEM_VALUES Put Element Data at Coupling Regions . . . . . . . . . . . . . . . . . . . 571
CPLREG_PUT_ALL_ELEM_VALUES Put Element Data at Coupling Regions . . . . . . . . . . . . . . . 573

A User Subroutines, Special Routines, and Utility Routines List


Chapter 1 Introduction
Marc Volume D: User Subroutines and Special Routines

1 Introduction

Common Blocks Description 12



Note on Double Precision 12

Element Result Database Utility Routine 16
Nodal Results Database Utility Routine 17

Table Evaluation Routine 20

MATDAT Common Block 22
CONCOM Common Block 28
ELMCOM Common Block 34

BCLABEL Common Block 40
Internal Data Structure 42
12 Marc Volume D: User Subroutines and Special Routines
Common Blocks Description

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.

Common Blocks Description


Often, when using a user subroutine, more information is needed than is provided through the call
arguments. Almost all information is available through common blocks. Much of the information
provided below is already available but occasionally, especially in older subroutines, it is not.
All common blocks can be accessed by the user by including them in the user subroutine. The syntax
to use in the user subroutine is:
include yyy
where yyy is the name of the common block. Note that the word include must begin after column 6
and that the common block name must be within single quotes. A path to the Marc installation directory
does not need to be provided.

Note on Double Precision


Marc is written completely in double precision. Hence, on all machines, an IMPLICIT REAL *8 (A-H,
O-Z) statement is required in the user subroutines. This is to ensure that variables passed between Marc
and the user subroutine are compatible and to ensure that any common blocks included are correct.

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
Chapter 1 Introduction 13
Format

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

In a coupled analysis, reference variable IPASS to determine if the current iteration is a stress or heat
transfer iteration:

IPASS = 1 STRESS
IPASS = 2 HEAT TRANSFER
IPASS = 3 FLUIDS
IPASS = 4 JOULE HEATING
IPASS = 5 DIFFUSION
IPASS = 6 ELECTROSTATICS
IPASS = 7 MAGNETOSTATIC
IPASS = 8 ELECTROMAGNETICS
AVAILABLE THROUGH
include concom

The following quantities are available in user subroutines which are in an element loop:

ELEMENT NUMBER: M
AVAILABLE THROUGH
include far
ELSTO ELEMENT NUMBER: N
INTEGRATION POINT NUMBER: NN
USER LAYER NUMBER: KCUS(1)
INTERNAL LAYER NUMBER: KCUS(2)
14 Marc Volume D: User Subroutines and Special Routines
Format

AVAILABLE IN
include lass

NUMBER OF NODES IN ELEMENT: NNODE


AVAILABLE IN
include elmcom

NUMBER OF DIRECT COMPONENTS OF STRESS: NDI


NUMBER OF SHEAR COMPONENTS OF STRESS: NSHEAR
SIZE OF STRESS-STRAIN LAW: NSTRM1
ELEMENT TYPE: JTYPE
NUMBER OF LAYERS PER ELEMENT: NSTRM2
NUMBER OF INT. PTS PER ELEMENT: INTEL
NUMBER OF GEN. STRESS COMP. PER ELEMENT: NGENEL
AVAILABLE THROUGH
include elmcom
MAXIMUM NUMBER OF LAYERS PER ELEMENT: NEQST
MAXIMUM NUMBER OF INT. PTS PER ELEMENT: NSTRES
AVAILABLE THROUGH
include nzro1

To determine the coordinates of integration point NN of element M and to place these coordinates in array
CCINT, use the following procedure:

include lass
include dimen
include space
include heat
include array4
DIMENSION CCINT(12)
LA1 = ICRXPT + (NN-1)*NCRDMX + LOFR
D0 II = 1, NCRD
CCINT(II) = VARSELEM(LA1)
LA1 = LA1 + 1
ENDDO

Note: This is only available after the first stiffness matrix assembly.
Chapter 1 Introduction 15
Format

To obtain the array of internal node numbers of an element, use variable LM:
include blnk
The first NNODE numbers of LM are the internal node numbers.
To determine the internal node number LINT of user (external) node number LEXT, use the following
function call:
LINT = NODINT(LEXT)
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 which contact body (mybody) an element belongs to, use:
MYBODY = GETBODYID (MEXT)
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)
Note that these coordinates will be in the global coordinate system.
To transform a local vector from global coordinate system to the user-defined system use:
CALL UT_TRANSF(0,DDNODE,LEXT,NDEG)
16 Marc Volume D: User Subroutines and Special Routines
Element Result Database Utility Routine

where DDNODE is the local vector which will be replaced, and LEXT and NDEG are the user node number
and the number of the degrees of freedom.
To transform a local vector from the local system back to the global system use:
CALL UT_TRANSF(1,DDNODE,LEXT,NDEG)

Element Result Database Utility Routine


To facilitate extraction of solution results, it is possible to use the ELMVAR utility routine. This utility
routine can be called from any user subroutine that is within an element loop. ELMVAR is used in
conjunction with the Marc post element post codes to return the calculated values to the user.
ELMVAR is called with the following header:

CALL ELMVAR (ICODE,M,NN,KCUS,VAR)


where:

ICODE is the standard post code.


M is the users 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
Chapter 1 Introduction 17
Nodal Results Database Utility Routine

Table 1-1 Element Based User Subroutines


CUPFLX NEWSV UCOHESIVET UELOOP URESTR VSWELL
ELEVAR ORIENT UCOMPL UFINITE URPFLO WKSLP
ELEVEC ORIENT2 UCRACK UHTCOE USELEM YIEL
FILM PLOTV UDAMAG UHTCON USHELL
FLUX REBAR UDELAM UINSTR USHRET
NASSOC UCOHESIVE UELDAM UMDCOE UWELDFLUX

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

user code to define user


RETURN
END

Nodal Results Database Utility Routine


Nodal values can be extracted from the Marc database by means of the NODVAR utility routine. This
routine can be called from any user subroutine.
NODVAR is called with the following header:

CALL NODVAR(ICOD,NODEID,VALNO,NQNCOMP,NQDATATYPE)
18 Marc Volume D: User Subroutines and Special Routines
Nodal Results Database Utility Routine

where:

Input:
NODEID is the user node number.
ICOD 0 = Coordinates 32 = Modal mass
1 = Displacement 33 = Rotational modal mass
2 = Rotation 34 = Contact normal stress*
3 = External force 35 = Contact normal force*
4 = External moment 36 = Contact friction stress*
5 = Reaction force 37 = Contact friction force*
6 = Reaction moment 38 = Contact status*
7 = Fluid velocity 39 = Touched contact bodies*
8 = Fluid pressure 40 = Not available
9 = External fluid force 41 = Pyrolyzed mass density
10 = Reaction fluid force 42 = Mass rate of gas
11 = Sound pressure 43 = Solid density rate
12 = External sound source 44 = Liquid density rate
13 = Reaction sound source 45 = Coke density rate
14 = Temperature 46 = Tying force**
15 = External heat flux 47 = Coulomb force
16 = Reaction heat flux 48 = Tying moment**
17 = Electric potential 65 = Near contact distance
18 = External electric charge 66 = Breaking index (normal)
19 = Reaction electric charge 67 = Breaking index (tangential)
20 = Magnetic potential 68 = Breaking index
21 = External electric current 69 = Delamination index (normal)
22 = Reaction electric current 70 = Delamination index (tangential)
23 = Pore pressure 71 = Delamination index
24 = External mass flux 72 = Recession
* 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.
Chapter 1 Introduction 19
Nodal Results Database Utility Routine

25 = Reaction mass flux 73 = Glue deactivation status


26 = Bearing pressure 74 = VCCT failure index
27 = Bearing force 75 = Remesh displacement
28 = Velocity 76 = Lorentz force
29 = Rotational velocity 77 = Wear Index
30 = Acceleration 78 = Wear Rate
31 = Rotational acceleration
Output:
VALNO*** is the current value of the item requested.
NQNCOMP is the number of components returned.
NQDATATYPE is the type of data returned.
0 = Default 3 = Harmonic real
1 = Modal 4 = Harmonic real/imaginary
2 = Buckle 5 = Harmonic magnitude/phase
* 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.

icods Availability
1-6 only for structural analysis or a multiphysics analysis using structures. The
rotations/moments are not applicable if there are only displacement degrees of
freedom.
7-10 only for a fluid computation of fluid-thermal computation.
11-13 only for a modal acoustic analysis.
14-16 only for a heat transfer simulation or a coupled thermal analysis.
17-19 only for electrostatic analysis.
20-22 only for magnetostatic analysis.
23-25 for either a pore pressure calculation of a diffusion analysis
26-27 only for hydrodynamic bearing analysis.
28-31 only for dynamic simulations. The rotations/moments are not applicable if there are
only displacement degrees of freedom.
32-33 only for modal dynamic simulations.
20 Marc Volume D: User Subroutines and Special Routines
Table Evaluation Routine

icods Availability
34-39 only for structural contact analysis.
41-43 only if Prolysis calculation.
44 only if Pyrolysis calculation and water model activated.
45 only if Pyrolysis calculation and coking model activated.
46 and 48 only if tying, servo links, RBE2, RBE3, and requested as nodal post code.
47 only if coupled structural-electrostatic analysis.
65 only for contact analysis and nodal post code 65 is requested.
66-71 and 73 only if the breaking glue capability is requested in the CONTACT option.
69-71 only if the DELAMINATION option is activated.
72 for either an analysis that includes ABLATION parameter or WEAR option.
75 only for a simulation that includes global adaptive meshing.
76 only for a coupled structural-magnetostatic analysis.
77-78 only for a wear analysis.

If the nodvar utility is called from the IMPD user subroutine, the vectors are the values at the end of the
increment; otherwise, they may be the values at the end of the previous increment.
See the UPSTNO user subroutine for an example of how this utility can be used.

Table Evaluation Routine


When using the table driven input format, it is often useful to evaluate the value of a table in a user
subroutine. This may be done with the TABVA2 user subroutine from many of the user routines. In
particular, it can be done from those routines listed in Table 1-1.
This is based on the fact that the value of the independent variable (s) has been defined in common block
CTABLE. In such cases, the evaluation may be obtained by doing the following:

CALL TABVA2(REFVAL, EVALUE, IDTABLE, 0, 0)


where:

REFVAL is the reference value


EVALUE is the valuated value
IDTABLE is the table id given

The table must have been defined in the input file.


Chapter 1 Introduction 21
Table Evaluation Routine

For example, in a cracking problem, one might want to have the strain softening modulus as a function
of the temperature dependent Youngs modulus, which is not available in the UCRACK user subroutine.
The following procedure can be used:

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, TEMPERATURE FIRST
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
C AT THE CURRENT TEMPERATURE
22 Marc Volume D: User Subroutines and Special Routines
MATDAT Common Block

C
ESOFT=0.1D0*EVALUE
C
RETURN
END

MATDAT Common Block


The material identification numbers (1,2,3, etc.) for cross-referencing to various quantities such as
TEMPERATURE EFFECTS, WORK HARD, etc., must be used in user subroutines: ANELAS, HOOKLW,
ANPLAS, ANEXP, ANKOND, ORIENT, CRPLAW, VSWELL, etc. The common block elmcom contains
the material identification number MATUS for each material type.
In addition, the reference values of the material properties as given in the model definition section can be
obtained in common block matdat. The contents of this common block correspond to the contents of
array rprops as available in the ANELAS and HOOKLW user subroutines according to:

et(3) Young's moduli rprops(1-3)


xu(3) Poisson's ratios rprops(4-6)
rho mass density rprops(7)
shrmod(3) shear moduli rprops(8-10)
coed(3) coefficient of thermal expansion rprops(11-13)
yield(1) yield stress rprops(14)
yield(2) ORNL 10th cycle yield stress rprops(15)
yield(3) ORNL reversed plasticity yield stress rprops(16)
yrdr(3) direct ratio's for Hill anisotropic plasticity rprops(17-19)
yrsr(3) shear ratio's for Hill anisotropic plasticity rprops(20-22)
condu(3) conductivities rprops(23-25)
spht specific heat rprops(26)
condv(3) resistivity rprops(27-29)
rhoht mass density for heat transfer rprops(30)
emisv emissivity rprops(31)
costpv cost per unit volume rprops(32)
costpm cost per unit mass rprops(33)
permeab(3) magnetic permeability rprops(34-36)
reluct(3) reluctance rprops(37-39)
permair permeability of air rprops(40)
Chapter 1 Introduction 23
MATDAT Common Block

permit(3) electrical permittivity rprops(41-43)


econd(3) electrical conductivity rprops(44-46)
viscosit viscosity rprops(47)
tk21 thermal conductivity 21 rprops(48)
tk31 thermal conductivity 31 rprops(49)
tk32 thermal conductivity 32 rprops(50)
r21 electrical resistivity 21 rprops(51)
r31 electrical resistivity 31 rprops(52)
r32 electrical resistivity 32 rprops(53)
c10 Mooney parameter C10 rprops(54)
c01 Mooney parameter C01 rprops(55)
c11 Mooney parameter C11 rprops(56)
c20 Mooney parameter C20 rprops(57)
c30 Mooney parameter C30 rprops(58)
bulk bulk modulus (Mooney, Ogden, Arruda-Boyce, Gent) rprops(59)
amohr Amohr rprops(60)
enthalpy Enthalpy rprops(61)
flperm(3) fluid permeability rprops(62-64)
phfrac1 fraction of phase rprops(65)
chabpr(10) Chaboche material data rprops(66-75)
formls forming limit rprops(76)
flden fluid density for diffusion rprops(77)
reftempen reference temperature for enthalpy rprops(78)
frctiso fraction for isotropic hardening rprops(79)
flbulk bulk modulus of fluid in diffusion analysis rprops(80)
poros porosity rprops(81)
flperm2(3) fluid permeability (21, 31, 32) rprops(82-84)
ogmu reference (Odgen or Foam) rprops(85)
ogalpha reference (Ogden or Foam) rprops(86)
ogbeta reference (Foam) rprops(87)
vscdevtrm reference deviatoric relaxation time rprops(88)
vscvoltrm reference volumetric relaxation time rprops(89)
vscfunct(9) reference viscoelastic values rprops(90-98)
wgtmol molecular weight rprops(99)
24 Marc Volume D: User Subroutines and Special Routines
MATDAT Common Block

errate energy release rate; used for interface elements rprops(100)


dispcrit critical opening of displacement; used for interface elements rprops(101)
dispmax maximum opening displacement or exponential decay factor; rprops(102)
used for interface elements
fnorsh shear-normal stress ratio; used for interface elements rprops(103)
xstst NLELAST: reference value for stress-strain curve rprops(104)
xyoung NLELAST: reference value for Young in compression rprops(105)
xpois NLELAST: reference value for Poisson in compression rprops(106)
xtens NLELAST: reference value of tension cutoff rprops(107)
xcompr NLELAST: reference value of compression cutoff rprops(108)
strdpe(3) NLELAST: strain dependent E11, E22, E33 rprops(109-111)
strdpp(3) NLELAST: strain dependent v12, v23, v32 rprops(112-114)
strdpg(3) NLELAST: strain dependent G12, G23, C31 rprops(115-117)
ve11 first term of volumetric strain energy function rprops(118)
ve12 second term of volumetric strain energy function rprops(119)
ve13 third term of volumetric strain energy function rprops(120)
ve14 fourth term of volumetric strain energy function rprops(121)
vel15 fifth term of volumetric strain energy function rprops(122)
qparm shear-normal energy ratio; used for interface elements rprops(123)
vis_zeta viscous energy dissipation factor; used for interface elements rprops(124)
vis_refrate reference rate for viscous energy dissipation; user for rprops(125)
interface elements
comp_stiff compression stiffening factor; used for interface elements rprops(126)
sigma_max Maximum stress for NLELAST type 7 material rprops(127)
hytmoon(1) Mooney parameter C02 rprops(128)
hytmoon(2) Mooney parameter C21 rprops(129)
hytmoon(3) Mooney parameter C12 rprops(130)
hytmoon(4) Mooney parameter C03 rprops(131)
hytmoon(5) Mooney parameter C40 rprops(132)
hytmoon(6) Mooney parameter C31 rprops(133)
hytmoon(7) Mooney parameter C22 rprops(134)
hytmoon(8) Mooney parameter C13 rprops(135)
hytmoon(9) Mooney parameter C04 rprops(136)
hytmoon(10) Mooney parameter C50 rprops(137)
Chapter 1 Introduction 25
MATDAT Common Block

hytmoon(11) Mooney parameter C41 rprops(138)


hytmoon(12) Mooney parameter C32 rprops(139)
hytmoon(13) Mooney parameter C23 rprops(140)
hytmoon(14) Mooney parameter C14 rprops(141)
hytmoon(15) Mooney parameter C05 rprops(142)
condin conduction for thermal cohesive material rprops(143)

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):

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
26 Marc Volume D: User Subroutines and Special Routines
MATDAT Common Block

iprops(19) integration point number of centroid


iprops(20) element control flag for isotropic material
iprops(21) internal element type of current element
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
Chapter 1 Introduction 27
MATDAT Common Block

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)
iprops(39) element control flag for rebar elements
iprops(40) internal material identifier of the current element; for a composite element, this is
the composite group number
iprops(41) internal element material identifier of the current element
iprops(42) element control flag for hydrostatic stress dependent plasticity law
1: linear Mohr-Coulomb
2: parabolic Mohr-Coulomb
3: Buyokozturk
iprops(43) element control flag for Mooney-Rivlin material behavior
iprops(44) not used
iprops(45) number of coordinates associated with the current element
iprops(46) number of degrees of freedom per node of the current element
iprops(47) number of direct stress components of the current element
iprops(48) number of generalized strains of the current element
iprops(49) number of nodes of the current element
iprops(50) element control flag to indicate that mid-increment method is not used
iprops(51) element control flag for orthotropic or anisotropic material behavior
iprops(52) control flag to indicate that interlaminar shear is not calculated
iprops(53) number of (membrane) strains per elements if no interlaminar shear calculation is
performed; otherwise
1 for 2-D beam element 45
3 for 3-D thick shell elements
iprops(54) number of shear stress components of the current element
iprops(55) not used
iprops(56) number of transverse shear stresses
1 for 2-D beam element 45
2 for 3-D thick shell elements
iprops(57) element control flag for progressive cracking
iprops(58) number of generalized strains of the current element
28 Marc Volume D: User Subroutines and Special Routines
CONCOM Common Block

iprops(59) internal Marc flag


iprops(60) element control flag to indicate that the current element uses reduced integration
with hourglass control

CONCOM Common Block


Two common blocks might be particularly useful for advanced usage in Marc. Common block concom
contains most of the program controls in Marc. The variables and their meaning are given below. Unless
otherwise indicated, if the variable has a value of zero, it is false, and a value of one indicates true.

iacous acoustic analysis


iasmbl reassemble stiffness matrix
iautth auto therm or auto therm creep
ibear hydrodynamic bearing
icompl complex harmonic analysis
iconj EBE iterative solver
icreep explicit creep
ideva(32) debug print flags
idyn dynamic analysis type (0, 1, 2, 3, 4, 5) based on the DYNAMIC parameter.
idynt permanent dynamic analysis type (0, 1, 2, 3, 4, 5)
ielas elastic reanalysis or Fourier
ielcma flag to indicate this pass is a electromagnetic analysis (0,1,2)
ielect flag to indicate this pass is a electrostatic analysis
iform contact
ifour Fourier
iharm harmonic analysis
ihcps thermal-mechanical or thermal-Joule-mechanical coupled analysis
iheat flag to indicate this pass is heat transfer analysis
iheatt flag to indicate that a heat transfer is performed in this job
ihresp indicate that currently in a harmonic subincrement
ijoule flag to indicate that Joule heating is performed in this job
ilem indicates in which part of element assembly
ilnmom indicates whether a coupled soil analysis (0,1,2)
iloren DeLorenzi calculation required
inc increment number
Chapter 1 Introduction 29
CONCOM Common Block

incext creep extrapolation


incsub subincrement number
ipass pass number for coupled analysis
ipass = 1 stress pass
= 2 heat transfer
= 3 fluids
= 4 electrical pass in Joule heating
= 5 diffusion
= 6 electrostatics
= 7 magnetostatics
= 8 electromagnetics
iplres dynamic, buckling or heat transfer second global matrix required
ipois Poisson analysis for this pass
ipoist Poisson flag for this job
irpflo Eulerian - rigid plastic flow
ismall small displacement analysis for this pass
ismalt small displacement flag for this job
isoil soil analysis
ispect spectrum response
ispnow perform spectrum response now
istore update stress strain information.
iswep currently performing eigenvalue extraction
ithcrp thermal creep analysis
itherm temperature dependent properties are present
iupblg follower force
iupdat update Lagrange
jacflg Lanczos eigenmethod
jel elastic increment
jparks Fracture mechanics by Park method
largst finite strain
lfond distributed vs. foundation flag
loadup nonlinearity has occurred
loaduq nonlinearity has occurred
lodcor load correction is activated
30 Marc Volume D: User Subroutines and Special Routines
CONCOM Common Block

lovl analysis phase


1 - Memory Allocation 13 - History Definition Input
2 - Model Definition Input 14 - Mass Matrix
3 - Distribute Load 15 - Fluid-Solid
4 - Stiffness Matrix 16 - Fluid- Solid
5 - Solver 17 - Vector Transformations
6 - Stress Recovery 20 - Rezoning
7 - Output 21 - Convergence Testing
8 - Operator Assembly 22 - Lanczos
23 - Global Adaptive Meshing
lsub flag to indicate which part of calculation
magnet flag to indicate this pass is magnetostatic
ncycle cycle number
newtnt permanent Newton-Raphson flag (0, 1, 2, 3, 8). See the CONTROL option.
newton Newton-Raphson flag for this pass (0, 1, 2, 3, 8)
noshr transverse shears included
linear storage of betas, etc.
ivscpl viscoplastic
icrpim implicit creep
iradrt radial return
ipshft control on inclusion of initial stress terms (0, 1, 2, 3, 4). See the CONTROL
option.
itshr transverse shear
iangin orientation angle
iupmdr update-anisotropy flag
iconjf sparse conjugant gradient solver
jincfl not used
jpermg indicates that permanent magnets are included
jhour indicates that there are some reduced integration with hourglass
control elements
isolvr solver flag (0, 2, 4, 6, 8, 9, 10). See the SOLVER option.
jritz indicates that Ritz vectors are used in eigenvalue analysis
jtable flag indicates that tables are used for boundary conditions
jshell indicates presence of shell elements
Chapter 1 Introduction 31
CONCOM Common Block

jdoubl indicates that double eigenvalue extraction is used with Inverse Power Sweep
method
jform not used
jcentr internal flag
imini reduced storage flag for the ELASTIC parameter
kautth flag used in the AUTO THERM option
iautof flag indicating that global adaptive meshing is active
ibukty convergence problem with buckling flag
iassum assumed strain flag
icnstd constant dilatation flag
icnstt not used
kmakmas recalculate mass matrix flag
imethvp implicit viscoplastic procedure
iradrte flag for large strain elastic material
iradrtp radial return flag for plastic material
iupdate updated Lagrange flag for elastic material
iupdatp updated Lagrange flag for elastic-plastic material
ncycnt number of times the increment restarted with the first iteration in automatic
procedures. This variable is used to stop the analysis with exit 3008 if it
becomes to high to prevent infinite loop in the program.
marmen = 0 if Marc used for normal analysis
= 1 if Marc used as reader via Marc Mentat
idynme implicit dynamic analysis
= 0 for Newmark-beta
= 1 for Single Step Houbolt (SSH)
ihavca = 0 if Cauchy stresses not stored separately
= 1 if Cauchy stresses stored separately
ispf Super Plastic Forming analysis
kmini used for minimizing memory needed for element quantities if fast elastic-
plastic material libraries of Superform are used
imixed flag set to 1 in a Rigid Plastic analysis if some part of the material in the model
has elasto-plastic material behavior
largtt flag to preserve finite strain plasticity flag for the elasto-plastic part of the
model while doing the rigid-plastic part
kdoela flag to trigger assembly in elastic analysis
32 Marc Volume D: User Subroutines and Special Routines
CONCOM Common Block

iautofg flag for analysis with MSC.SuperForm


ipshftp flag to save the control for inclusion of the initial stress matrix ipshft during
automatic increment restart feature
idntrc variable to indicate that the end of an automatic load stepping could not be
reached within specified number of increments. The program stops with exit
number 3003
ipore flag to indicate this pass is a diffusion analysis
jtablm flag to indicate that tables are to be used for material properties
jtablc flag to indicate that tables are to be used for the CONTACT option
isnecma flag to indicate expanded film capabilities (not active in 2003)
itrnspo flag to indicate steady state transport loadcase
imsdif flag to indicate this pass is a diffusion analysis (not active in 2003)
jtrnspo flag to indicate SS-ROLLING analysis
mcnear flag to indicate that near thermal contact behavior is included between two
bodies
imech flag to indicate this pass is a mechanical analysis
imecht flag to indicate that mechanical analysis will be performed in this job
ielcmat flag to indicate electromagnetic analysis will be performed in this job
ielectt flag to indicate electrostatic analysis will be performed in this job
magnett flag to indicate magnetostatic analysis will be performed in this job
imsdift flag to indicate diffusion analysis will be performed in this job
noplas flag to indicate no material nonlinearity - reduce memory requirements
jtabls flag to indicate that tables are to be used for the SPRINGS option
jactch flag to indicate elements have been activated or deactivated
jtablth flag to indicate that tables are to be used for the GEOMETRY option
kgmsto = 1 store geometry in old format,
= 2 store geometry based on geometry ID
jpzo flag to indicate piezoelectric analysis
ifricsh flag to indicate that nodal based friction used
iremkin flag to indicate gradual removal of kinematic boundary condition (table driven
input)
iremfor flag to indicate gradual removal of reaction force (table driven input)
ishearp flag to indicate that shear panel elements are in the model
jspf = 1 first increment of superplastic analysis
machining flag to indicate that machining option is active
Chapter 1 Introduction 33
CONCOM Common Block

jlshell flag to indicate that shells are present


icompsol indicates the presence of composite solids in the mesh
iupblgfo follower force point loads used
jcondir contact priority is used
nstcrp variable to indicate type of tangent in the implicit Maxwell Creep model or
implicit viscoplastic creep model (0=elastic, 1= secant and 22 radial return)
nactive number of active physics
ipassref default physics type
nstspnt not used
ibeart permanent flag for hydrodynamic bearing
icheckmpc indicate if check mpc is activated
noline deactivate iterative contact if increment almost complete
icuring set to 1 if the curing is included for the heat transfer analysis
ishrink set to 1 if shrinkage strain is included for mechanical analysis
ioffsflg 1 for small displacement beam/shell offsets
2 for large displacement beam/shell offsets
isetoff 0 do not apply beam/shell offsets
1 apply beam/shell offsets
ioffsetm minimum value of offset flag
iharmt harmonic analysis flag
inc_incdat flag to record increment number of a new loadcase
iautospc flag for AutoSPC option
ibrake brake squeal in this increment
icbush set to 1 if cbush elements present in model
istream_input set to 1 for streaming input calling Marc as library
iprsinp set to 1 if pressure input introduced so other variable such as h can be a function
of pressure
ivlsinp set to 1 if velocity input introduced so other variables such a h can be a function
of velocity
ifirst_time internal
ipin_m number of beam elements with pin flag
jgnstr_glb global control over pre or fast integrated composite shells
imarc_return Marc return flag for streaming input control
iqvcimp in nonzero, then the number of QVECT boundary conditions
nqveceid number of QVECT boundary conditions where emissivity/absorption id
34 Marc Volume D: User Subroutines and Special Routines
ELMCOM Common Block

istpnx 1 if to stop at end of increment


igenoa 1 if Genoa interface is used
laxisymm set to 1 if axisymmetric analysis
jbreadglue set to 1 if breaking glued option is used
lglstif 1 if ddm and direct global solve is performed
jfastasm fast stress-strain relationship based on Superform code
lwear set to 1 if wear model, set to 2 if wear model and coordinates updated
lwearcf set to 1 to store nodal coefficient of friction for wear calculation
imixmeth set to 1 then use nonlinear mixture material - allocate additional memory
lelcmadyn flag for magnetodynamics
0 electromagnetics using Newmark beta
1 transient magnetics using backward Euler
idinout flag to control if inside out elements should be deactivated
lgena_meth 0 generalized alpha parameters depend on whether or not contact is
flagged
10 generalized alpha parameters are optimized for a contact analysis
11 generalized alpha parameters are optimized for an analysis without
contact
magf_meth method to compute Lorentz force in magnetostatic structural
1 virtual work method
2 Maxwell stress tensor
nofsopt flag for offsets sol 400 only
non_assumed no assumed strain formulation (forced), for Sol400 only

ELMCOM Common Block


In subroutines that are within an element loop, information about a particular element can be found in
common block elmcom. The variables in common block elmcom and their meaning are as follows:

ianels anisotropy flag


ianiso anisotropy flag
irebar rebar element flag
icolps indicates collapsed element
icomps composite
icrack cracking
Chapter 1 Introduction 35
ELMCOM Common Block

ictrns no longer used


idamag damage
ianmat anisotropic elastic constants given in input
igenpl generalized plasticity
iherr Herrmann element (0, 1, 2)
0 not Herrmann element
1 - higher-order Herrmann element
2 - lower-order Herrmann element
intel number of integration points
intin integration point number if centroid
intpre number of integration points for distributed
iort curvilinear coordinates
ipela hypoelastic
irheol thermal rheologically simple
ishell shell
isnte integration point number if centroid
isotrp elastic material
ityp internal element type
iupcls -3, -2, -1, 0 - No updated Lagrange for this element type
1 - supports updated Lagrange
2 - supports updated Lagrange; results given with respect to convected
coordinate system
3 - supports updated Lagrange; results given with respect to curvilinear
convected coordinate system
ivisc Kelvin viscoelastic flag
ivisel Hereditary integral viscoelastic flag
jcamcl Cam Clay model
jhip powder model
joakr Oak Ridge model
joakrm Type of Oak Ridge model
jogden Ogden
jsoil Soil
jtype element type
jviscp viscoplastic
36 Marc Volume D: User Subroutines and Special Routines
ELMCOM Common Block

jvisel hereditary integral viscoelastic


kinhrd kinematic hardening
lbend pipe bend
lclass element class
0 pipe element 8 - 3-D solid
1 - truss element 9 - Fourier element
2 - shell 10 - axi with twist
3 - none 11 - axisymmetric shell
4 - plane stress 12 - open section beam
5 - plane strain 13 - closed section beam
6 - generalized plane strain 14 - membrane
7 - axisymmetric solid 15 - gap
lheat heat transfer element
lnoint no integration points
lrebar rebar element
matno material or composite ID
mats internal material id (see matus in this common block for user material ID)
mohrc Mohr-Coulomb (0, 1, 2)
0 - not Mohr-Coulomb
1 - linear Mohr-Coulomb
2 - quadratic Mohr-Coulomb
mooney Mooney
mroz Mroz - not supported
ncrdel number of coordinates
ndegel number of degrees of freedom
ndi number of direct components
ngenel number of generalized strains
nnode number of nodes
nomid mid-increment not used
noniso anisotropic
kkdum1 dummy
nregs pointer to transverse shear
nshear number of shears
nstran number of strains
Chapter 1 Introduction 37
ELMCOM Common Block

ntshr number of transverse shears


ipgrcr progressive cracking
ngens number of generalized strains
jparel element running in parallel mode
jhoure this element is a reduced integration element with hourglass control
jfoam foam model
nnodg number of nodes per element, excluding extra nodes for Herrmann and generalized
plane strain
nstrm1 number of stresses stored per section point
nstrm2 number of stress points stored per integration point (layers for shell elements, cross-
section point for beam elements, 1 for continuum elements
irpfle control flag whether this element needs rigid plastic analysis (irpfle = 1) or not
(irpfle = 0)
jpowlw control flag for various work hardening models
= 1 power law
= 2 rate power law
= 3 Not Available
= 4 Johnson-Cook
jhamlt not used
jyada flag to use Yada grain size model (jyada = 1) or not (jyada = 0)
jintel integration points to store stresses (jintel = intel except for the CENTROID
parameter when jintel = 1)
jvarcon not used
jthpor pyrolysis model (not available in 2003)
iphase phase number
lphase flag indicating this material has multiple phases
igasket gasket material group number
ipreten cross-section number to which this element belongs
ilinel linear elastic material
idgeom geometry id for this element
lmbody body number of element only valid in stiffness, mass, and recovery
ipiezo = 1 stress based piezoelectric element
= 2 strain based piezoelectric element
jcompsol flag indicating element is a composite continuum
jshapemem flag indicating shape memory material
38 Marc Volume D: User Subroutines and Special Routines
ELMCOM Common Block

intstf number of integration points for stiffness matrix evaluation


jgnstr flagged to 1 for generalized composite shells
matus(2) two-term array for user material id and internal material ID
matus(1) = user material ID
matus(2) = internal material ID, same as mats
jcuring flagged to 1 for curing analysis of the element
jcuremt if curing rate is based upon table, then table id
jshrink flagged to 1 for cure shrinkage strain calculation for the element
jshnkmt if shrinkage law is based upon table, then table id
ioffset flag for beam-shell offset:
-1 for beams
-2 for shells
-3 for cbush
ioffsum number in list of offset elements (from 1 to n_elmoff_act)
jtopcls topology class of element
mpermtyp flag for magnetostatics new input indicating how the permeability is obtained:
0 old style
1 permeability
2 inverse permeability
3 B-H relation
4 H-B relation
jcohesive interface element
ipaddup interface element, large displacement formulation
ipshell 1 pshell formulation
2 pshell formulation for thick shell
jnlelast NLELAST model type (0 to 7)
jnlelastsy 1 if nonsymmetric (tension/compression behavior)
inlelastcp 1 if constant Poisson ratio
2 if constant Bulk modulus
inlelastct 0 conventional
1 limited tension
2 limited compression
3 limited tension and compression
jslosh flagged to 1 for solid shell element (185)
Chapter 1 Introduction 39
ELMCOM Common Block

jgenrec 0 if generalized composite layer are not recovered


1 if generalized composite layer are recovered
nstrm2sv
jcwcon flag to see if the element node numbering is clockwise
-1 clockwise
0 before checking
1 normal
isolbeam 0 beam section does not use numerical integration (type 98, 52)
1 beam section does use numerical integration (type 98, 52)
jvpmodel flag indicating the type of viscoplastic model
jelbow set to 1 if element type 31
kmicro1 not used for Marc
istack set to 1 if solid shell element
nnodc number of corner nodes
jdelam set to 1 if composite delamination
ibeamel set to 1 if current element is a beam
iemcdel conductor and capacitance identification number for electrostatic analysis
jhill 1=von Mises, 2=Hill, 3=Barlat, 4=Generalized Anisotropic yield
jmixture flag indicating that mixture material type
jtmixture flag indicating type of thermal-strain mixture model
jcmixture flag indicating that any of the layers is mixture model type 3
matncmp composite (intenal) material number
istandard = 0 incremental plasticity - radial return procedure
= 1 incremental plasticity - mean normal procedure
igroup group number
matsav internal - previous material number
jcohesivet thermal cohesive model
= 1 linear model
= 0 user subroutine UCOHESIVET
lemimtyp conductivity/permittivity/permeability flag
40 Marc Volume D: User Subroutines and Special Routines
BCLABEL Common Block

BCLABEL Common Block


When using the table driven input format, it is often useful to know the loadcase name and/or the
boundary condition name in a user subroutine. The loadcase name is available in all user subroutines and
the boundary condition name is available in the user subroutines:

FORCEM UVELOC
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 (FORCEM(PRESS,TH1,TH2,NN,N)


INCLUDE '../COMMON/IMPLICIT'
INCLUDE '../COMMON/BCLABEL'
COMMON/LPRES3/PRNORM(3)
DIMENSION N(10)
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
Chapter 1 Introduction 41
BCLABEL Common Block

C N(2) PARAMETER IDENTIFYING THE TYPE OF LOAD


C N(3) IS THE INTEGRATION POINT NUMBER
C N(4) NOT USED
C N(5) IS THE DISTRIBUTED LOAD INDEX - NOT USED IF
C TABLE INPUT FORMAT
C N(6) =0IF CONVENTIONAL PRESSURE
C =1IF USER RETURNS 2 OR 3 COMPONENTS FOR
C N(7) PRESSURE IN GLOBAL DIRECTION
C IS THE INTERNAL ELEMENT NUMBER
C N(8) NOT USED
C N(9) GENERAL CID LOAD FLAG
C N(10) BOUNDARY CONDITION NUMBER IF TABLE INPUT
C FORMAT
C FOR DISTRIBUTED LOAD IN A GIVEN DIRECTION
C PRNORM IS THE DIRECTION COSINE OF THE DIRECTION OF
C THE LOAD WITH RESPECT TO THE GLOBAL SYSTEM
C
C*** * * *
IF(LDCASENAME.EQ.'EARLY') THEN
IF(BCNAME.EQ.'LOAD1') THEN
PRESS=
ELSEIF(BCNAME.EQ.'LOAD2') THEN
PRESS=
ELSE
WRITE(6,101) N(1),NN,LDCASENAME,BCNAME
ENDIF
ELSE
WRITE(6,101) N(1),NN,LDCASENAME,BCNAME
ENDIF
101 FORMAT(/,'*** WARNING - FORCEM FOR ELEMENT ',I10,
* ' INTEGRATION POINT',I4,' FOR LOADCASE ',A,
' BOUNDARY CONDITION ',A,' IS NOT CODED')
RETURN
END
42 Marc Volume D: User Subroutines and Special Routines
Determining the Elements or Nodes in a Set

Determining the Elements or Nodes in a Set


From within a user subroutine, it is often useful to know the elements or nodes that are members of a
user-defined set. Subroutine marc_setinf can be used to obtain this information. This routine is used as
follows:
call marc_setinf(getnam,ihav,list,ityp,inum)
where

Required Input:
GETNAME nchnam character string with setname in lower case.
Required Output:
IHAV 0 if set name is not found
1 if set name is found
LIST List of entries in set in user numbers. See note below.
ITYP 0 element set
1 node set
12 element:edge set
13 element:face set
INUM Number of entries in set

Note: if ityp=12 or ityp=13, then list contains 2*inum entries:


1...inum: element numbers
inum+1...2*inum: edge/face numbers

Internal Data Structure


Complex simulations occasionally require additional data which is not passed into the user subroutine.
This section outlines some of the data storage issues in Marc and assists in converting pre 2005 r3 user
routines to the current release.

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
Chapter 1 Introduction 43
Internal Data Structure

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)
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
The variable nelgroups is the number of element groups. The subroutine setup_elgroup sets things
up for each element group. This includes pointers like icrxpt and also makes sure the correct varselem
is used (different arrays are used for different element groups). The do iel_g loop is done over all
elements within the group. In this loop, first, the internal element number mm is defined. Then it picks up
the internal element type ityp and calls the subroutine setel for defining element properties; in this
case, we need jintel the number of integration points of this element. In the loop over integration
points, we call subroutine wrat3n for handling out-of-core element storage and defining the variable n
used for calculating the offset for each element. Then we set the pointer la1 and loop over all coordinates
and pick up the current coordinate and check for the maximum. After the loops, we take the maximum
over all domains in case we run in parallel (see Chapter 11 in this manual) and, finally, print out the
maximum value found to the output file (jobname.out).
44 Marc Volume D: User Subroutines and Special Routines
Internal Data Structure

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 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-2 lists some of the nodal vectors that have
been changed.

Table 1-2 Some Nodal Vector Changes


Old Pointer New Array
ixord xord_d
idsx dsx_d
idsxt dsxt_d
idsx1 dsx1_d
idsx2 dsx2_d
idynd dynd_d
ipload pload_d
itx tx_d
ipinc pinc_d
ixload xload_d
iptot ptot_d
icofor cofor_d
Chapter 1 Introduction 45
Internal Data Structure

Table 1-2 Some Nodal Vector Changes (continued)


Old Pointer New Array
ifrfor frfor_d
idynv dynv_d
idyna dyna_d

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)
iel=ints(ielids+ielint-1)
can be converted to
next=inoids_d(nint)
iel=ielids_d(ielint)
but the best is to use the standard utility routine instead:
next=nodext(nint)
iel=ielext(ielint)
As a guide for converting existing subroutines, consider the following simple example of printing out the
nodal coordinates to the output file.
Old code:

include space
include dimen
include array2
do i=1,numnp
write(6,*) i,(vars(ixord-1+(i-1)*ndeg+j),j=1,ncrd)
enddo
New code:

include spacevec
include dimen
do i=1,numnp
write(6,*) i,(xord_d((i-1)*ncrd+j),j=1,ncrd)
enddo
Chapter 2: User-defined Loading, Boundary Conditions, and State Variables User Subroutine List
Marc Volume D: User Subroutines and Special Routines

User-defined Loading,
Boundary Conditions, and
2 State Variables User
Subroutines List

User Subroutine Page


CREDE 102
CUPFLX 69

DIGEOM 127

FILM 85
FLOW 87
FLUX 63
FORCDF 82
FORCDT 73
FORCEM 57

GAPT 96
Chapter 2: User-defined Loading, Boundary Conditions, and State Variables 47
User Subroutine List

User Subroutine Page


INITPL 172
INITPO 173
INITSV 104
INTFTMP 107

MOTION (2-D) 113


MOTION (3-D) 116

NEWPO 174
NEWSV 105

SEPFOR 129
SEPFORBBC 131
SEPSTR 133
SEPSTR_STS 135

UABLATE 194
UABLTNORM 196
UACTGLUE 139
UBREAKGLUE 137
UBSQUEAL 147
UCAV 177
UDAMAGE_INDICATOR 149
UFAH 182
UFILM 91
UFLUXMEC 184
UFMEC 190
UFORMSN 97
UFOUND 89
UFOUR 71
UFRIC 121
UFRICBBC 124
UFTHP 185
48 Marc Volume D: User Subroutines and Special Routines

User Subroutine Page


UGLAW 187
UGMEC 192
UGROWRIGID 119
UHTCOE 141
UHTCON 144
UHTNRC 151
UINSTR 70
UMDCOE 163
UMDCON 166
UMDNRC 169
UOBJFN 179
UPRFILM 180
UQVECT 94
UREACB 175
USDATA 110
USINC 109
USINKPT 93
USSD 108
UTIMESTEP 111
UTIMP 188
UVELOC 112
UVTCOE 154
UVTCON 157
UVTNRC 160
UWEARINDEX 197
UWELDFLUX 65
UWELDPATH 67
Chapter 2: User-defined Loading, Boundary Conditions, and State Variables User Subroutine
Marc Volume D: User Subroutines and Special Routines

User-defined Loading,
Boundary Conditions, and
2 State Variables User
Subroutines
50 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.
Chapter 2: User-defined Loading, Boundary Conditions, and State Variables 51
User Subroutine

Table 2-1 User-defined Loading, Boundary Conditions, State Variables User


Subroutine Requirements
Required Parameters or
User Subroutine Model Definition Options Purpose
CREDE THERMAL LOADS Definition of state variable
including temperature.
CUPFLX COUPLE Heat generated due to inelastic
DIST FLUXES (flux type 101) behavior in coupled analysis.
DIGEOM CONTACT (2-D) Definition of rigid surface.
CONTACT (3-D)
Marc Volume C: Model Definition Options,
Table 3-11 User Subroutines for Contact
Problems
FILM HEAT or COUPLE Definition of convective heat
FILMS (Model Definition) transfer coefficient and sink
FILMS (History Definition) temperature.
FLOW HEAT Definition of mass flow rate.
CHANNEL
FLUX DIST FLUXES (Model Definition) Definition of nonuniform
DIST FLUXES (History Definition) flux input.
DIST CURRENT (Joule)
DIST MASS (Diffusion)
DIST CHARGES
DIST CURRENT (Diffusion)
DIST SOURCES (Acoustics)
FORCDF FORCDT Definition of point load or
FIXED DISP or kinematic boundary condition in a
DISP CHANGE harmonic analysis.
FORCDT FORCDT Definition of point load or
FIXED DISP or DISP CHANGE prescribed displacement in stress
FIXED TEMPERATURE or analysis. Definition of point flux or
TEMP CHANGE prescribed temperature in heat
transfer analysis.
FORCEM DIST LOADS (Model Definition) Definition of distributed load.
GAPT HEAT Definition of thermal contact gap
CONRAD GAP temperature.
INITPL INITIAL PLASTIC STRAIN Definition of initial plastic strain.
INITPO PORE Definition of initial pore pressure
INITIAL PORE in a uncoupled soil analysis.
INTFTMP SHIFT FUNCTION Definition of fictive temperatures.
52 Marc Volume D: User Subroutines and Special Routines

Table 2-1 User-defined Loading, Boundary Conditions, State Variables User


Subroutine Requirements (continued)
Required Parameters or
User Subroutine Model Definition Options Purpose
INITSV INITIAL STATE Definition of initial values of state
variables.
MOTION (2-D) CONTACT (2-D) Definition of velocity of
Marc Volume C: Model Definition Options, rigid surfaces.
Table 3-11 User Subroutines for Contact
Problems
UMOTION
MOTION CHANGE (History Definition)
MOTION (3-D) CONTACT (3-D) Definition of velocity of
Marc Volume C: Model Definition Options, rigid surfaces.
Table 3-11 User Subroutines for Contact
Problems
UMOTION
MOTION CHANGE (History Definition)
NEWPO PORE Change pore pressure in an
CHANGE PORE (Model Definition) uncoupled soil analysis.
CHANGE PORE (History Definition)
NEWSV CHANGE STATE (Model Definition) Change value of the state variable.
CHANGE STATE (History Definition)
SEPFOR CONTACT (2-D) Definition of force required for
CONTACT (3-D) separation.
Marc Volume C: Model Definition Options,
Table 3-11 User Subroutines for Contact
Problems
SEPFORBBC CONTACT (2-D) Definition of the separation force
CONTACT (3-D) for beam-to-beam contact.
CONTACT TABLE
SEPSTR CONTACT (2-D) Definition of stress required for
CONTACT (3-D) separation for node-to-segment
Marc Volume C: Model Definition Options, contact procedure.
Table 3-11 User Subroutines for Contact
Problems
SEPSTR_STS CONTACT (2-D) Definition of separation stress for
CONTACT (3-D) segment-to-segment contact
Marc Volume C: Model Definition Options,
Table 3-11 User Subroutines for Contact
Problems
Chapter 2: User-defined Loading, Boundary Conditions, and State Variables 53
User Subroutine

Table 2-1 User-defined Loading, Boundary Conditions, State Variables User


Subroutine Requirements (continued)
Required Parameters or
User Subroutine Model Definition Options Purpose
UABLATE ABLATION Definition of Surface
RECEDING SURFACE Recession Rate
UABLTNORM ABLATION Definition of direction of recession
RECEDING SURFACE
UACTGLUE Used for switching nodes from
deact glue state to regular glue
UBREAKGLUE CONTACT TABLE User-defined breaking criterion for
breaking glue feature
UBSQUEAL BSQUEAL Definition of brake squeal
parameters
UCAV CAVITY (Parameter) Allows definition of the pressure
CAVITY (Model Definition) load for internal cavities
DIST LOADS (Model Definition)
DIST LOADS (History Definition)
UDAMAGE_INDICATOR UDAMAG Allows calculation of a damage
indicator to be shown
in postprocessing.
UFAH SURFACE ENERGY Allows application of a correction
factor to the convection
coefficient.
UFILM FILMS Inputs nonuniform
TABLE convective coefficients
UFLUXMEC ABLATION Determines the rate of ablation due
RECEDING SURFACE to mechanical erosion
from sources other than
particle impact.
UFMEC ABLATION Definition of empirical correction
RECEDING SURFACE factor for mechanical erosion
by particles.
UFORMSN TYING Definition of user-defined
constraint matrices.
UFOUND FOUNDATION Permits the introduction of
TABLE nonlinear spring constants and
input of nonlinear damping for
dynamics or harmonics.
54 Marc Volume D: User Subroutines and Special Routines

Table 2-1 User-defined Loading, Boundary Conditions, State Variables User


Subroutine Requirements (continued)
Required Parameters or
User Subroutine Model Definition Options Purpose
UFOUR FOURIER Definition of function giving
nonuniform variation about
the circumference in
Fourier analysis.
UFRIC CONTACT (2-D) Definition of friction coefficient.
CONTACT (3-D)
Marc Volume C: Model Definition Options,
Table 3-11 User Subroutines for Contact
Problems
UFRICTION
UFRICBBC CONTACT (2-D) Definition of variable friction
CONTACT (3-D) coefficients for beam-to-
UFRICTION beam contact.
UFTHP SURFACE ENERGY Definition of empirical correction
for the effect of
surface temperature.
UGLAW SURFACE ENERGY Determines the empirical
correlation g for flux calculation.
UGMEC ABLATION Determines the empirical
RECEDING SURFACE correlation G for
recession calculation
UGROWRIGID UMOTION Changes the size of a rigid body
during the analysis
UHTCOE CONTACT (2-D) Definition of heat transfer
CONTACT (3-D) coefficient to environment for
Marc Volume C: Model Definition Options, coupled contact analysis.
Table 3-11 User Subroutines for Contact
Problems
UHTCOEF
UHTCON CONTACT (2-D) Definition of heat transfer
CONTACT (3-D) coefficient between bodies in
Marc Volume C: Model Definition Options, contact in coupled analysis.
Table 3-11 User Subroutines for Contact
Problems
UHTCON
Chapter 2: User-defined Loading, Boundary Conditions, and State Variables 55
User Subroutine

Table 2-1 User-defined Loading, Boundary Conditions, State Variables User


Subroutine Requirements (continued)
Required Parameters or
User Subroutine Model Definition Options Purpose
UHTNRC CONTACT (2-D) Definition of thermal near contact
CONTACT (3-D) film coefficient.
COUPLE
UHTCON
UINSTR ISTRESS Definition of initial stress.
UMDCOE CONTACT Definition of variable mass
DIFFUSION diffusion coefficients and sink
UHTCOEF pressure on free surfaces.
UMDCON CONTACT Definition of variable mass
DIFFUSION diffusion coefficients of surfaces
UHTCON that are in contact with
other surfaces.
UMDNRC UHTCON Definition of mass diffusion
CONTACT coefficients between surfaces
THERMAL CONTACT almost in contact.
CONTACT TABLE
UOBJFN DESIGN OPTIMIZATION Allows definition of the objective
DESIGN OBJECTIVE function and its gradient for design
optimization analysis using the
current values of the design
variables.
UPRFILM PRESS FILM Facilitates the inclusion of
nonuniform pressure films in
diffusion or soil analysis
UQVECT QVECT Defines the magnitude and
direction of the thermal flux.
UREACB CONTACT (2-D) Definition of reactive boundary
CONTACT (3-D) coefficients in an Acoustic
Harmonic Analysis
USDATA USDATA Definition of user-
defined constants.
USINC INITIAL DISP Definition of initial displacement,
INITIAL VEL initial velocity, or temperature.
INITIAL TEMP
USINKPT FILMS (Model Definition) Changes the sink point
temperatures as a function of time.
56 Marc Volume D: User Subroutines and Special Routines

Table 2-1 User-defined Loading, Boundary Conditions, State Variables User


Subroutine Requirements (continued)
Required Parameters or
User Subroutine Model Definition Options Purpose
USSD DYNAMIC CHANGE Definition of spectrum
RESPONSE SPECTRUM displacement density function.
UTIMESTEP AUTO STEP Definition of input for user-
defined time step.
UTIMP SURFACE ENERGY Definition of thermal effects of
particle impact.
UVELOC HEAT Definition of convective
velocities.
UVTCOE JOULE Definition of environment
CONTACT (2-D) electrical film coefficient.
CONTACT (3-D)
UHTCOEF
UVTCON JOULE Definition of contact electrical
CONTACT (2-D) film coefficient.
CONTACT (3-D)
UHTCOEF
UVTNRC JOULE Definition of electrical near
CONTACT (2-D) contact film coefficient.
CONTACT (3-D)
UHTCON
UWEARINDEX WEAR Definition of the user-defined
Wear Calculation for Wear
Feature.
UWELDFLUX HEAT or COUPLE Definition of distributed
WELD FLUX (Model Definition) welding flux.
WELD FLUX (History Definition)
WELD PATH (Model Definition)
WELD PATH (History Definition)
UWELDPATH HEAT or COUPLE Definition of weld path to be
WELD FLUX (Model Definition) followed by a distributed
WELD FLUX (History Definition) welding flux.
WELD PATH (Model Definition)
WELD PATH (History Definition)
FORCEM 57
Input of Nonuniform Distributed Loads

FORCEM Input of Nonuniform Distributed Loads

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 distributed load in Marc
is converted consistently into equivalent nodal loads. The conversion is done numerically using a certain
number of integration points.
The FORCEM user subroutine is called 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)
COMMON/MARC_BCLABEL/CDUM,BCNAME
CHARACTER*32 CDUM,BCNAME
DIMENSION N(10)
user coding
RETURN
END
where:

Required 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.
58 FORCEM
Input of Nonuniform Distributed Loads

N(2) is the parameter identifying the type of load.


N(3) is the integration point number. It is the same as NN.
N(4) is not used.
N(5) is the distributed load index -not used if table input format. It can be used to identify which
load is being evaluated.
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) =0 is the general CID load flag.
=1 is the general CID load
N(10) is the boundary condition number if table input format. It is not very useful for user, instead
please use BCNAME.
BCNAME is the boundary condition name in case of table input format. It can be used to identify
which load is being evaluated
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(10)
COMMON/MARC_BCLABEL/CDUM,BCNAME
CHARACTER*32 CDUM,BCNAME
user coding
RETURN
END
FORCEM 59
Input of Nonuniform Distributed Loads

where:

Required 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. It can be used to identify
which load is being evaluated.
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) =0 is the general CID load flag.
=1 is the general CID load
N(10) is the boundary condition number if Table input format. It is not very useful for user,
instead please use BCNAME.
BCNAME is the boundary condition name in case of table input format. It can be used to identify
which load is being evaluated
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.

When using Nastran like CID loads, 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 has to
be defined in the prnorm array.
60 FORCEM
Input of Nonuniform Distributed Loads

Nontable Driven Input


Load Control User Supplies
AUTO LOAD INCREMENTAL PRESSURE
AUTO LOAD with FOLLOW FOR PRESSURE END OF INCREMENT

AUTO STEP INCREMENTAL PRESSURE


AUTO STEP with FOLLOW FOR PRESSURE END OF INCREMENT

AUTO INCREMENT (include common PRESSURE END OF PERIOD


block AUTOIN)
AUTO INCREMENT with FOLLOW FOR PRESSURE END OF PERIOD (KPPASS = 1)
(include common block AUTOIN) PRESSURE BEGINING of INCREMENT
(KPPASS = 2)
COMPLEX HARMONIC ANALYSIS REAL COMPONENT OF PRESSURE
(include common block HARMON) (IHPASS =1)
IMAGINARY COMPONENT OF PRESSURE
(IHPASS = 2)

Table Driven Input


Load Control User Supplies
AUTO LOAD PRESSURE END OF INCREMENT
AUTO STEP PRESSURE END OF INCREMENT
AUTO INCREMENT (include common PRESSURE END OF PERIOD (KPPASS = 1)
block AUTOIN) PRESSURE BEGINING of INCREMENT
(KPPASS = 2)
COMPLEX HARMONIC ANALYSIS REAL COMPONENT OF PRESSURE
(include common block HARMON) (IHPASS =1)
IMAGINARY COMPONENT OF PRESSURE
(IHPASS = 2)

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.
FORCEM 61
Input of Nonuniform Distributed Loads

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 of the use of the FORCEM user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.35, 2.43, 2.46, and 12.20.

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


TIMINC is the increment of time.

are variables in this common block.


To obtain transient time corresponding to heat transfer analysis where temperatures are read in using the
CHANGE STATE/AUTO THERM option, add:

include heattm
where:

CUTIME is transient time at the beginning of the current increment from the heat transfer analysis.
DUTIME is the time increment during the current increment from the heat transfer analysis.

To obtain the increment number add:


include concom
where:

INC is the current increment number.

In the example shown below, a 2-D 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 .
62 FORCEM
Input of Nonuniform Distributed Loads

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
FLUX 63
Input of Nonuniform Fluxes

FLUX Input of Nonuniform Fluxes

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

Required Input:
F(1) is the surface or volumetric flux, to be defined at this integration point
in this user subroutine.
F(2) is the 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 versus time
o Qdt . This total includes all uniform and nonuniform
t
curve, that is,
volumetric fluxes.
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 the parameter identifying the type of flux.
N(3) is the integration point number.
64 FLUX
Input of Nonuniform Fluxes

N(4) is the flux index - not used if table input.


N(5) is not used.
N(6) 1 heat transfer.
2 Joule
3 bearing
4 electrostatic
5 magnetostatic
6 acoustic
8 diffusion
N(7) is the internal element number.
N(8) is the layer number for heat transfer shells elements and volume flux.
N(9) is not used.
N(10) is the boundary condition number if table input used.
TIME is the current time.

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.
Examples of the use of the FLUX user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 5.2 and 5.8.
UWELDFLUX 65
Input of User Defined Welding Flux

UWELDFLUX Input of User Defined Welding Flux

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:

Required Input:
TEMFLU(1) is the integration point coordinate in local X direction (along Weld Width Direction).
TEMFLU(2) is the integration point coordinate in local Y direction (along Weld Depth Direction).
TEMFLU(3) is the integration point coordinate in local Z direction (along Weld Path Direction).
TEMFLU(4) is the integration point coordinate in global X direction.
TEMFLU(5) is the integration point coordinate in global Y direction.
TEMFLU(6) is the integration point coordinate in global Z direction.
MIBODY(1) is the user element number.
MIBODY(2) is the distributed flux type.
MIBODY(3) is the integration point number.
MIBODY(4) is the weld flux index.
WELDDIM(1) is the weld width.
WELDDIM(2) is the weld depth.
WELDDIM(3) is the weld forward length.
WELDDIM(4) is the weld rear length.
TIME is the time at end of increment.
66 UWELDFLUX
Input of User Defined Welding Flux

Required Output:
F is the surface or volumetric welding flux to be defined at this integration point in this
user subroutine.

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.
UWELDPATH 67
Input of User-defined Welding Path

UWELDPATH Input of User-defined Welding Path

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

Required 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.
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.
68 UWELDPATH
Input of User-defined Welding Path

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.
CUPFLX 69
Coupling of Inelastic Energy and Internal Heat Generation

CUPFLX Coupling of Inelastic Energy and Internal Heat Generation

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

Required 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.
DEN is the mass density.
FCMECH is the factor entered through the CONVERT model definition option.
Required Output:
F is the volumetric flux to be defined by the user.
70 UINSTR
Input of Initial State of Stresses

UINSTR Input of Initial State of Stresses

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:

Required 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.
TIME is the total time at beginning of increment.
TIMEINC is the incremental time.
Required Output:
S is the stress vector defined by the user.

Examples of the use of the FLUX user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.38 and 3.30.
UFOUR 71
Input of a User-defined Function F(Q) for Fourier Analysis

UFOUR Input of a User-defined Function F() for Fourier Analysis

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

Required 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.

Examples of the use of the UFOUR user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 7.8 and 7.9.

Example
For example, suppose the following function is to be expanded in a Fourier series:

1 = 135, 315
F() = -1 = 45, 225
0 elsewhere.
72 UFOUR
Input of a User-defined Function F(Q) for Fourier Analysis

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,
FORCDT 73
Input of Time Dependent Nodal based Boundary Conditions

FORCDT Input of Time Dependent Nodal based Boundary Conditions

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 LOAD 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.

Note: FORCDT cannot be used to modify Fourier type boundary conditions.

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
where

Required Input:
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).
74 FORCDT
Input of Time Dependent Nodal based Boundary Conditions

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.
To obtain transient time corresponding to heat transfer analysis, where temperatures are read in using the
CHANGE STATE/AUTO THERM option, add

include xxx/common/heattm
where

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.
are variables in the common block heattm.
As an example, suppose a sinusoidal forcing is required at the third degree of freedom at a node.
The forcing function is
P = B sin t
FORCDT 75
Input of Time Dependent Nodal based Boundary Conditions

so
dp = B(sin (t + dt) - sin t)
Hence, for nontable driven input, we write the user subroutine as follows:

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(1),V(1),A(1),DP(1),DU(1),UG(1),XORD(1)
B=
OMEGA =
DP(3) = B*(SIN(OMEGA*(TIME+DTIME)) - SIN(OMEGA*TIME))
RETURN
END
For table driven input, where total values are entered use the following:

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(1),V(1),A(1),DP(1),DU(1),UG(1),XORD(1)
B=
OMEGA =
DP(3) = B*SIN(OMEGA*(TIME+DTIME))
RETURN
END
Examples of the use of the FORCDT user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 3.26, 5.2, 7.17, 8.26, and 12.27.

Heat Transfer Analysis


Description
Time dependent nodal fluxes or temperature boundary conditions can be input most conveniently through
the use of the FORCDT user subroutine. 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.
76 FORCDT
Input of Time Dependent Nodal based Boundary Conditions

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 redefined 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.
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 = 2 heat transfer portion.

Joule Heating Analysis


Description
Time dependent nodal currents or voltage boundary conditions can be input most conveniently through
the use of the FORCDT user subroutine. 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.
FORCDT 77
Input of Time Dependent Nodal based Boundary Conditions

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
where

X1,X2,X3 are not used.


F is the array of currents at the node can be redefined 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.
78 FORCDT
Input of Time Dependent Nodal based Boundary Conditions

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.

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 redefined 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.
FORCDT 79
Input of Time Dependent Nodal based Boundary Conditions

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.
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 redefined 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.
80 FORCDT
Input of Time Dependent Nodal based Boundary Conditions

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.

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 redefined 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.
FORCDT 81
Input of Time Dependent Nodal based Boundary Conditions

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 = 7 for magnetostatic pass.
82 FORCDF
Input of Frequency Dependent Loads or Displacements in Harmonic Analysis

FORCDF Input of Frequency Dependent Loads or Displacements


in Harmonic Analysis

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
where

Required 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.
FORCDF 83
Input of Frequency Dependent Loads or Displacements in Harmonic Analysis

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 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
84 FORCDF
Input of Frequency Dependent Loads or Displacements in Harmonic Analysis

where

Required 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.
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 ndegth element of the arrays refers to the point charge or harmonic potential.
FILM 85
Input of Nonuniform Film Coefficients

FILM Input of Nonuniform Film Coefficients

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:

Required 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.
TS(5) is the integration point 2nd coordinate.
TS(6) is the integration point 3rd coordinate.
N(1) is the element number.
N(2) is the IBODY code.
N(3) is the integration point number.
N(4) is the film index.
N(5) is the sink temperature index.
86 FILM
Input of Nonuniform Film Coefficients

N(6) is not used.


N(7) is the internal element number.
TIME is the current time.
Required Output:
H(1) is the ratio of the desired film coefficient to that given on the FILMS data set for this element
to be defined by the user (preset to 1).
TINF is the ratio of the desired sink temperature to that given on the FILMS data set for this
element to be defined by the user (preset to 1).
Optional Output:
H(2) is the derivative of the ratio of the film coefficient to that given on the FILMS data set; this
can be defined optionally and may improve the convergence behavior in a nonlinear heat
transfer analysis.

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.
Examples of the use of the FILM user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 3.22, 5.5, 5.6, 5.8, 5.13, and 5.14.
FLOW 87
Input of Mass Flow Rate and Inlet Temperature

FLOW Input of Mass Flow Rate and Inlet Temperature

Description
In a heat transfer analysis involving fluid channel elements, the FLOW user subroutine 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:

Required 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).
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).
88 FLOW
Input of Mass Flow Rate and Inlet Temperature

In two-dimensional analyses, SURFJ(1), SURFJ(2) are the lengths of the edges bordering the channel
element. In three-dimensional analyses, SURFJ(1) through SURFJ(4) are the areas on adjacent faces.
In a similar manner, TSURJ is the average temperature on adjacent edges (for 2-D) or adjacent faces (for
3-D).
An example of the use of the FLOW user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 5.13.
UFOUND 89
Input of Nonlinear Foundation Stiffness and Damping

UFOUND Input of Nonlinear Foundation Stiffness and Damping

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) is the foundation stiffness
EFFK(2) is the foundation damping (dynamics and/or harmonics)
For Statics or Dynamics:
EFORC(1) is the foundation resistance force due to stiffness
EFORC(2) is the foundation resistance force due to damping
U(1) is the total displacement
U(2) is the total velocity
TIME(1) is the time at beginning of increment
TIME(2) is the incremental time
90 UFOUND
Input of Nonlinear Foundation Stiffness and Damping

For Harmonics:
EFORC(1) is the real component of foundation resistance force
EFORC(2) is the imaginary component of foundation resistance force
U(1) is the real component of harmonic displacement
U(2) is the imaginary component of harmonic displacement
TIME(1) is the time
TIME(2) is the frequency
N(1) is the element number
N(2) is the face ID (IBODY)
N(3) is the integration point number
N(4) is the boundary condition ID
N(5) is the boundary condition ID
N(6) is the internal element ID
IHRESP 0 statics or dynamics
1 harmonics
UFILM 91
Input of Nonuniform Convective Coefficients

UFILM Input of Nonuniform Convective Coefficients

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.
UEMISS is the emissivity.
UQFLUX is the applied flux.
TS(1) is the estimated surface temperature at the end of increment.
TS(2) is the surface temperature at the beginning of increment.
TS(3) is not used.
TS(4) is the integration point first coordinate.
92 UFILM
Input of Nonuniform Convective Coefficients

TS(5) is the integration point second coordinate.


TS(6) is the integration point third coordinate.
TS(7) is the first component of direction cosine of surface normal.
TS(8) is the second component of direction cosine of surface normal.
TS(9) is the third component of direction cosine of surface normal.
N(1) is the element number.
N(2) is the ibody number.
N(3) is the integration point number.
N(4) is the boundary condition ID.
N(5) is the boundary condition ID.
N(6) is not used.
N(7) is the internal element number.
N(8) is the layer number if heat transfer shell.
N(9) is not used.
N(10) is the boundary condition id.
TIME is the time.
INC is the increment number.
USINKPT 93
Input of Sink Point Temperatures

USINKPT Input of Sink Point Temperatures

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 is the element number.
NN is the integration point number.
ISINK is the sink ID.
TSINK is the temperature of sink point - to be updated by the user.
TIME is the time at the end of the increment.
INC is the increment number.
XINT are the coordinates of surface integration point.
XSINK are the coordinates of sink point.
NCRD is the number of coordinates.
94 UQVECT
Directed Thermal Flux

UQVECT Directed Thermal Flux

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
where

Required Input:
m is the element number.
nn is the integration point number.
ndir is the number of directions; either 2 or 3.
inc is the increment number.
cptim is the time at beginning of increment.
timinc is the time increment.
UQVECT 95
Directed Thermal Flux

Required Output:
flux is the magnitude of thermal flux to be defined.
qv is the direction cosine of the flux.
tsource is the temperature of source (optional).
absorp is the absorption coefficient.
96 GAPT
Input of Thermal Contact (Conrad) Gap Temperature

GAPT Input of Thermal Contact (Conrad) Gap Temperature

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:

Required 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 (user-defined).
UFORMSN 97
Definition of Constraint Conditions

UFORMSN Definition of Constraint Conditions

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 + C non

etc

where:

ua The vector of displacement at node a, referred to as the tied mode.

ub
Vector of displacements at b, c, etc.; these nodes are referred to as the
uc
retained nodes.
etc

C non nonhomogeneous part of tying equation.

2. In the matrix [S], a row of zeros indicates that particular degree of freedom at node a is not
constrained. If you want to enforce a single point constraint for a particular degree of freedom i,
the entire ith row of S is set to zero and LM(i) is set to -1.
3. To apply a constraint between degrees of freedom at the same node, the node must appear on both
sides of the equation, with rows of zeros in [S] corresponding to the degrees of freedom on the
left-hand side, which are retained on the right-hand side, and columns of zeros in [S]
corresponding to the tied nodes appearing on the left-hand side.

Note: By default, the S matrix is specified in the local displacement systems. However,
if IFLAG is set to 1, the matrix is specified in the global displacement system and
the program converts it to the local systems.
98 UFORMSN
Definition of Constraint Conditions

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 IDs
NRETN is the number of retained nodes.
II is the tying number.
ISTYP is the tying type.
INTDATA( ) 1 increment number
2 cycle number
3 ipass
1 = stress pass
2 = heat pass
3 = fluid pass
4 = Joule pass
5 = diffusion pass
6 = electrostatic pass
7 = magnetostatic pass
8 = electromagnetic pass
UFORMSN 99
Definition of Constraint Conditions

REALDATA( ) 1 time at start of increment


2 time increment
XORD( ) are the original coordinates of nodes in ITI( ) in the global system.
XORDU( ) are the total displacements of nodes in ITI( ) in the global system at the start of
the increment.
NCRD is the first dimension of XORD.
Required Output:
S( ) is the tying matrix.
DDUtied = [S]. DDUretained + CNON.
CNON( ) is the nonhomogeneous part in the tying equation.
LM( ) is the flag to force single point constraint.

Note: The ith degree of freedom of the tied node ITI(1) will be tied if one of
the entries in the ith row of S is nonzero. If all entries in the ith row of S
are zero, the ith degree of freedom will not be tied unless LM(I) is set to -
1 in which case DDU(I) of the tied node = CNON(I) which is equivalent
to a single point constraint.
IFLAG 0 S and CON are specified in the local system (default).
1 S and CON are specified in the global system.

An example of the use of the UFORMSN user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 2.43.

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.
In the coarse mesh:

ui

uj 1 0 0 vi
=
vj 0 1 0 ul

vl

where:
= x ij x il
100 UFORMSN
Definition of Constraint Conditions

Thus, we supply the following user subroutine:

SUBROUTINE UFORMSN ( S,NDEG,LONGSM,ITI,NRETN,II


1 ISTYP,CNON,LM,INTDATA,REALDATA,XORD,XORDU,
2 NCRD,IFLAG)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION S(NDEG,LONGSM),ITI(*),CNON(NDEG),
DIMENSION INTDATA(*),REALDATA(*),

1 XORD(NCRD,LONGTM),
2 XORDU(NDEG,LONGTM)
J=1
I=2
L=3
XIJ = SQRT((XORD(1,I)-XORD(1,J))**2+(XORD(2,I)-XORD(2,J))**2)
XIL = SQRT((XORD(1,I)-XORD(1,L))**2+(XORD(2,I)-XORD(2,L))**2)
XLAMBD = XIJ/XIL
S(1,1) = 1. -XLAMBD
S(2,2) = 1. -XLAMBD
S(1,3) = XLAMBD
S(2,4) = XLAMBD
user coding
RETURN
END
Assuming that nodes j and k are located between nodes I and L and nodes m, n are located between
nodes L and P, the constraint is then imposed by specifying j, k, m, n, etc., on data lines as the tied
nodes, and I, L; I, L; L, P; L, P; etc., as the corresponding pairs of retained nodes. The TYING option
would then become:
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.
UFORMSN 101
Definition of Constraint Conditions

n
xij m
l

k
j

i
xil

Figure 2-1 Coarse to Fine Mesh Example


102 CREDE
Input of Pre-specified State Variables

CREDE Input of Pre-specified State Variables

Description
The CREDE user subroutine is available to the user for the input of prespecified state variables. The
simplest option allows the specification of temperature increments throughout the mesh. Through the use
of the STATE VARS parameter, the number of state variables per point in the structure can be increased.
For example, radiation fluxes (in reactor core problems) can be included. Marc always assumes
temperature is the first state variable given at a particular point, since the first state variable is used in
conjunction with the tables of temperature dependence input specified in the TEMPERATURE EFFECTS
option, and the first state variable is used to compute thermal strains. All state variables are available to
all constitutive routines.
The CREDE user subroutine is called once per element in a loop over the elements when the THERMAL
LOADS option is used. Any data blocks required should appear immediately after data block 2 of the
THERMAL LOADS option in the input data. If the first field of data block 2 in the THERMAL LOADS
option is a 3, total state variable values must be provided at all points of all elements at which constitutive
calculations are made. If the first field is a 2, the incremental values are defined. Depending on the
inclusion of the CENTROID or ALL POINTS parameters, centroidal values or values at all numerical
integration points of an element are expected. For shell elements, the values of state variable increments
must be given for each layer through the thickness at every integration point. For beam elements, the
values of state variable increments must be given at all points used to define the beam section (16 for
default element type 14, 25, 76 or 78; user-defined for element type 13, 77, or 79).

Format
User subroutine CREDE is written with the following headers:

SUBROUTINE CREDE ( DTDL,M,NSTRES,NEQST,NSTATS)


IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION DTDL (NSTATS,NEQST,NSTRES)
user coding
RETURN
END
where:

Required 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.
CREDE 103
Input of Pre-specified State Variables

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 (user-defined).

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.
Examples of the use of the CREDE user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.46, 2.49, 2.51, and 3.13.

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
104 INITSV
Initialize State Variable Values

INITSV Initialize State Variable Values

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:

Required 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).
Required Output:
SV is the array of values of this state variable (user-defined).

An example of the use of the INITSV user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 2.50.
NEWSV 105
Input New State Variable Values

NEWSV Input New State Variable Values

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:

Required 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).
Required Output:
SV is the array of new values of this state variable (user-defined).
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.
106 NEWSV
Input New State Variable Values

Examples of the use of the NEWSV user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.50 and 11.2.11.
INTFTMP 107
Initialize Fictive Temperature

INTFTMP Initialize Fictive Temperature

Description
This user subroutine, allows the user to define initial fictive temperatures used in conjunction with the
Narayanaswamy thermal rheologically simple model. When not using the table driven input format, it is
called in a loop over all the elements in the mesh when the INITIAL FICTIVE 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 FICTIVE 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 INTFTMP is written with the following headers:

SUBROUTINE INTFTMP ( SV,LAYERS,INTPTS,M)


IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION SV(LAYERS,INTPTS)
user coding
RETURN
END
where:

Required 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)
Required Output:
SV is the array of values of fictive temperatures (user-defined).

An example of the use of the INIFTMP user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 7.32.
108 USSD
Input of Spectral Response Density

USSD Input of Spectral Response Density

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:

Required 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 user-defined.

An example of the use of the USSD user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 6.18.
USINC 109
Input of Initial Conditions

USINC Input of Initial Conditions

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)
110 USDATA
Input of Initial Data

USDATA Input of Initial Data

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:

Required 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.
UTIMESTEP 111
Input of User-defined Time Step

UTIMESTEP Input of User-defined Time Step

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:

Required 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.
112 UVELOC
Generation or Modification of Nodal Velocity Vectors

UVELOC Generation or Modification of Nodal Velocity Vectors

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:

Required 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.

An example of the use of the UVELOC user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 7.15.
MOTION (2-D) 113
Definition of Rigid Surface Motion for 2-D Contact

MOTION (2-D) Definition of Rigid Surface Motion for 2-D Contact

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.

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
114 MOTION (2-D)
Definition of Rigid Surface Motion for 2-D Contact

Alternate Format
User subroutine MD_MOTION (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_MOTION ( X,F,V,TIME,DTIME,NSURF,INC,I2OR3,ISUNIT,


* CBNAME,NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 DTIME,F,TIME,V,X,RDATA
INTEGER INC,NSURF,I2OR3,ISUNIT
INTEGER IPATCH, DBODY,NPATCH,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION X(*),V(*),F(*)
RETURN
END
where:

Required 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.
I2OR3 2 for 2-D; 3 for 3-D.
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.
MOTION (2-D) 115
Definition of Rigid Surface Motion for 2-D Contact

Examples of the use of the MOTION user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 8.19 and 8.59.

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
116 MOTION (3-D)
Definition of Rigid Surface Motion for 3-D Contact

MOTION (3-D) Definition of Rigid Surface Motion for 3-D Contact

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 users 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.

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
MOTION (3-D) 117
Definition of Rigid Surface Motion for 3-D Contact

Alternate Format
User subroutine MD_MOTION (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_MOTION ( X,F,V,TIME,DTIME,NSURF,INC,ISUNIT,


* CBNAME,NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 DTIME,F,TIME,V,X,RDATA
INTEGER INC,NSURF,ISUNIT
INTEGER IPATCH, DBODY,NPATCH,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION X(*),V(*),F(*)
RETURN
END
where:

Required 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.
118 MOTION (3-D)
Definition of Rigid Surface Motion for 3-D Contact

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).

Examples of the use of the CREDE user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 8.19, and 8.59.

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
UGROWRIGID 119
Changes the Size of a Rigid Body During the Analysis

UGROWRIGID Changes the Size of a Rigid Body During the Analysis

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

Alternate Format
User subroutine MD_UGROWRIGID (activated through the CONUDS option) is written with the
following headers:

SUBROUTINE MD_UGROWRIGID ( MD,RELX,RELY,RELZ,TIME,DTIME,


* INC,ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
INTEGER MD, INC,ISUNIT, NID,NRD,NCD,IDATA
REAL*8 RELX, RELY, RELZ, TIME,DTIME, RDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
MD is the rigid body number.
TIME is the time at which data is requested.
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.
120 UGROWRIGID
Changes the Size of a Rigid Body During the Analysis

DTIME is the current time increment.


INC in the increment number.s
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.

An example of the use of the UGROWRIGID user subroutine can be found in Marc Volume E:
Demonstration Problems, problem 8.33 and the Marc Users Guide, Chapter 3,.example 3.27.
UFRIC 121
Definition of Friction Coefficients

UFRIC Definition of Friction Coefficients

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.

In case the variable IFRIC = 2, 4, 5, or 6, a Coulomb friction model is enacted, and the user returns a
friction coefficient defined in the equation:

ft = - fn t
where:

is the friction coefficient.


fn is the normal stress/force at the point of contact.

IFRIC is the friction type based upon the 4th field of the 2nd data block of the UFRICTION option.

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(3),MIBODY(4),VREL(*),TEMP(2)
user coding
RETURN
END
122 UFRIC
Definition of Friction Coefficients

Alternate Format
User subroutine MD_UFRIC (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UFRIC ( MIBODY,X,FN,VREL,TEMP,YIEL,FRIC,TIME,


* INC,NSURF,I2OR3,ISUNIT,CBNAME,NID,NRD,NCD,
* IDATA,RDATA,CDATA)
REAL*8 X, FN, FRIC, RDATA
INTEGER INC, MIBODY, NSURF,I2OR3
REAL*8 TEMP, TIME, VREL, YIEL
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(*),X(*),VREL(*),TEMP(*)
RETURN
END
where

Required Input:
For distributed friction based on nodal stresses:
MIBODY(1) is the user element number.
MIBODY(2) is the side number.
MIBODY(3) is the surface integration point number.
MIBODY(4) is the internal element number.
For nodal friction based on nodal forces:
MIBODY(1) is the user node number.
MIBODY(2) is not used; enter 0.
MIBODY(3) is not used; enter 0.
MIBODY(4) is the internal node number.
X is the updated coordinates of contact point where friction is being calculated. The
third coordinate is zero for 2-D models.
FN is the normal stress/force being applied at that point.
VREL(1) is the relative sliding velocity at contact point for 2-D models.
VREL(1) is the sliding velocity in the first tangential direction for 3-D models.
VREL(2) is the sliding velocity in the second tangential direction for 3-D models.
UFRIC 123
Definition of Friction Coefficients

TEMP(1) is the temperature of contact point.


TEMP(2) is the voltage of contact point (Joule heating).
YIEL is the flow stress of workpiece material at contact point.
TIME is the current time.
INC is the increment number.
NSURF is the surface being contacted by the side for which friction calculations are
being made.
I2OR3 2 for 2-D; 3 for 3-D.
Required Output:
FRIC is the friction coefficient or friction factor to be provided by the user.
124 UFRICBBC
Definition of Friction Coefficients for Beam-to-Beam Contact

UFRICBBC Definition of Friction Coefficients for Beam-to-Beam Contact

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.

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
UFRICBBC 125
Definition of Friction Coefficients for Beam-to-Beam Contact

Alternate Format
User subroutine MD_UFRICBBC (activated through the CONUDS option)is written with the following
headers:

SUBROUTINE MD_UFRICBBC ( MIBODY1,DPOS1,X1,TEMP1,


& MIBODY2,DPOS2,X2,TEMP2,FN,VREL,TIME,
& TIMINC,INC,FRIC,ISUNIT,CBNAME,
& NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 DPOS1, DPOS2, FN, FRIC, RDATA
INTEGER INC, MIBODY1, MIBODY2, ISUNIT
INTEGER NID,NRD,NCD,IDATA
REAL*8 TEMP1, TEMP2, TIME, TIMINC, VREL, X1, X2
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY1(*),X1(*),MIBODY2(*),X2(*),VREL(*)
RET
URN
END
where

Required 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.
126 UFRICBBC
Definition of Friction Coefficients for Beam-to-Beam Contact

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.
DIGEOM 127
Definition of 3-D Rigid Surface Patch

DIGEOM Definition of 3-D Rigid Surface Patch

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

Alternate Format
User subroutine MD_DIGEOM (activated through the CONUDS option)is written with the following
headers:

SUBROUTINE MD_DIGEOM ( IPATCH,IDBODY,XYZ,NPATCH,


* CBNAME,NID,NRD,NCD,IDATA,RDATA,CDATA)
INTEGER IPATCH, IDBODY, NPATCH, NID,NRD,NCD,IDATA
REAL*8 XYZ, RDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION XYZ(3,4)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
128 DIGEOM
Definition of 3-D Rigid Surface Patch

where:

Required 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.
SEPFOR 129
Definition of Separation Force

SEPFOR Definition of Separation Force

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.

Note: The SEPFOR and MD_SEPFOR user subroutines are not available with
segment-to-segment contact.

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

Alternate Format
User subroutine MD_SEPFOR (activated through the CONUDS option)is written with the following
headers:

SUBROUTINE MD_SEPFOR ( FNORM,FTANG,IBODY,NNODE,INC,TIME,DTIME,


* ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 FNORM, FTANG,TIME,DTIME, RDATA
INTEGER IBODY, INC, NNODE, ISUNIT
INTEGER IPATCH, IDBODY, NPATCH, NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
130 SEPFOR
Definition of Separation Force

CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required Input:
IBODY is the current body number the node touched.
NNODE is the current touched external node number.
INC is the current increment number.
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
SEPFORBBC 131
Definition of Separation Force for Beam-to-Beam Contact

SEPFORBBC Definition of Separation Force for Beam-to-Beam Contact

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.

Note: The SEPFORBBC and MD_SEPFORBBC user subroutines are not available with
segment-to-segment contact.

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
132 SEPFORBBC
Definition of Separation Force for Beam-to-Beam Contact

Alternate Format
User subroutine MD_SEPFORBBC (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_SEPFORBBC ( MIBODY1,MIBODY2,TIME,TIMINC,INC,


* FSEP,ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 FSEP, TIME, TIMINC, RDATA
INTEGER INC, MIBODY1, MIBODY2,ISUNIT, NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY1(*),MIBODY2(*)
RETURN
END
where:

Required 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.
SEPSTR 133
Definition of Separation Stress

SEPSTR Definition of Separation Stress

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.

Note: The SEPSTR and MD_SEPSTR user subroutines are not available with
segment-to-segment contact.

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

Alternate Format
User subroutine MD_SEPSTR (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_SEPSTR ( SNORM,STANG,IBODY,NNODE,INC,TIME,DTIME,


* ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
INTEGER IBODY, INC, NNODE, ISUNIT
REAL*8 SNORM, STANG, TIME,DTIME, RDATA
INTEGER IPATCH, IDBODY, NPATCH, NID,NRD,NCD,IDATA
134 SEPSTR
Definition of Separation Stress

CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required Input:
IBODY is the current body number the node touched.
NNODE is the current touched external node number.
INC is the current increment number.
Required Output:
SNORM is the normal separation stress to be supplied by the user.
STANG is no longer used - dummy variable.
SEPSTR_STS 135
Definition of Separation Stress for Segment-to-segment Contact

SEPSTR_STS Definition of Separation Stress for Segment-to-segment Contact

Description
This user subroutine allows the definition of the separation stress in conjunction with the CONTACT
model definition option. The separation stresses, SEPSTRESS, is 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.
SEPSTRESS 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.

Note: The SEPSTR_STS user subroutines is not available with node-to-segment contact.

Format
User subroutine SEPSTR_STS is written with the following headers:

SUBROUTINE SEPSTR_STS ( SEPSTRESS,INTEGER_DATA,REAL_DATA)


IMPLICIT REAL *8 (A-H, O-Z)
user coding
RETURN
END
where:

Required Input:
INTEGER_DATA is the array with integer numbers:
(1) is the current increment number.
(2) is the current iteration number.
(3) is the current polyline (2-D) or polygon(3-D) number.
(4) is the first body number of the current contact body combination.
(5) is the second body number of the current contact body combination.
REAL_DATA is the array with real numbers:
(1) is the time at the start of the increment.
(2) is the time increment.
(3) is the x-coordinate of the current polyline/polygon point.
(4) is the y-coordinate of the current polyline/polygon point.
136 SEPSTR_STS
Definition of Separation Stress for Segment-to-segment Contact

(5) is the z-coordinate of the current polyline/polygon point (always zero in


a 2-D analysis).
Required Output:
SEPSTRESS is the separation stress to be defined by the user. The input value of the sepstress
variable is determined by Marc and follows from the separation stress given on
the CONTACT or CONTACT TABLE option.
UBREAKGLUE 137
User-defined Breaking Criterion for Breaking Glue Feature

UBREAKGLUE User-defined Breaking Criterion for Breaking Glue Feature

Description
This user subroutine can be used for defining the breaking criterion for the breaking glue feature (Volume
A Theory and User Information, Chapter 8, Breaking Glue).

The routine is called each time there is a check for breaking the glued contact. It is called for every node
in contact which can be released due to breaking glue.
Upon entry to the routine, the program has already calculated the default breaking criterion:

t n
m
-----n- + ----- 1
Sn St

This is passed in as:

m
t1 = -----
Sn
n
-

n
t2 = ----
St
-t

t1 and t2 can be modified to define the breaking criterion. The glued contact will break if t1 + t2 1.0 .

t1 appears on the post file as nodal post code 66, Breaking Index (Normal)
t2 appears on the post file as nodal post code 67, Braking Index (Tangential)
t1 + t2 appears on the post file as nodal post code 68, Breaking Index

Format
User subroutine UBREAKGLUE is written with the following headers:

SUBROUTINE UBREAKGLUE ( T1,T2,SINGNORM,SIGTAN,SN,ST,EXPN,


$ EXPT,NODE,IBODC,IBODT,INC,TIME,TIMEINC)
REAL*8 T1,T2,SINGNORM,SIGTAN,SN,ST,EXPN,EXPT,TIME,TIMEINC
INTEGER NODE,IBODC,IBODT,INC
RETURN
END
138 UBREAKGLUE
User-defined Breaking Criterion for Breaking Glue Feature

where:

Required Input:
T1 is the first term of the breaking criterion.
T2 is the second term of the breaking criterion.
SIGNORM is the current normal stress ( S n ).
SIGTAN is the current tangential stress ( S t ).
SN is the user input ( S n ); possibly scaled due to table variation.
ST is the user input ( S t ); possibly scaled due to table variation.
EXPN is the user input m; possibly scaled due to table variation.
EXPT is the user input n; possibly scaled due to table variation.
NODE is the user ID of the current node.
IBODC is the body number that this node belongs to; i.e., contacting body.
IBODT is the touched body number.
INC is the current increment number.
TIME is the time at the beginning of the increment.
TIMEINC is the time increment.

The normal stress is the stress normal to the contact segment. The tangential stress is in the
perpendicular direction.
UACTGLUE 139
User-defined Switching from Deact Glue State to Regular Glue

UACTGLUE User-defined Switching from Deact Glue State to Regular Glue

Description
This user subroutine can be used for switching nodes from being in a state of deact glue contact into
using regular glued contact. The routine is called for all nodes that are a part of a deact glue definition
(see DEACT GLUE option in Marc Volume C: Program Input) and which are currently in contact. If the
iswitch variable in this routine is set to 1 the node will hereafter use regular glued contact.
The deact glue state means that the node is defined to use regular contact although it is part of a contact
body combination which is defined to use glued contact.
The user routine is called at the beginning of each increment and the results values that are passed in are
from the end of the previous increment.

Format
User subroutine UACTGLUE is written with the following headers:

SUBROUTINE UACTGLUE ( NODE,ISWITCH,INC,TIME,COORD,DISP,TEMP,


$ STRESSNORM,STRESSFRIC,RELVEL,IBODY,IBODY2
IMPLICIT REAL *8 TIME,COORD,DISP,TEMP,STRESSNORM,STRESSFRIC,
RELVEL
DIMENSION COORD(*),DISP(*)
user coding
RETURN
END
where:

Required Input:
NODE is the user ID of the current node.
INC is the current increment.
TIME is the time at the start of the current increment.
COORD is the initial coordinates of the node.
DISP is the current total displacements at the node.
TEMP is the current temperature at the node.
STRESSNORM is the current contact normal stress at the node.
STRESSFRIC is the current contact friction stress at the node.
RELVEL is the current relative sliding velocity at the node between ibody and ibody2.
IBODY is the contact body the node belongs to.
140 UACTGLUE
User-defined Switching from Deact Glue State to Regular Glue

IBODY2 is the contact body the node is touching (if it touches multiple bodies, this is the
first it touches).
Required Output:
ISWITCH is set to 1 if the node should be switched to regular glue.
UHTCOE 141
Definition of Environment Film Coefficient

UHTCOE Definition of Environment Film Coefficient

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.

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
142 UHTCOE
Definition of Environment Film Coefficient

Alternate Format
User subroutine MD_UHTCOE (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UHTCOE ( MIBODY,XP,TEMP,IBODY,NF,XORD,XT,


+ DXT,TMPALL,TMPALO,TOTINC,TIMINC,INC,NCRD,
+ NDEGS,NDEGH,NCRDMX,NDEGMX,NBCD,NBCN,
+ TSINK,HTCOEF,IFLAG,ISUNIT,CBNAME,NID,NRD,
+ NCD,IDATA,RDATA,CDATA)
REAL*8 DXT, HTCOEF,RDATA
INTEGER IBODY,IFLAG,INC,MIBODY,NBCD,NBCN,NCRD,NCRDMX,NDEGH
INTEGER NDEGMX,NDEGS,NF,NID,NRD,NCD,IDATA,ISUNIT
REAL*8 TEMP,TIMINC,TMPALL,TMPALO,TOTINC,TSINK,XORD,XP,XT
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(*),XP(*),NF(*),XORD(*),XT(*),DXT(*),TEMP(*),
+ TMPALL(*),NBCD(*),TSINK(*),TMPALO(*)
RETURN
END
where:

Required 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.
UHTCOE 143
Definition of Environment Film Coefficient

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.
TIMINC is the time increment.
INC is the increment number.
NCRD is the number of coordinates per node.
NDEGS is the number of degrees of freedom per node for the stress part of the analysis.
NDEGH is the number of degrees of freedom per node for the thermal part of the analysis
(usually 1).
NCRDMX is the maximum number of coordinates per node for the whole model (can be
different from NCRD if different element types are used).
NDEGMX is the maximum number of degrees of freedom per node for the whole model (can be
different from NDEG if different element types are used).
TSINK(4) is the sink voltage declared in the CONTACT option for this flexible surface.
TSINK(5) is the sink pressure declared in CONTACT option for this flexible surface.
Required Output:
IFLAG =0 HTCOEF is a heat transfer coefficient
=1 HTCOEF is a flux.
HTCOEF is the heat transfer coefficient between surface and environment, such that the heat
flux per unit area that leaves the surface is:
Q = HTCOEF (TEMP - TSINK)
or
the heat flux per unit area that leaves the surface.
TSINK(2) is the sink temperature declared in the CONTACT option for this flexible surface.
144 UHTCON
Definition of Contact Film Coefficient

UHTCON Definition of Contact Film Coefficient

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

Alternate Format
User subroutine MD_UHTCON (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UHTCON ( MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,


+ TIMINC,INC,NCRD,NDEG,TSINK,HTCOEF,
UHTCON 145
Definition of Contact Film Coefficient

+ ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
+ RDATA,CDATA)
REAL*8 FN, HTCOEF,RDATA
INTEGER IBODY,INC,IOBODY,MIBODY,NCRD,NDEG
REAL*8 TEMP,TIMINC,TOTINC,TSINK,XP
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(4),XP(*),TEMP(*),TSINK(*)
RETURN
END

where:

Required 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.
146 UHTCON
Definition of Contact Film Coefficient

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:
Q = HTCOEF (TEMP(2) - TSINK(2)).
UBSQUEAL 147
Define Parameters used in Brake Squeal Analysis

UBSQUEAL Define Parameters used in Brake Squeal Analysis

Description
User subroutine UBSQUEAL is used to define the friction coefficient and the effective stiffness in
calculating the brake squeal DMIG matrices that are used in a subsequent complex Eigen value analysis.
This routine is called for those nodes that are in contact where the bodies have been identified by the
BSQUEAL model definition option.

Format
User subroutine UBSEQUEAL is written with the following header lines:

SUBROUTINE UBSQUEAL ( IBODIES,NNODE,NODES,COORDS,CENTER,VECTOR,


* AREA,I2OR3,TEMP,PRESS,XNORM,INC,STIFF,FRIC)
INTEGER INC,IBODIES,NNODE,NODES,I2OR3
REAL*8 CENTER,VECTOR,STIFF,FRIC,COORDS,AREA,TEMP,PRESS
REAL*8 XNORM
DIMENSION IBODIES(2),NODES(NNODE),CENTER(I2OR3),VECTOR(I2OR3)
DIMENSION XNORM(I2OR3),COORDS(I2OR3,NNODE)
RETURN
END

Alternate Format
User subroutine MD_UBSQUEAL (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UBSQUEAL ( IBODIES,NNODE,NODES,COORDS,CENTER,


* VECTOR,AREA,I2OR3,TEMP,PRESS,XNORM,INC,
+ STIFF,FRIC,ISUNIT,CBNAME,NID,NRD,NCD,
+ IDATA,RDATA,CDATA)
INTEGER INC,IBODIES,NNODE,NODES,I2OR3
REAL*8 CENTER,VECTOR,STIFF,FRIC,COORDS,AREA,TEMP,PRESS,XNORM
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IBODIES(2),NODES(NNODE),CENTER(I2OR3),VECTOR(I2OR3)
DIMENSION XNORM(I2OR3),COORDS(I2OR3,NNODE)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
148 UBSQUEAL
Define Parameters used in Brake Squeal Analysis

RETURN
END

Required Input:
IBODIES ibodies(1) is the touching body ID
ibodies(2) is the touched body ID
NNODE is the number of nodes
NODES -nodes(1) is the touching node ID (user defined)
nodes(2:nnode) are the node IDs of touched face (user defined)
COORDS coord(i2or3,1:1) are the coordinate of touching node
coord(1:i2or3,2:nnode) are the coordinate of nodes of touched face (L)
CENTER is the position of center of rotation axis (L)
VECTOR is the vector of rotation axis (L)
AREA is the effective area at node(1) (L2)
I2OR3 is two in a 2-D mode
is three in a 3-D model
TEMP is the temperature at the contacting node
PRESS is the contact pressure at the contacting node (F/L2)
XNORM is the normal to touched face
INC is the increment number
Required Output:
STIFF is the average normal stiffness at the touched node (F/L3)
FRIC is the friction coefficient at the touched node
UDAMAGE_INDICATOR 149
Indicator of Material Damage

UDAMAGE_INDICATOR Indicator of Material Damage

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:

Required 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
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).
150 UDAMAGE_INDICATOR
Indicator of Material Damage

NDI is the number of direct stress components


NSHEAR is the number of shear stress components
DTIME is the time increment
Required Output:
IFLAG is the flag to indicate the user subroutine is used
= 0 not used
= 1 used
DAMDAT(8) is the crack threshold from input (or user entered value)
DAMFLAG is the damage flag for display (post code 80)
DAMFAC is the computed damage value

An example of the use of the UDAMAGE_INDICATOR user subroutine can be found in Marc Volume E:
Demonstration Problems, problem 3.46.
UHTNRC 151
Definition of Thermal Near Contact Film Coefficient

UHTNRC Definition of Thermal Near Contact Film Coefficient

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:
HEX 4 4
q = HD T TD + HDN T TD + EMS T TD

HDC HDC HDD -----------


d
- T TD
d nea r

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.
d near is the upper limit of the near contact distance.

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.
152 UHTNRC
Definition of Thermal Near Contact Film Coefficient

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

Alternate Format
User subroutine MD_UHTNRC (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UHTNRC ( MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,


+ TIMINC,INC,NCRD,NDEG,TSINK,HTCOEF,HTNAT,
+ EXPNAT,EMIS,HDD,HC,DNEAR,
+ ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
+ RDATA,CDATA)
INTEGER IBODY, INC, IOBODY, MIBODY, NCRD, NDEG
REAL*8 TEMP, TIMINC, TOTINC, TSINK, XP, RDATA
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(4),XP(*),TEMP(*),TSINK(*)
RETURN
END
where:

Required 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.
UHTNRC 153
Definition of Thermal Near Contact Film Coefficient

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.
D is the distance between the surfaces.
Required Output:
HTCOEF is the heat transfer coefficient between surfaces almost in contact.
HTNAT is the heat transfer coefficient of natural convection between surfaces almost
in contact.
EXPNAT is the exponent associated with natural convection between surfaces almost
in contact.
EMIS is the emissivity for radiation calculation between surfaces almost in contact.
HDD is the lower bound of the distance dependent heat transfer coefficient.
HC is the upper bound of the distance dependent heat transfer coefficient, such that the
heat flux per unit area that leaves the surface is
Q = HTCOEF (TEMP(2) - TSINK(2) ) +
HTNAT * (TEMP(2) - TSINK(2)) ** EXPNAT +
SIGMA * EMIS * (TEMP(2) ** 4 - TSINK(2) ** 4) +
(HC - (HC - HDD) * d/dnear) * (TEMP(2) - TSINK(2))
154 UVTCOE
Definition of Environment Electrical Film Coefficient

UVTCOE Definition of Environment Electrical Film Coefficient

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.

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
UVTCOE 155
Definition of Environment Electrical Film Coefficient

Alternate Format
User subroutine MD_UVTCOE (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UVTCOE ( MIBODY,XP,TEMP,IBODY,ICONNO,XORD,XT,


+ DXT,TMPALL,TMPALO,TOTINC,TIMINC,INC,NCRD,
+ NDEG,NDEGH,NCRDMX,NDEGMX,NBCD,NBCN,TSINK,
+ ETCOEF,IFLAG,ISUNIT,CBNAME,NID,NRD,NCD,
+ IDATA,RDATA,CDATA)
REAL*8 DXT, ETCOEF, RDATA
INTEGER IBODY,ICONNO,IFLAG,INC,MIBODY,NBCD,NBCN,NCRD
INTEGER NCRDMX,NDEG,NDEGH,NDEGMX,ISUNIT,NID,NRD,NCD,IDATA
REAL*8 TEMP,TIMINC,TMPALL,TMPALO,TOTINC,TSINK,XORD,XP,XT
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(*),XP(*),ICONNO(*),XORD(*),XT(*),DXT(*),
+ TEMP(*),TMPALL(*),NBCD(*),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.
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.
156 UVTCOE
Definition of Environment Electrical Film Coefficient

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).
TOTINC is the current accumulated time.
TIMINC is the time increment.
INC is the current increment.
NCRD is the number of coordinates per node.
NDEGS is the number of degrees of freedom per node for the stress part of the analysis.
NDEGH is the number of degrees of freedom per node for voltage (usually 1).
NCRDMX is the maximum number of coordinates per node for the whole model (can be different
from NCRD if different element types are used).
NDEGMX is the maximum number of degrees of freedom per node for the whole model (can be
different from NDEG if different element types are used).
TSINK(2) is the sink temperature declared in CONTACT option for this flexible surface.
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.
Required Output:
IFLAG = 0 ETCOEF is a electrical transfer coefficient.
= 1 ETCOEF is a flux.
ETCOEF is the electrical transfer coefficient between surface and environment, such that the
heat flux per unit area that leaves the surface is:
q = ETCOEF (VOLT - VSINK)
or
the electrical flux per unit area that leaves the surface.
UVTCON 157
Definition of Electrical Film Coefficient

UVTCON Definition of Electrical Film Coefficient

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

Alternate Format
User subroutine MD_UVTCON (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UVTCON ( MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,


+ TIMINC,INC,NCRD,NDEG,TSINK,ETCOEF,
+ ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
158 UVTCON
Definition of Electrical Film Coefficient

+ RDATA,CDATA)
REAL*8 ETCOEF, FN,RDATA
INTEGER IBODY, INC, IOBODY, MIBODY, NCRD, NDEG
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
REAL*8 TEMP, TIMINC, TOTINC, TSINK, XP
DIMENSION MIBODY(4),XP(*),TEMP(*),TSINK(*)
RETURN
END

where:

Required 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.
UVTCON 159
Definition of Electrical Film Coefficient

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:
Q = ETCOEF (TEMP(4) - TSINK(4))
160 UVTNRC
Definition of Electrical Near Contact Film Coefficient

UVTNRC Definition of Electrical Near Contact Film Coefficient

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:

q = ET V VD + ETC ETC EDD ------------ V VD


d
d near

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.
d near 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.

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
UVTNRC 161
Definition of Electrical Near Contact Film Coefficient

Alternate Format
User subroutine MD_UVTNRC (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UVTNRC ( MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,


+ TIMINC,INC,NCRD,NDEG,TEMPO,ETCOEF,ETDD,
+ ETC,DNEAR,ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
+ RDATA,CDATA)
REAL*8 DNEAR, ETC, ETCOEF, ETDD, FN,RDATA
INTEGER IBODY, INC, IOBODY, MIBODY, NCRD, NDEG
REAL*8 TEMP, TEMPO, TIMINC, TOTINC, XP
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(4),XP(*),TEMP(*),TEMPO(*)
RETURN
END
where:

Required 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.
162 UVTNRC
Definition of Electrical Near Contact Film Coefficient

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.
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
Q = ETCOEF (TEMP(4) - TEMPO(4)) +
(ETC - (ETC - ETDD) * d/dnear) * (TEMP(4) - TEMPO(4))
UMDCOE 163
Definition of Environment Mass Diffusion Coefficient

UMDCOE Definition of Environment Mass Diffusion Coefficient

Description
This user subroutine allows the definition of variable mass diffusion coefficients and sink pressure on
free surfaces, in conjunction with the CONTACT option and DIFFUSION or PYROLYSIS parameter. Its
call is triggered by the UHTCOEF option.
The UMDCOE 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 mass diffusion
pass of an analysis.
A distributed mass flux is being calculated according to the equation:

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(*)
user coding
RETURN
END
164 UMDCOE
Definition of Environment Mass Diffusion Coefficient

Alternate Format
User subroutine MD_UMDCOE (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UMDCOE ( MIBODY,XP,TEMP,IBODY,NF,XORD,XT,


+ DXT,PRSALL,PRSALO,TOTINC,TIMINC,INC,NCRD,
+ NDEGS,NDEGH,NCRDMX,NDEGMX,NBCD,NBCN,TSINK,
+ PRCOEF,IFLAG,ISUNIT,CBNAME,NID,NRD,NCD,
+ IDATA,RDATA,CDATA)
REAL*8 DXT, XP, XT, RDATA
INTEGER IBODY, FLAG,INC,MIBODY,NBCD,NBCN,NCRD,NCRDMX,NDEGH
INTEGER NDEGMX,NDEGS,NF,NID,NRD,NCD,IDATA,ISUNIT
REAL*8 PRCOEF,PRSALL,PRSALO,TEMP,TIMINC,TOTINC,TSINK,XORD
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(*),XP(*),NF(*),XORD(*),XT(*),DXT(*),TEMP(*),
+ PRSALL(*),PRSALO(*),NBCD(*),TSINK(*)
RETURN
END
where:

Required 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) 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.
UMDCOE 165
Definition of Environment Mass Diffusion Coefficient

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.
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.
Required Output:
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.
166 UMDCON
Definition of Contact Mass Diffusion Coefficient

UMDCON Definition of Contact Mass Diffusion Coefficient

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,


+ ITIMINC,NC,NCRD,NDEG,TSINK,PC)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MIBODY(4),XP(1),TEMP(*),TSINK(*)
user coding
RETURN
END
UMDCON 167
Definition of Contact Mass Diffusion Coefficient

Alternate Format
User subroutine MD_UMDCON (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UMDCON ( MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,


+ TIMINC,INC,NCRD,NDEG,TSINK,PC,
+ ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
+ RDATA,CDATA)
REAL*8 FN,RDATA
INTEGER IBODY, INC, IOBODY, MIBODY, NCRD, NDEG
REAL*8 PC, TEMP, TIMINC, TOTINC, TSINK, XP
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(4),XP(*),TEMP(*),TSINK(*)
RETURN
END
where:

Required 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) 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.
168 UMDCON
Definition of Contact Mass Diffusion Coefficient

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:
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)
UMDNRC 169
Definition of Mass Diffusion Coefficients between Surfaces almost in Contact

UMDNRC Definition of Mass Diffusion Coefficients between Surfaces almost


in Contact

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.

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
170 UMDNRC
Definition of Mass Diffusion Coefficients between Surfaces almost in Contact

Alternate Format
User subroutine MD_UMDNRC (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UMDNRC ( MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,


+ TIMINC,INC,NCRD,NDEG,TEMPO,PRCOEF,PRDD,
+ PRC,DNEAR,ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
+ RDATA,CDATA)
REAL*8 DNEAR, FN, RDATA
INTEGER IBODY, INC, IOBODY, MIBODY, NCRD, NDEG
REAL*8 PRC, PRCOEF, PRDD, TEMP, TEMPO, TIMINC, TOTINC, XP
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION MIBODY(4),XP(*),TEMP(*),TEMPO(*)
RETURN
END
where:

Required 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.
UMDNRC 171
Definition of Mass Diffusion Coefficients between Surfaces almost in Contact

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
172 INITPL
Initialize Equivalent Plastic Strain Values

INITPL Initialize Equivalent Plastic Strain Values

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:

Required 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.
INITPO 173
Initialize Pore Pressure in an Uncoupled Fluid-Soil Analysis

INITPO Initialize Pore Pressure in an Uncoupled Fluid-Soil Analysis

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:

Required Input:
INTPTS is the number of integration points associated with this element.
M is the users element number.
Required Output:
POREP is the array of pore pressures to be defined for this element.
174 NEWPO
Modify Pore Pressure in an Uncoupled Fluid-Soil Analysis

NEWPO Modify Pore Pressure in an Uncoupled Fluid-Soil Analysis

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:

Required Input:
INTPTS is the number of integration points associated with this element.
M is the users element number.
Required Output:
POREP is the array of pore pressures to be defined for this element.
UREACB 175
Definition of Reactive Boundary Coefficients in an Acoustic Harmonic Analysis

UREACB Definition of Reactive Boundary Coefficients in an Acoustic


Harmonic Analysis

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

Alternate Format
User subroutine MD_UREACB (activated through the CONUDS option) is written with the following
headers:

SUBROUTINE MD_UREACB ( OXK1,OC1,FREQC,IBODYT,IBODYR,


* ISUNIT,CBNAME,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 FREQC, OC1, OXK1, RDATA
INTEGER IBODYR, IBODYT
INTEGER ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*24 CBNAME
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required 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.
176 UREACB
Definition of Reactive Boundary Coefficients in an Acoustic Harmonic Analysis

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
- is defined as ------------- = ----- + ------ , with the frequency in radians per
Note that the complex admittance ------------
Z Z c1 k1
time and Z the complex impedance.
UCAV 177
Input of Volume-Dependant Pressure Load for Cavities

UCAV Input of Volume-Dependant Pressure Load for Cavities

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:

Required 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.
AMBPRES is the ambient pressure.
GAMGAS is the Polytropic process exponent.
RPRESS is the gas reference pressure.
RTEMP is the gas reference temperature.
RDENS is the gas reference density.
178 UCAV
Input of Volume-Dependant Pressure Load for Cavities

CMASS is the gas mass at the beginning of the increment.


CTEMP is the gas temperature at the beginning of the increment.
PRESS is the cavity pressure as based upon input data.
Required Output:
PRESS is the total pressure to be applied in this increment.
Optional Output:
CMASS is the current gas mass (for post processing only).
CTEMP is the current gas temperature (for post processing only).
UOBJFN 179
Definition of Objective Function and its Gradient

UOBJFN Definition of Objective Function and its Gradient

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:

Required 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.

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
180 UPRFILM
Input of Nonuniform Pressure Film Coefficients

UPRFILM Input of Nonuniform Pressure Film Coefficients

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:

Required Input:
TS(1) is the estimated surface pressure at the end of increment.
TS(2) is the surface pressure at the beginning of increment.
TS(3) is not used.
TS(4) is the integration point first coordinate.
TS(5) is the integration point second coordinate.
TS(6) is the integration point third coordinate.
TS(7) is the first component of direction cosine of surface normal.
TS(8) is the second component of direction cosine of surface normal.
TS(9) is the third component of direction cosine of surface normal.
N(1) is the element number.
N(2) is the IBODY number.
N(3) is the integration point number.
N(4) is the boundary condition ID.
UPRFILM 181
Input of Nonuniform Pressure Film Coefficients

N(5) is the boundary condition ID.


N(6) is not used.
N(7) is the internal element number.
TIME is the time.
INC is the increment number.
Required Output:
UPFILM is the pressure film coefficient.
PA is the ambient pressure.
182 UFAH
Define Correction Factor for Convection Coefficient aH

UFAH Define Correction Factor for Convection Coefficient H

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. The flux is calculated as
T
q = H f c H rec H e ;
S

,

where:

H is the heat transfer coefficient.


fc is the correction factor, entered here.

H rec is the specific recovery of the external flow.

TS is the specific enthalpy of the external flow, calculated for the frozen chemical composition
He ;
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:

Required 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
UFAH 183
Define Correction Factor for Convection Coefficient aH

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.
if LINRIZE = 2, then BPRIMEC = TBPRIMEC
if LINRIZE = 1, then BPRIMEC = CBPRIMEC
KUPSTRM = 1 for upstream data (z < z_throat)
= 2 for downstream data (z > z_throat)
ALPHAH0 is the convection coefficient (without correction)
ALPHAM0 is the diffusion coefficient (without correction)
BPRIMEC is the mass flow rate of solid due to ablation by gases
TRANSH is the transpiration factor for H (convection)
transh=0.5 for laminar flow
transh=0.4 for turbulent flow
RHOCURI is the mass density at the current point
FAHN is the correction factor of H - at beginning of increment
Required Output:
FAHN1 is the correction factor of H - at end of increment
184 UFLUXMEC
Determine the Rate of Ablation due to Mechanical Erosion from Sources other than Particle Impact

UFLUXMEC Determine the Rate of Ablation due to Mechanical Erosion from


Sources other than Particle Impact

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:

Required 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
UFTHP 185
Define Empirical Correction for the Effect of Surface Temperature

UFTHP Define Empirical Correction for the Effect of Surface Temperature

Description
This option allows the user to include a correction effect when calculating the flux due to ablation by
liquid particles.
q = f th p G th p j V p j , D p j , p t m p j H r p j

f th p is defined in this routine.

For each family of liquid particles:


m p j = m p j x t

surface mass flow rate of particles for the j family k gm 2 s 1 .

G th p j = G th p j V p j x t , D p j , p j x t , ...

empirical law for thermochemical ablation by impacting particles (without unit).


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
1
Jkg .

f th p = f th p T s

empirical correction for the effect of surface temperature (without unit).


This UFTHP subroutine is used in conjunction with the SURFACE ENERGY option.

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
186 UFTHP
Define Empirical Correction for the Effect of Surface Temperature

where:

Required 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.
UGLAW 187
Determine the Empirical Correlation G for Flux Calculation

UGLAW Determine the Empirical Correlation G for Flux Calculation

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:

Required 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
TANGLP is the angle of impact of liquid particles
Required Output:
TGLP is the correlation factor between momentum of particles and flux
188 UTIMP
Define Thermal Effects of Particle Impact

UTIMP Define Thermal Effects of Particle Impact

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:

Required 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.
MDOTLP is the rate of change of mass of liquid particles.
UTIMP 189
Define Thermal Effects of Particle Impact

IDMDOTLP is the table ID for rate of change of mass of liquid particles.


VLP is the velocity of liquid particles.
IDVLP is the table ID for velocity of liquid particles.
DIAMLP is the diameter of liquid particles.
IDDIAMLP is the table ID for diameter of liquid particles.
ANGLP is the angle of impact of liquid particles.
IDANGLP is the table ID for angle of impact of liquid particles.
Required Output:
FLUXIMP is the flux added due to thermal effects of impacting particles.
AMSTHP is the mass flow rate of the surface material ablated by impacting particles.
190 UFMEC
Define Empirical Correction Factor for Mechanical Erosion by Particles

UFMEC Define Empirical Correction Factor for Mechanical Erosion


by Particles

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

f m p is defined in this subroutine.

G m p j may be defined in the UGMEC user subroutine.

This subroutine is used in conjunction with the ABLATION parameter and the RECEDING SURFACE
option.

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:

Required 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.
UFMEC 191
Define Empirical Correction Factor for Mechanical Erosion by Particles

TEMP1 is the first temperature for empirical model A.


TEMP2 is the second temperature for empirical model A.
Required Output:
FMEC is the factor correction for erosion by impacting particles.
192 UGMEC
Determine the Empirical Correlation G for Recession Calculation

UGMEC Determine the Empirical Correlation G for Recession Calculation

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:

Required 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.
DTIME is the increment of time.
LINRIZE is the flag to indicate linearization: 1 if linear, 2 if constant.
VLP is the velocity of liquid particles.
IDVLP is the table ID for velocity of liquid particles.
DIAMLP is the diameter of liquid particles
IDDIAMLP is the table ID for diameter of liquid particles.
UGMEC 193
Determine the Empirical Correlation G for Recession Calculation

ANGLP is the angle of impact of liquid particles.


IDANGLP is the table ID for angle of impact of liquid particles.
Required Output:
TGMEC is the correlation factor between momentum of particles and flux.
194 UABLATE
Definition of Surface Recession Rate

UABLATE Definition of Surface Recession Rate

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

Required 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.
ARCL(2) is the normalized arc length.
CPTIM is the time at the beginning of the increment.
TIMINC is the time increment.
XORD is the integration point coordinate.
UABLATE 195
Definition of Surface Recession Rate

NCRD is the number of coordinates.


RHOCURI is the effective material density.
Required Output:
RECRATE is the recession rate.
196 UABLTNORM
Definition of Direction of Recession

UABLTNORM Definition of Direction of Recession

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

Required 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.
UWEARINDEX 197
User-defined Wear Calculation for Wear Feature

UWEARINDEX User-defined Wear Calculation for Wear Feature

Description
This user subroutine can be used for calculating the amount of wear (Volume A Theory and User
Information, Chapter 5, Mechanical Wear).
The routine is called for each node that is in contact when the contact body the node belongs to is set up
to do wear calculation. The WEAR model definition option must flag that the UWEARINDEX user
subroutine should be used in the wear calculation.
The user defines the rate of wear wrnd at the current node.
The standard Archard law would calculate the rate of wear as
K
w = ---- V rel
H

To code this in this routine one would use


wrnd=(param(1)/param(2))*costrs*relvelnd
The rate of wear wrnd is available as nodal post code 78. This is a nodal vector in the direction normal
to the contact surface. The total amount of wear is accumulated as wtot=wtot+wrnd*timinc (where timinc
is the current time increment) and is available as post code 77.

Format
User subroutine UWEARINDEX is written with the following headers:

SUBROUTINE UWEARINDEX ( WRND,N,NUSER,INC,TIME,TIMINC,COORD,I2OR3,


$ NORMAL,COFORND,FRFORND,COSTRS,FRSTRS,
$ PARAM,TEMPI,RELVELND,ITOUCH,IBODY1,
$ IBODY2,FRIC)
REAL*8 WRND,TIME,TIMINC,COORD,NORMAL,COFORND
REAL*8 FRFORND,COSTRS,FRSTRS,PARAM,TEMPI,RELVELND,FRIC
INTEGER N,NUSER,INC,I2OR3,ITOUCH,IBODY1,IBODY2
DIMENSION COORD(*),NORMAL(*),PARAM(*)
RETURN
END
where:

Required Input:
N is the internal node ID
NUSER is the user node ID
198 UWEARINDEX
User-defined Wear Calculation for Wear Feature

INC is the increment number


TIME is the time at beginning of increment
TIMINC is the incremental time
COORD is the current coordinate position of the node
I2OR3 is two (2) or three (3) based upon dimension
NORMAL is the surface normal direction at contact point (out from contact body)
COFORND is the contact force
FRFORND is the friction force
COSTRS is the contact stress
FRSTRS is the friction stress
PARAM is the input parameters from input including any table effects:
param(1): wear coefficient
param(2): hardness
param(3): stress exponent
param(4): velocity exponent
param(5): activation temperature
TEMPI is the temperature at node N
RELVELND ris the elative sliding velocity at nod N
ITOUCH is set to 1 if the node is part of the touching body
is set to 2 if the node is part of a touched segment
IBODY1 is the contact body the node belongs to
IBODY2 is the second contact body:
touched body if itouch=1
touching body if itouch=2
FRIC is the coefficient of friction between ibody1 and ibody2, including any table effects
Required Output:
WRND is the rate of wear at node N to be defined in this routine
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines List
Marc Volume D: User Subroutines and Special Routines

User-defined Anisotropy and


3 Constitutive Relations User
Subroutines List

User Subroutine Page


ANELAS 208
ANEXP 236
ANKOND 238
ANPLAS 222

CRPLAW 254

GAPU 321
GENSTR 308

HOOKLW 219
HYPELA2 294
200 Marc Volume D: User Subroutines and Special Routines

User Subroutine Page


ORIENT 234
ORIENT2 231

TENSOF 270

UACOUS 336
UANISYLD 224
UARRBO 332
UBEAM 311
UCOHESIVE 313
UCOHESIVET 315
UCOKSL 342
UCOMPL 319
UCRACK 268
UCRPLW (Viscoplastic) 252
UCURE 248
UDAMAG 279
UELASTOMER 303
UELDAM 292
UENERG 288
UEPS 240
UFAIL 226
UFINITE 300
UGASKET 323
UGENT 334
UGRAIN 277
UMOONY 286
UMU 242
UNEWTN 328
UOGDEN 290
UPERM 284
UPHI 317
UPOWDR 281
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines List 201

User Subroutine Page


UPROGFAIL 228
UPYROLEFF 346
UPYROLSL 340
URPFLO 330
USELEM 325
USHRET 272
USHRINKAGE 250
USIGMA 244
USPCHT 246
USPCHTAB 349
USPRNG 265
USSUBS 338
UVOID 273
UVOIDN 274
UVOIDRT 276
UWATERSL 344

VSWELL 259

WKSLP 262
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines
Marc Volume D: User Subroutines and Special Routines

User-defined Anisotropy and


3 Constitutive Relations
User Subroutines
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines 203

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.
204 Marc Volume D: User Subroutines and Special Routines

Table 3-1 User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
User Required Parameters or
Subroutine Model Definition Options Purpose
ANELAS ORTHOTROPIC or Definition of factors to scale elastic stress strain law.
ANISOTROPIC
ANEXP ORTHOTROPIC or Definition of thermal strain increment.
ANISOTROPIC
ANKOND ORTHOTROPIC or Definition of thermal conductivity or electrical resistance in
ANISOTROPIC Joule heating.
ANPLAS ORTHOTROPIC or Definition of parameters for Hill yield criteria
ANISOTROPIC
CRPLAW CREEP Definition of function to describe creep strain rate.
GAPU GAP DATA Definition of contact gap closure distance
GENSTR SHELL SECT Definition of generalized stress-strain law for shells.
HOOKLW ORTHOTROPIC or Definition of elastic stress-strain or compliance relation.
ANISOTROPIC
HYPELA2 HYPOELASTIC Definition of nonlinear stress-strain relationship.
ORIENT2 ORIENTATION Definition of material preferred direction
COMPOSITE
ORIENT ORIENTATION Definition of preferred material orientation for orthotropic or
anisotropic behavior.
TENSOF ISOTROPIC Definition of tension softening modulus.
CRACK DATA
UACOUS ACOUSTIC Definition of material properties for an acoustic medium.
CONTACT (2-D)
CONTACT (3-D)
UANISYLD ISOTROPIC or Definition of user-defined anisotropic yield function.
ORTHOTROPIC or
ANISOTROPIC
UARRBO ARRUDBOYCE Definition of constants in strain energy function.
UBEAM HYPOELASTIC Definition of nonlinear generalized stress-strain law for
element types 52 or 98.
UCOHESIVE COHESIVE Definition of material behavior for interface modeling using
element types 186, 187, 188, 189, 190, 191, 192, or 193.
UCOHESIVET COHESIVE Definition of thermal material behavior for interface modeling
using element types 220, 221, 222, 223, 224, 225, 226, or 227.
UCOKSL PYROLYSIS Definition of mass fraction of carbon in pyrolysis gas
THERMO-PORE
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines 205

Table 3-1 User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
User Required Parameters or
Subroutine Model Definition Options Purpose
UCOMPL HARMONIC Definition of stress-strain rate relationship for
harmonic analysis.
UCRACK ISOTROPIC Definition of ultimate stress for cracking analysis.
CRACK DATA
UCRPLW CREEP Definition of complex relationships for the factors in the
power law expression for the creep strain rate.
UCURE CURING Definition of the cure kinetics models and calculation of the
CURE RATE degree of cure.
UDAMAG DAMAGE Definition of the Kachanov damage factor to be applied to the
material properties
UELASTOMER LARGE STRAIN Allows definition of the users own hyperelastic models.
FOAM or
MOONEY or
ARRUDBOYCE or
GENT or
OGDEN
UELDAM OGDEN Definition of damage parameters for Ogden rubber model.
DAMAGE
UENERG MOONEY Definition of strain energy function.
UEPS ELECTRO or Definition of anisotropic electrical permittivity.
EL-MA
ORTHOTROPIC
UFAIL FAIL DATA Definition of composite failure criteria.
UPROGFAIL Definition of the stiffness reduction factors for a progressive
failure analysis
UFINITE LARGE STRAIN Definition of finite deformation isotropic material models.
UGASKET GASKET Definition of initial gasket gap distance.
UGENT ARRUDBOYCE Definition of constants in strain energy function.
UGRAIN GRAIN SIZE Definition of typical grain size calculation based upon the
state of material
UMOONY MOONEY Definition of temperature dependent
Mooney-Rivlin constants.
UMU MAGNETO or Definition of anisotropic magnetic permeability.
EL-MA
ORTHOTROPIC
UNEWTN R-P FLOW or Definition of material viscosity.
FLUID
206 Marc Volume D: User Subroutines and Special Routines

Table 3-1 User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
User Required Parameters or
Subroutine Model Definition Options Purpose
UOGDEN OGDEN Definition of Ogden material parameters.
UPERM PORE Definition of soil permeability.
UPHI HARMONIC Definition of phi coefficients for rubber-viscoelastic harmonic
MOONEY analysis.
PHI-COEFFICIENTS
UPOWDR POWDER Definition of powder material data.
UPYROLEFF THERMO-PORE Definition of effective conductivity.
UPYROLSL THERMO-PORE Definition of the rate of decomposition along a streamline.
URPFLO R-P FLOW Definition of yield surface for rigid plastic flow.
USELEM USER Definition of consistent nodal loads, mass matrix, stiffness
matrix, and residuals for user-defined element.
USHRET ISOTROPIC Definition of shear retention factor for elements that have
CRACK DATA cracks.
USHRINKAGE CURING Definition of the volumetric cure shrinkage models and
CURE RATE calculates the degree of cure shrinkage, the volumetric cure
CURE SHRINKAGE shrinkage strain, and the directional Cure Shrinkage
Coefficient matrix (CSC)
USIGMA EL-MA Definition of anisotropic electrical conductivity.
USPCHT HEAT or Definition of specific heat.
COUPLE or
FLUID
USPCHTAB THERMO-PORE Definition of specific heat for simplified pyrolysis model.
USPRNG SPRINGS or Definition of nonlinear spring or foundation stiffness.
FOUNDATION
USSUBS SUPER Definition of superelements not generated by Marc.
SUPERINPUT
UWATERSL THERMO-PORE Definition of rate of water evaporation.
UVOID DAMAGE Definition of initial void fraction for Gurson damage model.
UVOIDN DAMAGE Definition of void nucleation for Gurson damage model.
UVOIDRT TABLE Definition of the Initial Void Ratio or Initial Porosity
INITIAL VOID RATIO
INITIAL POROSITY
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines 207

Table 3-1 User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
User Required Parameters or
Subroutine Model Definition Options Purpose
VSWELL CREEP Definition of volumetric swelling.
WKSLP ISOTROPIC or Definition of work hardening or strain hardening data.
ORTHOTROPIC or
ANISOTROPIC
WORK HARD
208 ANELAS
Elastic Anisotropy

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.

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

Alternate Format
User subroutine MD_ANELAS (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_ANELAS ( M,NN,KCUS,DRATS,IRDIM,NDI,NSHEAR,MATUS,


* DT,DTDL,B,RPROPS,IPROPS,NSTATS,MATNAMEC,
* ISUNIT,NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 B, DRATS, DT, DTDL
ANELAS 209
Elastic Anisotropy

INTEGER IPROPS, IRDIM, KCUS, M, MATUS, N, NDI, NN, NSHEAR


INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
REAL*8 RPROPS,RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION DRATS(IRDIM,IRDIM),DT(*),DTDL(*),B(IRDIM,IRDIM),N(2)
DIMENSION RPROPS(*),IPROPS(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required 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; temperature is the first state variable.
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.
210 ANELAS
Elastic Anisotropy

Table 3-2 Allowable Anisotropy


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
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
ANELAS 211
Elastic Anisotropy

Table 3-2 Allowable Anisotropy (continued)


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)
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 subroutine to
39, 40, 41, supply anisotropic conductivity
42, 43, 44
45 None 1 1 1
46, 47, 48 None
49 Any in V1 - V2 3 2 1
50 Use the ANKOND user subroutine to
supply anisotropic conductivity
51 None 1 1 0
52 None 1 1 0
53 Orthogonal in x-y plane 3 2 1
54 Orthogonal in x-y plane 4 3 1
55 Orthogonal in z-r plane 4 3 1
56 Orthogonal in x-y plane 4 3 1
57 Orthogonal in (x,y,z) space 6 3 3
58 Orthogonal in x-y plane 4 3 1
59 Orthogonal in z-r plane 4 3 1
60 Orthogonal in x-y plane 4 3 1
61 Orthogonal in (x,y,z) space 6 3 3
62 Orthogonal in z-r plane 6 3 3
63 Orthogonal in z-r plane 6 3 3
64 None 1 1 0
65 None 1 0 0
212 ANELAS
Elastic Anisotropy

Table 3-2 Allowable Anisotropy (continued)


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)
66 Orthogonal in z-r plane 6 3 3
67 Orthogonal in z-r plane 6 3 3
68 None 1 0 1
69 Use the ANKOND user subroutine to
supply anisotropic conductivity
70 Use the ANKOND user subroutine to
supply anisotropic conductivity
71 Use the ANKOND user subroutine to
supply anisotropic conductivity
72 Orthogonal in V1 - V2 3 2 1
73 Orthogonal in z-r plane 6 3 3
74 Orthogonal in z-r plane 6 3 3
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
ANELAS 213
Elastic Anisotropy

Table 3-2 Allowable Anisotropy (continued)


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)
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
94 Orthogonal in z-r plane 4 3 1
95 Orthogonal in z-r plane 6 3 3
96 Orthogonal in z-r plane 6 3 3
97 None 1 0 0
98 None 1 1 2
99 None
100 None
101 Use the ANKOND user subroutine to
supply anisotropic conductivity
102 Use the ANKOND user subroutine to
supply anisotropic conductivity
103 Use the ANKOND user subroutine to
supply anisotropic conductivity
104 Use the ANKOND user subroutine to
supply anisotropic conductivity
105 Use the ANKOND user subroutine to
supply anisotropic conductivity
106 Use the ANKOND user subroutine to
supply anisotropic conductivity
107 Orthogonal in (x,y,z) space 6 3 3
108 Orthogonal in (x, y, z) space 6 3 3
109 Use the UMU user subroutine
110 Use the UMU user subroutine
111 Use the UEPS, UMU, USIGMA
user subroutines
214 ANELAS
Elastic Anisotropy

Table 3-2 Allowable Anisotropy (continued)


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)
112 Use the UEPS, UMU, USIGMA
user subroutines
113 Use the UEPS, UMU, USIGMA
user subroutines
114 Orthogonal in x-y plane 3 2 1
115 Orthogonal in x-y plane 4 3 1
116 Orthogonal in z-r plane 4 3 1
117 Orthogonal in x,y,z space 6 3 3
118 Orthogonal in x-y plane 4 3 1
119 Orthogonal in z-r plane 4 3 1
120 Orthogonal in x,y,z space 6 3 3
121 Use the ANKOND user subroutine
122 Use the ANKOND user subroutine
123 Use the ANKOND user subroutine
124 Orthogonal in x-y plane 3 2 1
125 Orthogonal in x-y plane 4 3 1
126 Orthogonal in z-r plane 4 3 1
127 Orthogonal in x,y,z space 6 3 3
128 Orthogonal in x-y plane 4 3 1
129 Orthogonal in z-r plane 4 3 1
130 Orthogonal in x,y,z, space 6 3 3
131 Use the ANKOND user subroutine
132 Use the ANKOND user subroutine
133 Use the ANKOND user subroutine
134 Orthogonal in x,y,z space 6 3 3
135 Use the ANKOND user subroutine
138 Orthogonal in V1-V2 3 2 1
139 Orthogonal in V1-V2 3 2 1
140 Orthogonal in V1-V2 5 2 3
ANELAS 215
Elastic Anisotropy

Table 3-2 Allowable Anisotropy (continued)


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
153 Orthogonal in x-y plane 4 3 1
154 Orthogonal in z-r plane 4 3 1
155 Orthogonal in x-y plane 4 3 1
156 Orthogonal in z-r plane 4 3 1
157 Orthogonal in (x, y, z) space 6 3 3
158 None
159 None
160 Orthogonal in x-y plane 3 2 1
161 Orthogonal in x-y plane 4 3 1
162 Orthogonal in z-r plane 4 3 1
163 Orthogonal in x-y-z space 6 3 3
164 Orthogonal in x-y-z space 6 3 3
165 None 1 1 0
166 None 1 1 0
167 None 1 1 0
168 None 1 1 0
169 None 1 1 0
216 ANELAS
Elastic Anisotropy

Table 3-2 Allowable Anisotropy (continued)


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)
170 None 1 1 0
171 None 1 0 0
172 None 1 0 0
173 None 1 0 0
174 None 1 0 0
175 Use the ANKOND user subroutine
176 Use the ANKOND user subroutine
177 Use the ANKOND user subroutine
178 Use the ANKOND user subroutine
179 Use the ANKOND user subroutine
180 Use the ANKOND user subroutine
181 Use the UMU user subroutine
182 Use the UMU user subroutine
183 None
184 Orthogonal in x-y-z plane 6 3 3
185 Orthogonal in x-y-z plane 6 3 3
186 Use the UCOHESIVE user subroutine 2 1 1
187 Use the UCOHESIVE user subroutine 2 1 1
188 Use the UCOHESIVE user subroutine 3 1 2
189 Use the UCOHESIVE user subroutine 3 1 2
190 Use the UCOHESIVE user subroutine 2 1 1
191 Use the UCOHESIVE user subroutine 2 1 1
192 Use the UCOHESIVE user subroutine 3 1 2
193 Use the UCOHESIVE user subroutine 3 1 2
194 None
195 None
196 Use the ANKOND user subroutine
197 Use the ANKOND user subroutine
198 Use the ANKOND user subroutine
ANELAS 217
Elastic Anisotropy

Table 3-2 Allowable Anisotropy (continued)


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)
199 Use the ANKOND user subroutine
200 Any in surface 3 2 1
201 Orthogonal in x-y plane 3 2 1
202 Orthogonal in x, y, z space 6 3 3
203 Use the ANKOND user subroutine
204 Use the UMU user subroutine
205 Use the UMU user subroutine
206 Use the UMU user subroutine
220 None
221 None
222 None
223 None
224 None
225 None
226 None
227 None

All parameters except the R array are defined by Marc. R must be defined by the user in this
user subroutine.
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

To define an anisotropic stress-strain relation for the Herrmann incompressible elements in Marc, the
ANELAS user subroutine is used in a slightly different manner. The compliance strain-stress relation is
given directly in the fourth argument R and is not used in the last argument D. For example, in the most
generally allowed case, the compliance relation in the preferred orientation is:
218 ANELAS
Elastic Anisotropy

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.

Examples of the use of the ANELAS user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.45, 2.50, 2.53, and 8.8.
HOOKLW 219
Anisotropic Elastic Law

HOOKLW Anisotropic Elastic Law

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

23 B51 B52 B53 B54 B55 B56 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.

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
220 HOOKLW
Anisotropic Elastic Law

Alternate Format
User subroutine MD_HOOKLW (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_HOOKLW ( M,NN,KCUS,DRATS,NGENS,DT,DTDL,E,PR,


* NDI,NSHEAR,IMOD,RPROPS,IPROPS,NSTATS,
* MATUS,MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 DRATS, DT, DTDL, E
INTEGER IMOD,IPROPS,KCUS,M,NDI,NGENS,NN,NSHEAR,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,IDATA,MATUS
REAL*8 PR, RPROPS,RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION DRATS(NGENS,NGENS),DT(*),DTDL(*),RPROPS(*),IPROPS(*),
* KCUS(2),MATUS(2),E(*),PR(*)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required 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 Youngs modulus including temperature effects.
PR is the Poissons 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.
HOOKLW 221
Anisotropic Elastic Law

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.

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.

An example of the use of the HOOKLW user subroutine can be found in Marc Volume E: Demonstration
Problems, problem.8.8.
222 ANPLAS
Anisotropic Yield Surface and Creep Potential

ANPLAS Anisotropic Yield Surface and Creep Potential

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 yz
2 + 3a 2 = 2
6 xy

(R. Hill - Mathematical Theory of Plasticity, Oxford, 1950)

where: is the equivalent tensile yield stress for isotropic behavior: = P T and, for Mohr-Coulomb
x + +y
behavior: = J1 -z
; J 1 = ------------------------------
3

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 = -----------------------------2- + -----------------------------2- -----------------------------2-
YRDIR 2 YRDIR 3 YRDIR 2

1 1 1
a 2 = -----------------------------2- + -----------------------------2- -----------------------------2-
YRDIR 3 YRDIR 1 YRDIR 2

1 1
a 3 = -----------------------------2- + -----------------------------2- -----------------------------2-
YRDIR 1 YRDIR 2 YRDIR 3

2
a 4 = ------------------------------2-
YRSHR 3

2
a 5 = ------------------------------2-
YRSHR 2

2
a 6 = ------------------------------2-
YRSHR 1

Note that YRDIR and YRSHR should be given in the order appropriate for the element (see Marc Volume B:
Element Library 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
ANPLAS 223
Anisotropic Yield Surface and Creep Potential

Alternate Format
User subroutine MD_ANPLAS (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_ANPLAS ( N,NN,KCUS,NDI,NSHEAR,MATUS,YRDIR,YRSHR,


* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,RDATA,
* CDATA)
INTEGER KCUS, MATUS, N, NDI, NN, NSHEAR
INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
REAL*8 YRDIR, YRSHR,RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION YRDIR(*),YRSHR(*),N(2),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required 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 user-defined in this
user subroutine.
A example of the use of the ANPLAS user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 3.6.
224 UANISYLD
User-defined Anisotropic Yield

UANISYLD User-defined Anisotropic Yield

Description
This user subroutine allows you to define the normal to a generalized anisotropic yield surface. This user
subroutine is activated by using the GEN-ANIYLD yield criteria on the ISOTROPIC, ORTHOTROPIC, or
ANISOTROPIC model definition options.

Format
User subroutine UANISYLD is written with the following headers:

SUBROUTINE UANISYLD ( MDUM,NN,KCUS,DT,DTDL,NSTATS,CPTIM,TIMINC,


* RV,JV,SI,XNI,EQSTRS,NDI,NSHEAR,NSTRM1,
* MATUS)
INTEGER MDUM,NN,KCUS,STATS,JV,NDI,NSHEAR,NSTRM1,MATUS
REAL*8 DT,DTDL,RV,SI,XNI,EQSTRS,CPTIM,TIMINC
DIMENSION DT(*),DTDL(*),MDUM(2),MATUS(2),KCUS(2),RV(6),JV(6),
* SI(NSTRM1),XNI(NSTRM1)
user coding
RETURN
END
where:

Required Input:
MDUM(1) is the element number.
MDUM(2) is the element/elsto number.
NN is the integration point number.
KCUS(1) is your layer number .
KCUS(2) is the internal layer number.
DT is the current state variables; temperature is the first state variable.
DTDL is the incremental state variable.
NSTATS is the number of state variables.
CPTIM is the time at the beginning of the increment.
TIMINC is the time increment.
RV is the user entered anisotropic data.
JV is the table ID for user-defined anisotropic data.
MATUS(1) is the user material identification number.
MATUS(2) is the internal material identification number.
SI is the stress tensor
UANISYLD 225
User-defined Anisotropic Yield

NDI is the number of direct components.


NSHEAR is the number of shear components.
NSTRM1 is the size of stress-strain (ndi + nshear)
Required Output:
FXNI is the normal-to-yield surface.
EQSTRT is the equivalent stress.
226 UFAIL
User-defined Failure Criterion

UFAIL User-defined Failure Criterion

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.
The stresses and strains are given in the element preferred system as given by the ORIENTATION model
definition option. If this option is not used, they are in the default system.
STRESS and STRAIN have the following components:

1 x
2 y
3 z
4 xy
5 yz
6 xz

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

Alternate Format
User subroutine MD_UFAIL (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UFAIL ( NELEM,NINT,KCUS,MATUS,STRESS,STRAIN,NDI,


* NSHEAR,FAILC,DT,DTDL,NSTATS,MATNAMEC,
* ISUNIT,NID,NRD,NCD,IDATA,RDATA,CDATA)
UFAIL 227
User-defined Failure Criterion

REAL*8 FAILC,STRAIN, STRESS,DT,DTDL,RDATA


INTEGER KCUS,MATUS,N,NDI,NELEM,NINT,NSHEAR,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,DATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION STRESS(*),STRAIN(*),N(2),MATUS(2),KCUS(2),FAILC(2)
DIMENSION DT(*),DTDL(*)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required 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.
NSHEAR is the number of shear stresses.
Required Output:
FAILCR (1) is user-defined failure criteria.
FAILCR (2) is user-defined strength ratio (allowable stress/actual stress)
228 UPROGFAIL
Definition of Material Stiffness Reduction Factors for Progressive Failure Analysis

UPROGFAIL Definition of Material Stiffness Reduction Factors for


Progressive Failure Analysis

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.
For this routine to be invoked, the progressive failure type must be either gradual selective or immediate
selective stiffness degradation.
This routine is not used for progressive Option 1 (see 3rd field of 3rd data block, FAIL DATA option).

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

Alternate Format
User subroutine MD_UPROGFAIL (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UPROGFAIL ( NELEM,NINT,KCUS,MATUS,STRESS,STRAIN,


1 ICRIT,FI,REDFAC0,REDFAC,IDEACT,DT,DTDL,
2 TIME,TIMEINC,NSTATS,MATNAMEC,ISUNIT,
3 NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 FI,REDFAC0,REDFAC,TIME,TIMEINC
INTEGER KCUS,MATUS,N,NELEM,NINT,ICRIT,IDEACT
UPROGFAIL 229
Definition of Material Stiffness Reduction Factors for Progressive Failure Analysis

INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
REAL*8 STRAIN, STRESS,DT,DTDL,RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION STRESS(*),STRAIN(*),N(2),MATUS(2),KCUS(2)
DIMENSION FI(*),REDFAC0(6),REDFAC(6),DT(*),DTDL(*)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required 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
MATUS is the material ID
matus(1) user material ID
matus(2) internal material ID
STRESS is the current total stresses in preferred system,
in full tensor format ( 11 , 22 , 33 , 12 , 23 , 13 )
STRAIN is the current total strains in preferred system,
in full tensor format ( 11 , 22 , 33 , 12 , 23 , 13 )
ICRIT is the current failure criterion:
1 maximum stress
2 maximum strain
3 Tsai-Wu
4 Hoffman
5 Hill
6 not used
7 user
8 Hashin
9 Hashin Fabric
10 not used
11 not used
12 Hashin Tape
13 puck
230 UPROGFAIL
Definition of Material Stiffness Reduction Factors for Progressive Failure Analysis

FI is the array of current failure indices


REDFAC0 is the array of current reduction factors
REDFAC is the array of reduction factors to be updated.
upon entry it contains the values calculated by the program.
IDEACT is the deactivation flag. Set to 1 to flag that the element should be deactivated. If all
integration points of the element have this flag set, it is deactivated at the end of the
current increment. Upon entry, it contains the value calculated by the program.
DT is the array of state variables at the beginning of the current increment;
dt(1) is the temperature
DTDL is the array of increment of state variables;
dtdl(1) is the incremental temperature.
TIME is the time at the beginning of the current increment
TIMEINC is the time increment

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

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 Poissons ratios are scaled the same way as the corresponding shear modulus.
For an isotropic material, the Youngs modulus is scaled with the smallest of the components of redfac
and the shear modulus is calculated using the updated Youngs modulus and the Poissons ratio.
The case of general anisotropy is not supported.
ORIENT2 231
User-defined Material Orientation

ORIENT2 User-defined Material Orientation

Description
This user subroutine is used for defining the material preferred direction (see Volume A Theory and User
Information, Chapter 7, Material Preferred Direction). It is associated with the ORIENTATION model
definition option, in which the use of this subroutine is flagged.
The preferred material coordinate system is defined in this routine by specifying two vectors. The first
vector defines the first preferred direction of the material coordinate system. The third preferred direction
is computed as the cross product between the two specified vectors so it is perpendicular to both. The
second preferred direction is calculated as the cross product between the third and first preferred
directions. Hence, the second specified vector is only used for obtaining the third preferred direction.
For plane stress shell elements and composite elements, the third material direction must coincide with
the element thickness direction. This is enforced by projecting the specified vectors onto a plane
perpendicular to the thickness direction. This procedure is performed on all composite elements,
including solid shell and solid composite elements. If the first direction is in the same direction as the
third direction, an error message will be printed and the program will stop with an exit number 1009.
The two specified vectors can be given in either the element coordinate system or in the global coordinate
system. This is specified with the argument list variable ilocal.
Composite materials typically use multiple layers with different material orientation in each layer. In the
input for a composite material (COMPOSITE model definition option), one can define a ply angle for
each layer. The ply angle defines the rotation of the first preferred direction around the element thickness
direction. In order to use this ply angle, one defines a base material orientation and the material
orientation of each layer is obtained by rotating the base material orientation with the ply angle. In this
user subroutine, there are two options for defining the orientation of each layer of a composite (controlled
by argument list variable iply). The first (iply=0) is to define the base orientation system and use the ply
angles to obtain the orientation in each layer. The second option (iply=1) is to specify the final material
orientation in each layer. For this case the ply angles specified in the COMPOSITE option are ignored.
The ORIENT2 subroutine is called for each element, integration point, and layer. An exception is for the
fast integrated composite option in which case it is only called for the first layer. With the fast integrated
composite option, it is not possible to specify the orientation of each layer (iply=2 case). The routine is
only called at the beginning of the analysis. The calculated material orientations are stored and reused
in the rest of the analysis. The effects of large deformations and large rotations are automatically taken
into account.
The calculated material orientations can be visualized during post processing by means of the element
post codes 691 and 694 (Element Orientation Vector 1 and 2). Also for composites, post code 697 is
needed (Layer Orientation Angle). Although it is possible to specify and use separate orientations for
each integration point and layer of an element, the post processing will only show an average system for
the element (except for composites, for which each layer orientation can be visualized). For multilayered
noncomposite elements, it is strongly recommended to use the same orientation in each layer. If different
orientations are needed, one should use a composite.
232 ORIENT2
User-defined Material Orientation

For post processing of orientations for composite elements with Mentat one can show the element
orientation and the layer orientation. The element orientation is the base material system which is
specified in this routine for the iply=0 case, where the ply angles are used. The layer orientation then
shows the orientation of each layer using the respective ply angle. In the case of iply=1, where this routine
specifies the final system for each layer, the element orientation will just show the local element system.
The layer orientation will show the systems defined in this routine.

Format
User subroutine ORIENT2 is written with the following headers:

SUBROUTINE ORIENT2 ( N,NN,KCUS,MATERIAL,MATNAME,ICOMP,NODES,


$ NNODES,COOORD,COORDINT,NCOORD,DIRCOS,
$ ICALL,IPLY,ILOCAL,IFAST,VEC1,VEC2,
$ INTEGER_DATA,REAL_DATA)
REAL*8 COORD,DIRCOS,VEC1,VEC2,COORDINT,REAL_DATA
CHARACTER*24 MATNAME
INTEGER N,NN,KCUS,MATERIAL,NODES,NNODES,NCOORD,ICALL,IPLY
INTEGER ILOCAL,ICOMP,IFAST,INTEGER_DATA
DIMENSION N(2),KCUS(2),MATERIAL(2),NODES(*)
DIMENSION COORD(NCOORD,*),DIRCOS(3,3),VEC1(3),VEC2(3)
DIMENSION COORDINT(*),INTEGER_DATA(*),REAL_DATA(*)
RETURN
END
where:

Input:
N(1) user element number
N(2) internal element number
NN integration point number
KCUS(1) user layer number 1 if continuum element and not composite
KCUS(2) internal layer number 1 if continuum element and not composite
MATERIAL(1) user material id of element or current layer if composite
MATERIAL(2) internal material id of element or current layer if composite
MATNAME material name of MATERIAL
ICOMP composite group id if composite, otherwise equal to zero
NODES element nodes (user IDs) for the current element
NNODES number of element nodes for the current element
COORD coordinates of the element nodes
ORIENT2 233
User-defined Material Orientation

COORDINT coordinate of the current integration point


NCOORD number of coordinate directions (equal to 2 for 2-D elements and equal to 3 for
3-D elements)
DIRCOS direction cosines. this gives the transformation between the element
coordinate system and the global coordinate system.
dircos(1,1:3) gives the global x axis in the element coordinate system
dircos(1:3,1) gives the local x axis in the global coordinate system
ICALL currently not used
IFAST equal to 1 if the current element is using the fast integrated composite option
(no thermal)
equal to 2 if the current element is using the fast integrated composite option
(thermal)
equal to 0 otherwise
INTEGER_DATA array with integer numbers; currently not used.
REAL_DATA array with real numbers; currently not used.
Required Output:
IPLY if set to 1 in this routine, then this routine will specify the total orientation of
each layer. only relevant for composites and not available for fast integrated
composites (ifast>0).
ILOCAL if set to 1 in this routine then the vectors below are given in the element
coordinate system.
VEC1, VEC2 vectors to define the material system

Examples of the use of the ORIENT user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 8.104.
234 ORIENT
Specification of Preferred Orientation

ORIENT Specification of Preferred Orientation

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.

Note: The ORIENT2 user subroutine is the preferred method to define the preferred material
orientation.

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

Alternate Format
User subroutine MD_ORIENT (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_ORIENT ( N,NN,KCUS,G,MATUS,MATNAMEC,ISUNIT,


5 XIPT,NCRD,NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 G,RDATA, XIPT
INTEGER KCUS,N,NN,NCRD,MATUS
INTEGER NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION G(3,3),N(2),KCUS(2),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
ORIENT 235
Specification of Preferred Orientation

where:

Required 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.

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.

Examples of the use of the ORIENT user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.50 and 2.53.
236 ANEXP
Anisotropic Thermal Expansion

ANEXP Anisotropic Thermal Expansion

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
( th i j for doubly curved shell elements 4, 8, and 24) in the user subroutine. Any components of
ijth
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

Alternate Format
User subroutine MD_ANEXP (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_ANEXP ( N,NN,KCUS,T,TINC,COED,NDI,NSHEAR,EQEXP,


* MATUS,NSTATS,MATNAMEC,ISUNIT,NID,NRD,NCD,
* IDATA,RDATA,CDATA)
REAL*8 COED,EQEXP,T,TINC,RDATA
INTEGER KCUS,N,NDI,NN,NSHEAR,MATUS,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION T(*),TINC(*),EQEXP(*),COED(NDI),N(2),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
ANEXP 237
Anisotropic Thermal Expansion

where:

Required 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).
T(1) is the total temperature at the beginning of the increment.
T(2) is the total values of other state variables at the beginning of the increment.
TINC(1) is the temperature increment.
TINC(2) etc. are the increments of other state variables.
COED(I) is the base value of the Ith coefficient of thermal expansion as given through the
input data. There are NDI coefficients for each element.
NDI is the number of direct components of strain at this point.
NSHEAR is the number of shear components of strain at this point.
Required Output:
EQEXP is the thermal strain increment vector, to be USER-defined in this user subroutine.
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.

An example of the use of the ANEXP user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 2.50.
238 ANKOND
Input of Anisotropic Thermal Conductivity Matrix

ANKOND Input of Anisotropic Thermal Conductivity Matrix

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

Alternate Format
User subroutine MD_ANKOND (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_ANKOND ( COND,CANISO,N,NN,KCUS,MATUS,ID,T,DT,TIME,


* DELTIM,JOULHT,NSTATS,MATNAMEC,ISUNIT,
* NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 CANISO,COND,DELTIM,DT,T,TIME,RDATA
INTEGER ID, JOULHT,KCUS,MATUS,N,NN,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION COND(ID,ID),CANISO(3),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
ANKOND 239
Input of Anisotropic Thermal Conductivity Matrix

where:

Required 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.
T
ID is the size of the COND matrix; that is, the number of derivatives. ------
-
x j

T is the temperature at the beginning of the time increment.


DT is the estimated temperature increment.
TIME is the transient time at the beginning of the increment.
DELTME is the increment of time.
JOULHT = 0 return thermal conductivity.
= 1 return electrical conductivity.
Required Output:
COND is the conductivity matrix, kij:
T
q i = k ij -------
x j

This is to be redefined 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 anisotropic according to kij (T) given on the ISOTROPIC,
ORTHOTROPIC, and TEMPERATURE EFFECTS or TABLE options.

An example of the use of the ANKOND user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 5.7.
240 UEPS
Input of Anisotropic Permittivity Matrix

UEPS Input of Anisotropic Permittivity Matrix

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

Alternate Format
User subroutine MD_UEPS (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UEPS ( EPS,M,NN,KCUS,MATUS,ID,MATNAMEC,ISUNIT,


* NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 EPS, RDATA
INTEGER ID, M,MATUS,NN,KCUS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION EPS(ID,ID),M(2),MATUS(2),KCUS(2)
DIMENSION DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required 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.
UEPS 241
Input of Anisotropic Permittivity Matrix

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 redefined 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.
242 UMU
Input of Anisotropic Permeability Matrix

UMU Input of Anisotropic Permeability Matrix

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 + B r

where:

B is the magnetic induction.


H is the magnetic field intensity.
is the permeability.
Br is the remanence.
B is complex in a harmonic analysis.

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

Alternate Format
User subroutine MD_UMU (activated through the MATUDS option) is written with the following headers:

SUBROUTINE MD_UMU ( XMU,M,NN,KCUS,MATUS,ID,CPTIM,DTIME,B,


* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,RDATA,
* CDATA)
REAL*8 B, CPTIM, DTIME
INTEGER ID,M,MATUS,NN,KCUS,ISUNIT
REAL*8 XMU,RDATA
UMU 243
Input of Anisotropic Permeability Matrix

INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION XMU(ID,ID),M(2),B(3),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required Input:
M(1) is your element number.
M(2) is the internal element number.
NN is the integration point number.
ID is the size of the matrix.
CPTIM is the frequency in a harmonic analysis.
DTIME is the increment of time.
B is the magnetic flux density in a transient analysis, or is zero in a harmonic analysis.
Required Output:

XMU is the reluctivity matrix --1- H = --1- B B r .


This is to be redefined as necessary by the user.


This matrix is passed in as set-up for anisotropic permeability. If the user does not re-define
it, it remains anisotropic according to (T) given on the ISOTROPIC or
ORTHOTROPIC options.
244 USIGMA
Input of Anisotropic Electric Conductivity Matrix

USIGMA Input of Anisotropic Electric Conductivity Matrix

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

Alternate Format
User subroutine MD_USIGMA (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_USIGMA ( SIGMA,M,NN,KCUS,MATUS,ID,CPTIM,DTIME,


* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,RDATA,
* CDATA)
REAL*8 CPTIM,DTIME,SIGMA,RDATA
INTEGER ID,M,MATUS,NN,KCUS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION SIGMA(3,3),M(2),MATUS(2),KCUS(2)
RETURN
END
where:

Required Input:
M(1) is the user element number.
M(2) is the internal element number.
NN is the integration point number.
USIGMA 245
Input of Anisotropic Electric Conductivity Matrix

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 redefined as necessary by the user.
This matrix is passed in as set-up for anisotropic conductivity. If the user does not
redefine it, it remains as given through the ISOTROPIC or ORTHOTROPIC
options.
246 USPCHT
Definition of Specific Heat

USPCHT Definition of Specific Heat

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

Alternate Format (Activated through the MATUDS option)


User subroutine MD_USPCHT (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_USPCHT ( SPHEAT,M,NN,KCUS,INC,NCYCLE,MATUS,NSTATS,


* TEMP0,DTEMP,TIME,DTIME,MATNAMEC,ISUNIT,
* NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 DTEMP,DTIME,SPHEAT,TEMP0,TIME,RDATA
INTEGER INC,KCUS,M,MATUS,NCYCLE,NN,NSTATS
INTEGER NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION IDATA(*),RDATA(*),CDATA(*)
DIMENSION M(2),MATUS(2),KCUS(2)
RETURN
END
USPCHT 247
Definition of Specific Heat

where:

Required 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.
DT is the temperature at the start of the increment.
DTDL is the estimated increment of temperature.
CPTIM is the time at the beginning of the increment.
TIMINC is the increment of time.
Required Output:
SPHEAT is the specific heat per unit mass. This is to be defined by the user.
248 UCURE
Define the Cure Kinetics

UCURE Define the Cure Kinetics

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

Alternate Format
User subroutine MD_UCURE (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UCURE ( M,N,NN,KCUS,MATUS,DT,AK,DENSITY,VOLUMI,


* CUREDAT,TEMPBEG,TEMPEND,DELTIME,TIME,
* CURERATE,MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 AK,CUREDAT,CURERATE,DELTIME,DENSITY,DT
INTEGER KCUS,M,MATUS,N,NN,NID,NRD,NCD,IDATA,ISUNIT
REAL*8 TEMPBEG,TEMPEND,TIME,VOLUMI,RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION CUREDAT(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
UCURE 249
Define the Cure Kinetics

where:

Required 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.
VOLUMI is the volume at the initial point.
If the material has both fiber and resin, then volumi should be multiplied by vsfact (0
vsfact 1) which is the volume fraction of resin in the element which is equivalent to
the porosity vsfact = void/(1 + void) where void is the void ratio.
CUREDAT is the material data.
curedat (9) is the total reaction heat of the cure.
TEMPBEG is the temperature at the beginning of the increment.
TEMPEND is the temperature at the end of the increment.
TIME is the time at the beginning of the increment.
DELTIME is the incremental time.
Required Output:
AK is the degree of cure at the end of the increment.
CUREDAT(9) is the total resin reaction heat of curing.
CURERATE is the cure rate.
VOLUMI is used if the resin volume fraction is smaller than 1 (optional).

Notes: UNVGAS is the universal gas constant used by Marc. The default value of UNVGAS is (except
when input by the user):
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.

An example of the use of the UCURE user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 8.99.
250 USHRINKAGE
Define Volumetric Cure Shrinkage

USHRINKAGE Define Volumetric Cure Shrinkage

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

Alternate Format
User subroutine MD_USHRINKAGE (activated through the MATUDS option) is written with the
following headers:

SUBROUTINE MD_USHRINKAGE ( M,N,NN,KCUS,MATUS,AK,AKCBEG,


* AKCDEG,VOLFACT,SHRKDAT,TEMPBEG,
* TEMPEND,TIME,DELTIME,AKINC,VLMSTR,
* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 AK,AKCBEG,AKCDEG,AKINC,DELTIME,RDATA
INTEGER KCUS,M,MATUS,N,NN
INTEGER NID,NRD,NCD,IDATA,ISUNIT
REAL*8 SHRKDAT,TEMPBEG,TEMPEND,TIME,VLMSTR,VOLFACT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION SHRKDAT(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
USHRINKAGE 251
Define Volumetric Cure Shrinkage

where:

Required 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.
AKCBEG is the degree of cure shrinkage at the beginning of the increment.
TEMPBEG is the temperature at the beginning of the increment.
TEMPEND is the temperature at the end of the increment.
TIME is the time at the beginning of the increment.
DELTIME is the incremental time.
Required Output:
VLMSTR is the volume shrinkage strain increment.
AKCDEG is the degree of cure shrinkage at the end of the increment.
AKINC is the increment of the degree of cure of shrinkage for the current increment.
SHRKDAT(1) is the maximum volumetric shrinkage.
SHRKDAT(5-10) are the directional Cure Shrinkage Coefficients of material (CSC) that you
should define at this time:
shrkdat (5) CSC 11
shrkdat (6) CSC 22
shrkdat (7) CSC 33
shrkdat (8) CSC 12
shrkdat (9) CSC 23
shrkdat (10) CSC 31

An example of the use of the USHRINKAGE user subroutine can be found in Marc Volume E:
Demonstration Problems, problem 8.99.
252 UCRPLW (Viscoplastic)
Input of Creep Factors for Power Law Implicit Creep

UCRPLW (Viscoplastic) Input of Creep Factors for Power Law Implicit Creep

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)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION MDUM(*),MATUS(2),KCUS(2)
user coding
RETURN
END

Alternate Format
User subroutine MD_USCRPLW (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UCRPLW ( CPA,CFT,CFE,CFTI,CFSTRE,CPTIM,TIMINC,EQCP,


* DT,DTDL,MDUM,NN,KCUS,MATUS,NSTATS,
* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,RDATA,
* CDATA)
REAL*8 CFE,CFSTRE,CFT,CFTI,CPA,CPTIM,DT,DTDL,EQCP
INTEGER KCUS,MATUS,MDUM,NN,NID,NRD,NCD,IDATA,NSTATS,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
REAL*8 TIMINC, RDATA
DIMENSION MDUM(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
UCRPLW (Viscoplastic) 253
Input of Creep Factors for Power Law Implicit Creep

where:

Required Input:
CPTIM is the time at the beginning of the increment.
TIMINC is the time increment.
EQCP is the creep strain at the beginning of the increment.
DT is the temperature at the beginning of the increment.
DTDL is the incremental temperature.
MDUM(1) is the user element number.
MDUM(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).
MAT is the material number.
Required Output:
CPA is the creep constant.
CFT is the temperature factor.
CFE is the creep strain factor.
CFTI is the time factor.
CFSTRE is the stress exponent.
254 CRPLAW
Input of Special Creep Law

CRPLAW Input of Special Creep Law

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.


is the current equivalent (J) stress, normalized for uniaxial tension.
T is the current total temperature.
t is the current total time.
c is the current total equivalent creep strain, normalized for uniaxial tension.
p is the hydrostatic stress.
1 2 etc. are the state variables. Marc requires the user to program his creep law so that an
equivalent creep strain increment is defined.

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
CRPLAW 255
Input of Special Creep Law

Alternate Format
User subroutine MD_CRPLAW (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_CRPLAW ( EQCP,EQCPNC,S,CRPE,T,DT,DTDL,TIMINC,CPTIM,


* M,NN,KCUS,MATUS,NDI,NSHEAR,NSTATS,
* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
RDATA,CDATA)
REAL*8 CPTIM,CRPE,DT,DTDL,EQCP,EQCPNC,S,T,TIMINC,RDATA
INTEGER KCUS,M,MATUS,NDI,NN,NSHEAR,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION T(*),DT(*),DTDL(*),S(*),CRPE(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
EQCP Passed in as total equivalent creep strain.
12
c = --- c ij c ij
2
3

or, for ORNL Constitutive Theory, equivalent total creep strain,


12
c = --- c ij c ij
2
3

to be redefined as equivalent primary creep strain increment.


STR is the stress array.
CRPE is the incremental creep strain array. If you want to define a creep strain law
not following the normality condition, the creep strain increment can be
defined here.
T(1) is the current total equivalent (J2) stress.
T(2) is the current total hydrostatic stress.
T(3) is the current total swelling strain (from the VSWELL user subroutine).
DT(1) is the current total temperature.
DT(2),DT(3) are the additional state variables.
DTDL(1) is the incremental temperature.
256 CRPLAW
Input of Special Creep Law

DTDL(2),DTDL(3) are the additional incremental state variables.


TIMINC is the current time increment.
CPTIM is the current total time.
M is the current 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 id.
MATUS(2) is the internal material identifier.
NDI is the number of direct components of strain.
NSHEAR is the number of shear components of strain.
Required Output:
EQCPNC is the equivalent creep strain increment; to be defined by the user in this user
subroutine. For ORNL Constitutive Theory, passed in as equivalent total
primary creep strain. Otherwise undefined when passed in.
Must be redefined by the user as equivalent creep strain increment.

The simplest way to define a creep strain increment from a given rate law c = f etc is to multiply by
t, the time increment:
c = t f etc

As an example, suppose we wish to use the creep law (where A and B are constants):


c = A sinh ---

B

This would be programmed as follows:

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(1),DT(1),STR(1),CRPE(1),MATUS(2),KCUS(2)
C DEFINE A AND B
A = CONSTANT1
B = CONSTANT2
C OBTAIN SINH (T/B)
S = T(1)
IF (S.EQ.0.) GO TO 1
CRPLAW 257
Input of Special Creep Law

SINHT = .5*(EXP(S/B)-EXP(-S/B))
GO TO 2
1 SINHT = 0.
2 CONTINUE
C NON DEFINE EQCPNC
EQCPNC = TIMINC*A*SINHT
RETURN
END

The ORNL recommendations include the use of a strain hardening creep formulation. The following
example of the CRPLAW user subroutine shows a simple technique of numerical solution for a strain
hardening formulation based on equivalent total creep strain. The example is based on a Blackburn
formulation with a single primary term, but the technique is general and can be used for more complex
formulations. The numerical inversion of the total creep equation for equivalent time is achieved by
Newtons method:
t n + 1 = t n + t

c + f T t n
t = -----------------------------------------
f T t n

tn is the solution for equivalent time at the nth iteration.


t is the correction to t at the nth iteration, and the total creep equation is

c = f T t

with
f
f = -----
t

A tolerance of 10-6 has been placed on t


----- .
tn

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)
258 CRPLAW
Input of Special Creep Law

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
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

Examples of the use of the CRPLAW user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 3.12, 3.22, 3.24, and 11.8.25.
VSWELL 259
Input of Special Swelling Law

VSWELL Input of Special Swelling Law

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

Alternate Format
User subroutine MD_CRPLAW (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_VSWELL ( SWELL,SIG,TEMP,N,NN,KCUS,CPTIM,TIMINC,


* MATUS,DTEMP,NSTATS,MATNAMEC,ISUNIT,
* NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 CPTIM,DTEMP,SIG,SWELL,TEMP,TIMINC,RDATA
INTEGER KCUS,MATUS,N,NN,NSTATS
INTEGER NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION SIG(*),TEMP(*),DTEMP(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
SIG(1) is the uniaxial equivalent of J2 stress.
SIG(2) is the hydrostatic stress.
260 VSWELL
Input of Special Swelling Law

SIG(3) is the current total swelling strain (accumulated from this


user subroutine).

This is a uniaxial component; that is, 1--- DV


--------
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.
TIMINC is the current time increment.
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
DTEMP(1) is the temperature increment.
DTEMP(2), etc. are the increments of additional state variables.
Required Output:

SWELL is the user-defined increment of volumetric swelling = DV


-------- .

V

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.
An example of the use of the VSWELL user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 3.13.

Example
The following is a typical irradiation swelling formulation:

DV b b
-------- = c q t a exp b 0 + -----1 + -----2
V T 1 T 2

where:

a, b0, b1, b2, c are numerical constants


q is flux
VSWELL 261
Input of Special Swelling Law

t is time
T is temperature.
Differentiating with respect to time,

d- DV b b
---- -------- = acq a t a 1 exp b 0 + -----1 + -----2
dt V T 1 T 2

so that user subroutine VSWELL becomes:

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)
C=
Q=TEMP(2)
A=
B0=
B1=
B2=
SWELL=A*C*Q**A*CPTIM**(A-1.)
SWELL=SWELL*EXP(B0+B1/TEMP+B2/TEMP**2)
SWELL=SWELL*TIMINC
RETURN
END
This assumes flux increments q are entered into the second state variable using CREDE.
262 WKSLP
Work-hardening Slope Definition

WKSLP Work-hardening Slope Definition

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

Alternate Format
User subroutine MD_WKSLP (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_WKSLP ( M,NN,KCUS,MATUS,SLOPE,EBARP,EQRATE,STRYT,


* DT,IFIRST,MATNAMEC,ISUNIT,NID,NRD,NCD,
* IDATA,RDATA,CDATA)
REAL*8 DT,EBARP,EQRATE,SLOPE,STRYT,RDATA
INTEGER IFIRST,KCUS,M,MATUS,NN
INTEGER NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
WKSLP 263
Work-hardening Slope Definition

RETURN
END

where:

Required 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).
KCUS(2) is the internal layer number (always 1 for continuum element).
MATUS(1) is the user material id.
MATUS(2) is the internal material identifier.
EBARP is the current total equivalent plastic strain,
p

p = d p

2 p p
d = --- d ij d ij
3

ERAT p
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

= equivalent tensile stress = 3--- S ij S ij


2

1
S ij = ij --- ij kk
3

STRYT is the current yield stress .


d
--------- is not the slope of the tensile stress-strain curve, which is d
------- 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
264 WKSLP
Work-hardening Slope Definition

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.

Note: If the UPDATE or LARGE STRAIN parameter is used, the stresses are Cauchy (true) stress
and the strains are logarithmic strains.

Examples of the use of the WKSLP user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 3.5, 3.38, 8.2, and 8.18.

Example
Let us assume that yield surface can be expressed as:

y = A 1 + p n

then,
y
--------- = nA 1 + p n 1
p

the user subroutine would look like:

SUBROUTINE WKSLP ( M,NN,KCUS,MATUS,SLOPE,EBARP,ERAT,STRYT,DT,


+ IFIRST)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION MATUS(2),KCUS(2)
A=
N=
N1=n-1
SLOPE=n*A*(1.+EBARP)**N1
STRYT=A*(1.+EBARP)**N
RETURN
END
USPRNG 265
Input of Nonlinear Spring, Dashpot and Foundation Stiffness

USPRNG Input of Nonlinear Spring, Dashpot and Foundation Stiffness

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:

Required 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.
266 USPRNG
Input of Nonlinear Spring, Dashpot and Foundation Stiffness

For Elastic Foundation (Only Static Contribution):


U(1) For elastic foundation: U(1) = Un.
(positive in the direction specified by face identification given in the
FOUNDATION option).
U(2)-U(4) not used
For Springs/Dashpots (Static and/or Dynamic Contribution):
U(1) For mechanical springs: U 1 = U 2 U 1 .
For thermal links: U 1 = T 2 T 1
For electrical links: U 1 = V 2 V 1

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 = U2 U1 static predeformation
U(2) not used
U(3) U 3 = U2 U1 real part of harmonic deformation.
U(4) U 4 = U2 U1 imaginary part of harmonic deformation
TIME(1) is the total time (for dynamic or creep analysis).
TIME(2) is the frequency (for harmonic analysis with spring/dashpot).
N(1) is the element number (for elastic foundation).
is the first user-node number (for spring)
N(2) is the face number (for elastic foundation).
is the second user-node number (for spring)
NN is the integration point number (only for elastic foundation).
NSPRNG(1) is the spring number, the position of the spring in the input data list (only for springs).
NSPRNG(2) = 1 mechanical analysis or stress part of coupled analysis (only for springs)
= 2 heat transfer analysis or thermal part of coupled analysis (only for springs)
= 4 electrical analysis (only for springs)
NSPRING(3) is the spring ID given on the SPRINGS model definition option.
USPRNG 267
Input of Nonlinear Spring, Dashpot and Foundation Stiffness

Required Output:
RATK(1) is the ratio of the present value of spring stiffness to the data value given in the option
input; to be defined by the user.
RATK(2) is the ratio of the present value of the damping coefficient to the data value given in
the input; to be defined by the user. This applies to SPRINGS in dynamic analysis
only.
F(1) is the force to be defined by the user (only needed for mechanical analysis).

(a) For springs: F(1) = spring force.


(b) For elastic foundation: F(1) = pressure per unit area.
(c) For harmonics: F(1) = real part of harmonic force.
F(2) is the force to be defined by the user (only needed for mechanical analysis).
(a) For springs: F(2) = the damping force.
(b) For harmonics: F(2) = imaginary part of harmonic force.

If the user subroutine is called for an elastic foundation point, NSPRNG(1) and NSPRNG(2) are zero.
If the user subroutine is called for a spring, NN is zero.
Note that if the user prefers to give the absolute value of the spring constant rather than a ratio, the
corresponding value in the SPRINGS or FOUNDATION option should be set to 1. The same applies for
a damping constant.
Note that for fixed degrees of freedom springs, U(1), U(2), U(3), and U(4) are positive if the motion
of the degrees of freedom associated with node 2 is greater than the motion of the degrees of freedom
associated with node 1. So, to ensure 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.
268 UCRACK
Input of Ultimate Stress for Cracking Analysis

UCRACK Input of Ultimate Stress for Cracking Analysis

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

Alternate Format
User subroutine MD_UCRACK (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UCRACK ( SCRACK,ESOFT,ECRUSH,ECP,DT,DTDL,N,NN,KCUS,


* INC,NDI,NSHEAR,SHRFAC,MATUS,NSTATS,
* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,RDATA,
* CDATA)
REAL*8 DT,DTDL,ECP,ECRUSH,ESOFT,SCRACK,SHRFAC,RDATA
INTEGER INC,KCUS,N,NDI,NN,NSHEAR,NSTATS,MATUS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION ECP(*),DT(*),DTDL(*),KCUS(2),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
UCRACK 269
Input of Ultimate Stress for Cracking Analysis

where:

Required 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.
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.

Let us assume that the ultimate stress looks like

CR = A 1 e RT

The user subroutine would look like

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)
A=
R=
TT=DT(1)+DTDL(1)+473.0
SCRACK=A*(1.0D0-EXP(-R*TT))
RETURN
END
270 TENSOF
Input of Tension Softening Modulus for Cracking Analysis

TENSOF Input of Tension Softening Modulus for Cracking Analysis

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)

Alternate Format
User subroutine MD_TENSOF (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_TENSOF ( D,SP,GFP,DEP,ECP,SCRACK,SOSTR,


& ETSNEW,ESOFT,XH,SPECLN,JSOFT,
& M,NN,KCUS,MATUS,DT,DTDL,NSTATS,MATNAMEC,
& ISUNIT,NID,NRD,NCD,IDATA,RDATA,CDATA)
INTEGER JSOFT,M,NN,MATUS,KCUS,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
REAL*8 D, DEP,ECP,EF,ES,ESOFT,ETSNEW,GFP,RDATA
REAL*8 SCRACK,SF,SOSTR,SP,SPECLN,XH,DT,DTDL
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION KCUS(2),MATUS(2),DT(*),DTDL(*)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required 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.
TENSOF 271
Input of Tension Softening Modulus for Cracking Analysis

SOSTR is the current cracking stress based on previous softening.


ETSNEW is the current value of temperature dependent Youngs 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.

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.
272 USHRET
Input of Shear Retention Factor for Cracking Analysis

USHRET Input of Shear Retention Factor for Cracking Analysis

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

Alternate Format
User subroutine MD_USHRET (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_USHRET ( FACTOR,ECRA1,ECRA2,ECRA12,M,NN,KCUS,MATUS,


* DT,DTDL,NSTATS,MATNAMEC,ISUNIT,
* NID,NRD,NCD,IDATA,RDATA,CDATA)
INTEGER IPROPS,IRDIM,KCUS,M,MATUS,N,NDI,NN,NSHEAR
INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
REAL*8 ECRA1,ECRA12,ECRA2,FACTOR,DT,DTDL,RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION MATUS(2),KCUS(2),DT(*),DTDL(*)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required 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.
UVOID 273
Definition of the Initial Void Volume Fraction

UVOID Definition of the Initial Void Volume Fraction

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:

Required 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.
274 UVOIDN
Definition of the Void Nucleation Rate

UVOIDN Definition of the Void Nucleation Rate

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 = ------2- + 2q 1 f cosh ---------------- 1 + q 1 f = 0
2
m 2 m

where:

e is the effective stress.


m is the equivalent tensile stress.
f is the void ratio.

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

Alternate Format
User subroutine MD_UVOIDN (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UVOIDN ( AVALUE,BVALUE,M,NN,KCUS,MATUS,EPL,EPLAS,


* SBEG,NDI,NSHEAR,DT,DTDL,NSTATS,MATNAMEC,
* ISUNIT,NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 AVALUE,BVALUE,DT,DTDL,EPL,EPLAS,SBEG,RDATA
INTEGER KCUS,M,MATUS,NDI,NN,NSHEAR
INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
CHARACTER*16 CDATA
UVOIDN 275
Definition of the Void Nucleation Rate

CHARACTER*12 MATNAMEC
DIMENSION M(2),DT(*),DTDL(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required 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.
EPL is the plastic strain components.
EPLAS is the equivalent plastic strain.
S is the stress array.
NDI is the number of direct components.
NSHEAR is the number of shear components.
DT is the array of state variables, temperature first.
DTDL is the array of increment of state variables.
Required Output:
A is the multiplier as shown below.
B is the multiplier as shown below.

In this user subroutine, the following type of stress controlled nucleation rate can be specified:

kk
f = A + B --------
3


where is the von Mises equivalent stress rate, and kk is the hydrostatic stress rate.
276 UVOIDRT
Definition of the Initial Void Ratio or Initial Porosity

UVOIDRT Definition of the Initial Void Ratio or Initial Porosity

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

Required 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.
CPTIM time at the beginning of the increment.
TIMINC time increment.
IFLAG 1 or 2.
Required Output:
VALUE if iflag = 1 define void ratio.
if iflag = 2 define porosity.
UGRAIN 277
Calculation of Grain Size

UGRAIN Calculation of Grain Size

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

Alternate Format
User subroutine MD_UGRAIN (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UGRAIN ( M,N,NN,KCUS,MATUS,EPLAS,ERATE,DT,DTDL,


* IGNMOD,GRNDAT,GRNSIZ,TIME,DELTIME,NSTATS,
* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,RDATA,
CDATA)
REAL*8 DELTIME,DT,DTDL,EPLAS,ERATE,GRNDAT,GRNSIZ
INTEGER IGNMOD,KCUS,M,MATUS,N,NN
INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
REAL*8 TIME, RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION DT(*),DTDL(*),GRNDAT(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
278 UGRAIN
Calculation of Grain Size

where:

Required 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; temperature is the first state
variable
DTDL is the incremental state variables
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

An example of the use of the UGRAIN user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 7.37.
UDAMAG 279
Prediction of Material Damage

UDAMAG Prediction of Material Damage

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

If model 10 is used, then:


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

Alternate Format
User subroutine MD_UDAMAG (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UDAMAG ( M,N,NN,KCUS,MATUS,NDI,NSHEAR,NGEN1,INC,


* EPLAS,EPLASN1,ERATE,DT,DTDL,S,SEQ,SN1,
* SEQN1,EPL,EPLN1,EELAS,EELASN1,AUXDAMN,
AUXDAMN1,NAUXD,DAMDAT,DAMFACN,DAMFACN1,
* TIME,DELTIME,NSTATS,MATNAMEC,ISUNIT,
* NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 DAMDAT,DAMFACN,DAMFACN1,DELTIME,DT,DTDL,EPLAS,EPLASN1
REAL*8 ERATE,EPL,EPLN1,EELAS,EELASN1,AUXDAMN,AUXDAMN1
REAL*8 S,SN1,SEQ,SEQN1,TIME,RDATA
280 UDAMAG
Prediction of Material Damage

INTEGER KCUS,M,MATUS,N,NN,NDI,NSHEAR,NGEN1,INC,NAUXD
INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
DIMENSION DT(*),DTDL(*),DAMDAT(*),MATUS(2),KCUS(2),
CHARACTER*16 CDATA
CHARACTER*12 MATNAME
RETURN
END

where:

Required Input:
M is the user element number.
N 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.
EPLAS is the equivalent plastic strain.
ERATE is the equivalent plastic strain rate.
DT is the state variables at beginning of increment; temperature is the first state
variable.
DTDL is the state variables increment.
DAMDAT is the material data, DAMDAT (1) is the initial damage factor.
TIME is the time at the beginning of increment.
DELTIME is the time increment.
Required Output:
DAMFAC is the current damage factor.
UPOWDR 281
Definition of Material Data for Powder Metallurgy Model

UPOWDR Definition of Material Data for Powder Metallurgy Model

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 ij S ij + -----2-
1 3
y
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.

The equivalent inelastic strain rate, , is defined as:

= --- -----
1 F
y

where:

is the viscosity.

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
282 UPOWDR
Definition of Material Data for Powder Metallurgy Model

Alternate Format
User subroutine MD_UPOWDR (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UPOWDR ( E,G,POISS,GAMMA,BETA,VISC,SIGY,AMB,


$ COMPF,REDENS,DT,DTDL,DET,IHEAT,IHCPS,M,NN,
$ MATUS,MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
$ RDATA,CDATA)
REAL*8 AMB,BETA,COMPF,DET,DT,DTDL,E,G,GAMMA
INTEGER IHCPS,IHEAT,MATUS,M,NN
INTEGER NID,NRD,NCD,IDATA,ISUNIT
REAL*8 POISS,POWDAT,REDENS,SIGY,VISC,RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
E is the Youngs moduli.
G is the shear moduli.
POISS is the Poissons 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
UPOWDR 283
Definition of Material Data for Powder Metallurgy Model

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, and COMPF upon entrance are the values calculated
by Marc based upon user input.
284 UPERM
Definition of Permeability

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

Alternate Format
User subroutine MD_UPERM (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UPERM ( PERMEA,M,NN,DT,PORP,POROS,X,K,STRESS,NGENS,


* MATUS,MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
INTEGER K,M,NGENS,NN,ISUNIT,MATUS,NSTATS
REAL*8 DT, PERMEA,POROS,PORP,STRESS,X,RDATA
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION PERMEA(K,K),X(*),STRESS(NGENS),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*),DT(*)
RETURN
END
where:

Required Input:
M is the element number.
NN is the integration point number.
UPERM 285
Definition of Permeability

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.
286 UMOONY
Mooney-Rivlin Material

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

Alternate Format
User subroutine MD_UMOONY (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UMOONY ( C10,C01,C11,C20,C30,T,N,NN,MATUS,


* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,RDATA,
* CDATA)
REAL*8 C01,C10,C11,C20,C30,T,RDATA
INTEGER MATUS,N,NN,ISUNIT,NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION N(2),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
T is the temperature.
N(1) is your element number.
UMOONY 287
Mooney-Rivlin Material

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.
288 UENERG
Strain Energy Function

UENERG Strain Energy Function

Description
This user subroutine allows the user to define his own elastic strain deviatoric 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.
The user should enter the bulk modulus through the volumetric strain energy function.

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

Alternate Format
User subroutine MD_UENERG (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UENERG ( W,W1,W2,W11,W12,W22,WI1,WI2,


* C1,C2,C11,C20,C30,N,NN,MATUS,MATNAMEC,
* ISUNIT,NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 C1,C11, C2, C20, C30
INTEGER N,NN,MATUS,ISUNIT,NID,NRD,NCD,IDATA
REAL*8 W, W1,W11,W12,W2,W22,WI1,WI2,RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION N(2),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
UENERG 289
Strain Energy Function

where:

Required 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.
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 .

An example of the use of the UENERG user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 8.33.
290 UOGDEN
Definition of Ogden Material Parameters

UOGDEN Definition of Ogden Material Parameters

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 = ----
- i + 2 i + 3 i 3 + 4.5K J 1 / 3 1 2
i 1
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

Alternate Format
User subroutine MD_UOGDEN (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UOGDEN ( MATUS,NSER,MDUM,NN,KCUS,INC,CPTIM,TIMINC,


1 XMTDAT,BULK,DT,DTDL,MATNAMEC,ISUNIT,
2 NID,NRD,NCD,IDATA,RDATA,CDATA)
INTEGER INC,KCUS,MATUS,MDUM,NN,NSER,ISUNIT
REAL*8 TIMINC,CPTIM,XMTDAT,BULK,DT,DTDL,RDATA
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION XMTDAT(2,NSER),DT(*),DTDL(*),MDUM(2),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
UOGDEN 291
Definition of Ogden Material Parameters

RETURN
END

where:

Required Input:
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
NSER is the number of terms in the series.
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.
CPTIM is the time at the beginning of the increment.
TIMINC is the time step.
DT is the array of state variables, temperature first.
DTDT is the array of increments of state variables.
Required Output:
XMTDAT(1,i) is the value of i .
XMTDAT(2,i) is the value of i .
BULK is the bulk modulus.
292 UELDAM
Definition of Damage Parameters in Ogden Model

UELDAM Definition of Damage Parameters in Ogden Model

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

Alternate Format
User subroutine MD_UELDAM (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UELDAM ( M,N,NN,KCUS,INC,LOVL,MATUS,TIMINC,CPTIM,


2 TOTEN,DEVEN,TOTEND,TOTENV,SURFC,SURFD,DT,
3 DTDL,DAMD,DDAMD,NSTATS,MATNAMEC,ISUNIT,
4 NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8CPTIM,DAMD,DDAMD,DEVEN,DT,DTDL,RDATA
INTEGER INC,KCUS,LOVL,M,MATUS,N,NN
INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
REAL*8SURFC,SURFD,TIMINC,TOTEN,TOTEND,TOTENV
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION DT(*),DTDL(*),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
UELDAM 293
Definition of Damage Parameters in Ogden Model

where:

Required 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.
MATUS(2) is the internal material identifier.
TIMINC is the time increment.
CPTIM is the time at the beginning of the increment.
TOTEN is the total instantaneous strain energy at the end of the current step excluding damage.
DEVEN is the deviatoric part of the instantaneous strain energy at the end of the current step
excluding damage.
TOTEND is the stored deviatoric energy at previous step (including damage).
TOTENV is the stored volumetric energy at previous step (including damage).
SURFC is the current radius of continuous damage surface.
SURFD is the current radius of discontinuous damage surface.
DT is the temperature.
DTDL is the incremental temperature.
Required Output:
DAMD is the value of Kachanov deviatoric damage parameter.
DDAMD is the derivative of the damage parameter with respect to the maximum total
strain energy.
294 HYPELA2
User-defined Material Behavior

HYPELA2 User-defined Material Behavior

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,NDI,


2 NSHEAR,DISP,DISPT,COORD,FFN,FROTN,STRECHN,
3 EIGVN,FFN1,FROTN1,STRECHN1,EIGVN1,NCRD,
4 ITEL,NDEG,NDM,NNODE,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

Alternate Format
User subroutine MD_HYPELA2 (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_HYPELA2 ( D,G,E,DE,S,T,DT,NGENS,N,NN,KCUS,MATUS,


2 NDI,NSHEAR,DISP,DISPT,COORD,FFN,FROTN,
3 STRECHN,EIGVN,FFN1,FROTN1,STRECHN1,
4 EIGVN1,NCRD,ITEL,NDEG,NDM,NNODE,JTYPE,
5 LCLASS,IFR,IFU,NSTATS,MATNAMEC,ISUNIT,
6 NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 FROTN,FROTN1,G,S,STRECHN,STRECHN1,T,RDATA
HYPELA2 295
User-defined Material Behavior

INTEGER IFR,IFU,ITEL,JTYPE,KCUS,LCLASS,MATUS,N,NCRD,NDEG
INTEGER NDI,NDM,NGENS,NN,NNODE,NSHEAR,NSTATS
INTEGER NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION E(*),DE(*),T(*),DT(*),G(*),D(NGENS,*),S(*)
DIMENSION N(2),COORD(NCRD,*),DISP(NDEG,*),MATUS(2),
* DISPT(NDEG,*),FFN(ITEL,*),FROTN(ITEL,*),
* STRECHN(ITEL),EIGVN(ITEL,*),FFN1(ITEL,*),
* FROTN1(ITEL,*),STRECHN1(ITEL),EIGVN1(ITEL,*),
* KCUS(2),LCLASS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required Input:
E is the total elastic mechanical strain.
DE is the increment of mechanical strain.
T is the state variables (comes in at t = n; must be updated to have state variables
at t = n +1); temperature is the first state variable.
DT is the increment of state variables.
NGENS is the size of the stress-strain law.
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.
NDI is the number of direct components.
NSHEAR is the number of shear components.
DISP is the incremental displacements.
DISPT is the displacements at t = n (at assembly lovl = 4) and the displacements at
t = n +1 (at stress recovery lovl = 6).
COORD is the coordinates.
NCRD is the number of coordinates.
296 HYPELA2
User-defined Material Behavior

NDEG is the number of degrees of freedom.


ITEL is the dimension of F and R; 2 for plane-stress and 3 for the rest of the cases.
NNODE is the number of nodes per element.
JTYPE is the element type.
LCLASS(1) is the element class.
LCLASS(2) is 0 for displacement element.
is 1 for lower-order Herrmann element.
is 2 for higher-order Herrmann element.
IFR is set to 1 if R has been calculated.
IFU is set to 1 if STRECH has been calculated.
At t = n (or the beginning of the increment):
FFN is the deformation gradient.
FROTN is the rotation tensor.
STRECHN is the square of principal stretch ratios, (i).
EIGVN (I,J) is the I principal direction components for J eigenvalues.
At t = n +1 (or the current time step):
FFN1 is the deformation gradient.
FROTN1 is the rotation tensor.
STRECHN1 is the square of principal stretch ratios, lambda (i).
EIGVN1(I,J) is the I principal direction components for J eigenvalues.
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
HYPELA2 297
User-defined Material Behavior

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:
includearray2
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

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.

Stress and Strain Components Order of Storage


The number of strain and stress components is composed of number of direct components (NDI) and
number of shear components (NSHEAR). NDI and NSHEAR are defined in Table 3-2 for each element.
For example, 3-D solid elements: ndi=3 and nshear=3, thick shells: ndi=2 and nshear=3, thin shells
and membranes: ndi=2 and nshear=1, plane strain and axisymmetric elements: ndi=3 and nshear=1,
beams: ndi=1 and shear=0 to 2. The stress and strain are first stored direct components followed by
shear components. For full components, (ndi=3, nshear=3), S(11), S(22), S(33), S(12), S(23),
S(31) is the right order to store. For Herrmann formulation of elements, the last strain component is the
volumetric strain and the last stress component is the mean pressure constant. Thus, in the Herrmann
formulation, NGENS = NDI + NSHEAR + 1.
298 HYPELA2
User-defined Material Behavior

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 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 ij = -----------------
j

The rate of convergence or a nonlinear problem depends critically on the user supplied tangent stiffness
D . Before using this user subroutine for large problems, it is recommended that the user check the user
subroutine with one-element problems under displacement and load control boundary conditions. The
displacement controlled boundary condition problem checks the accuracy of the stress update procedure
while the load controlled problem checks the accuracy of the tangent stiffness. A fully consistent exact
tangent stiffness provides quadratic convergence of the displacement or residual norm.

Thermal Stress Problems


For thermal stress problems, the user needs to calculate and return the change in stress G i due to
temperature dependent material properties.
n + 1
Gi = D D n ij j

where n and n + 1 are the temperatures at time t = n and t = n + 1, respectively and j is strain
increment which is passed to HYPELA2.

Deformation Gradient (F), Rotation Tensor (R) and Stretch Tensor (U)
HYP For continuum (3-D solid, plane strain, axisymmetric and 2-D plane stress) elements and membranes, the
deformation gradient and rotation tensor are passed. For those elements, principal stretch ratio and
ELA2 eigenvectors are also passed to HYPELA2. Based on the information, the user can calculate stretch tensor
(U) as follows:
CALL SCLA (UN1, 0.d0, ITEL, ITEL, 1)
DO I=1,3
DO J=1,3
DO K=1,3
UN1 (I,J) = UN1 (I,J)+DSQRT
(STRETCH1(K)*EIGVN1(I,K)*EIGVN1(J,K))
HYPELA2 299
User-defined Material Behavior

ENDDO
ENDDO
ENDDO
In this case, STRECHN1 stores the value of the squares of the stretches, and EIGVN1(I,J) stores the Ith
eigenvector component corresponding to the Jth 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:
includearray2
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
An example of the use of the HYPELA2 user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 7.29.
300 UFINITE
Finite Deformation Isotropic Material Models

UFINITE Finite Deformation Isotropic Material Models

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

Alternate Format
User subroutine MD_UFINITE (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UFINITE ( STRECH,EIGV,DETFE,DETFT,DEFGR,


* DT,DTDL,STRESS,TANGENT,M,NN,GF,D,MATUS,
* NSTATS,MATNAMEC,ISUNIT,
* NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 D,DEFGR,DETFE,DETFT,DT,DTDL,EIGV,GF,RDATA
INTEGER M,NN,MATUS,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
REAL*8 STRECH,STRESS,TANGENT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION STRECH(3),STRESS(3),TANGENT(3,3),EIGV(3,3),DEFGR(3,3),
2 DT(*),DTDL(*),GF(*),D(*),MATUS(2)
RETURN
END
UFINITE 301
Finite Deformation Isotropic Material Models

where

Required 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.
M is the user element number.
D is the array for material properties defined as:
D(1) = bulk modulus at (DT + DTDL)
D(2) = shear modulus at (DT +DTDL)
D(3) = initial yield stress (at zero effective plastic strain)
D(4) = kinematic hardening modulus at (DT + DTDL)
D(5) = portion of isotropic hardening
D(6) = portion of kinematic hardening
D(7) = coefficient of linear thermal expansion
D(8) = bulk modulus at DT
D(9) = shear modulus at DT
NN is the integration point number.
Required Output:
STRESS is the principal deviatoric Kirchhoff stress at the end of the increment.
TANGENT is the elasto-plastic material tangent in the principal space; relating the total deviatoric
Kirchhoff stress in principal space to the total principal deviatoric logarithmic strains.
GF is the stress change due to temperature dependent properties.

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.
302 UFINITE
Finite Deformation Isotropic Material Models

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.
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.
UELASTOMER 303
Generalized Strain Energy Function

UELASTOMER Generalized Strain Energy Function

Description
This user subroutine allows definition of the users 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

2. iflag = 2, Principal-stretch-based model


W = W 1 2 3

3. iflag = 3, Invariant-based model with volumetric and deviatoric split


W = W dev I 1 I 2 + U J

4. iflag = 4, Principal-stretch-based model with volumetric and deviatoric split


W = W dev 1 2 3 + U J

I 1 , I 2 , and I 3 ( 1 , 2 , and 3 ) are strain invariants (principal stretches), and I 1 and I 2 ( 1 , 2 , and 3 )
are their deviatoric parts, defined by I 1 = J 2 / 3 I 1 and I 2 = J 4 / 3 I 2 i = J 1 / 3 i , i = 1 2 3 ; J is the
determinant of the deformation gradient.
Marc uses conventional displacement elements for user-defined compressible foam models (iflag from
1 to 4). No volumetric constraints are taken into account. For incompressible or nearly incompressible
rubber-like materials, rubber model with iflag equal to 5 or 6 should be used. When using
FEATURE,3401, iflag=7 also needs to be used to define the volumetric strain energy.

Rubber Models
Because rubber-like materials are nearly incompressible, it is numerically more efficient to split the
energy function into a volumetric part and a deviatoric part. A mixed formulation, which treats
hydrostatic pressure as an independent variable, is used in Marc to overcome the numerical difficulties
coming from the volumetric constraints. A linear relationship between pressure and volumetric strain is
a presupposition in the mixed formulation. Therefore, requiring only the deviatoric part of energy
function needs to be defined in the user subroutine for rubber-like materials.
However, in many cases, the pressure-volumetric strain relationship is nonlinear. For such cases, a new
three-field formulation with pressure, volume ratio, and displacement is available. Currently, the
304 UELASTOMER
Generalized Strain Energy Function

FEATURE,3402 parameter must be used in order to activate this formulation. Also, in this case, both
deviatoric and volumetric strain energies must be defined.
Invariant-based rubber models can be defined using the UELASTOMER user subroutine if the MOONEY,
ARRUDBOYCE, or GENT model definition option is used.

5. iflag=5, Invariant-based model, deviatoric part only


W = W dev I 1 I 2

Principal-stretch-based rubber models can be defined using the UELASTOMER user subroutine if a 3 is
entered in the 3rd field of the 3rd data block of OGDEN model definition option.
6. iflag=6, Principal-stretch-based model, deviatoric part only
W = W dev 1 2 3

Note:

Note: If iflag=5 or iflag=6, only the deviatoric part of the energy function is defined via the
UELASTOMER user subroutine. 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.
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.

7. iflag=7, Volumetric part of the strain energy (applicable to both, invarinent as well as principal
stretch-based, models)
W = UJ

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 UELASTOMER ( 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
UELASTOMER 305
Generalized Strain Energy Function

C
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION M(2),BE(6),DT(*),DTDL(*),IARRAY(*),ARRAY(*)
DIMENSION MATUS(2)
C
RETURN
END

Alternate Format
User subroutine MD_UELASTOMER (activated through the MATUDS option) is written with the
following headers:

SUBROUTINE MD_UELASTOMER (IFLAG,M,NN,MATUS,BE,X1,X2,X3,DETFT,


$ ENERD,W1,W2,W3,W11,W22,W33,W12,W23,
$ W31,DUDJ,DU2DJ,DT,DTDL,NSTATS,
$ MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
$ RDATA,CDATA)
REAL*8 BE,DETFT,DT,DTDL,DU2DJ,DUDJ,ENERD,RDATA
INTEGER IFLAG,M,MATUS,NN
INTEGER NID,NRD,NCD,IDATA,NSTATS,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
REAL*8 W1,W11,W12,W2,W22,W23,W3,W31,W33,X1,X2,X3
DIMENSION M(2),BE(6),DT(*),DTDL(*),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required 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:
306 UELASTOMER
Generalized Strain Energy Function

=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
DTDL incremental state variables
IARRAY not used
ARRAY not used
Required Output:
ENERD energy density at t n + 1

Foam Rubber
iflag = 1 iflag = 2 iflag = 3 iflag = 4 iflag = 5 iflag = 6 iflag = 7
W W W W W W N/A
W1 -------- --------- -------- --------- -------- ---------
I 1 1 I 1 1 I 1 1

W W W W W W N/A
W2 -------- --------- -------- --------- -------- ---------
I 2 2 I 2 2 I 2 2
UELASTOMER 307
Generalized Strain Energy Function

Foam Rubber
iflag = 1 iflag = 2 iflag = 3 iflag = 4 iflag = 5 iflag = 6 iflag = 7
W
-------- W-
--------
N/A W-
--------
N/A W-
--------
N/A
W3 I 3 3 3 3

2 W 2 W 2 W 2 W 2 W 2 W N/A
W11 ----------- ----------- ----------- ----------- ----------- -----------
2 2 2 2 2 2
I1 1 I 1 1 I 1 1

2 W 2 W 2 W 2 W 2 W 2 W N/A
W22 ----------- ----------- ----------- ----------- ----------- -----------
2 2 2 2 2 2
I2 2 I 2 2 I 2 2

2 W 2 W N/A 2 W N/A 2 W N/A


W33 ----------- ----------- ----------- -----------
2 2 2 2
I3 3 3 3

2 W 2 W 2 W 2 W 2 W 2 W N/A
W12 ---------------- ------------------- ---------------- ------------------- ---------------- -------------------
I 1 I 2 1 2 I 1 I 2 1 2 I 1 I 2 1 2

2 W 2 W N/A 2 W N/A 2 W N/A


W23 ---------------- ------------------- ------------------- -------------------
I 2 I 3 2 3 2 3 2 3

2 W 2 W N/A 2 W N/A 2 W N/A


W31 ---------------- ------------------- ------------------- -------------------
I 3 I 1 3 1 3 1 3 1

N/A N/A U U N/A N/A W


dudj ------- ------- --------
J J J

N/A N/A ---------


2U ---------
2U N/A N/A ----------
2W
du2dj - - -
J 2 J2 J 2

An example of the use of the UELASTOMER user subroutine can be found in Marc Volume E:
Demonstration Problems, problems 7.23.
308 GENSTR
Generalized Stress Strain Law (Shells & Beams)

GENSTR Generalized Stress Strain Law (Shells & Beams)

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

Alternate Format
User subroutine MD_GENSTR (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_GENSTR ( D,DC,FCRP,ETOTA,DE,HT,S,T,DT,ER,EC,


* SR,SC,NGENS,M,N,NN,MATUS,IHRESP,ICRESP,
* NSTATS,MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 D,DC,DE,DT,EC,ER,ETOTA,FCRP,HT
REAL*8 S,SC,SR,T,RDATA
INTEGER ICRESP,IHRESP,M,MATUS,N,NGENS,NN,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION D(NGENS,NGENS),DC(NGENS,NGENS),FCRP(*),ETOTA(*),
GENSTR 309
Generalized Stress Strain Law (Shells & Beams)

* DE(*),S(*),T(*),DT(*),ER(*),EC(*),SR(*),SC(*),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required 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 is the first state variable.
DT are the increments of state variables.
ER is the real strain array during harmonic sub-increment.
EC is the imaginary strain array during harmonic sub-increment.
NGENS is the number of generalized stress.
M is the internal element number.
N 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.
IHRESP is the flag to indicate harmonic sub-increment.
IHRESP=0 during a transient analysis.
IHRESP=1 during a harmonic sub-increment.
ICRESP indicates complex harmonic sub-increment.
Required Output:
D is the generalized real stress-strain law to be defined here.
DC is the generalized imaginary stress-strain law.
FCRP is the change in stress due to temperature effects to be defined here.
SR is the real harmonic stress.
SC is the imaginary harmonic stress.

During transient increments, the user defines D, S, and FCRP.


During harmonic subincrements the user defines D, DC, SR, and SC.
For thick shell elements (types 22, 75, and 140):
310 GENSTR
Generalized Stress Strain Law (Shells & Beams)

Components Description
1, 2, and 3 are membrane strains
4 and 5 are transverse shear strains
6, 7, and 8 are curvatures (correspond to 1, 2, and 3)
9 and 10 are physically undefined (correspond to 4 and 5)
11 and 12 are inplane rotation terms related to drilling degrees of freedom (only element 22 has
component 12)

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)

An example of the use of the GENSTR user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 2.81.
UBEAM 311
Input for Nonlinear Beam

UBEAM Input for Nonlinear Beam

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)
DIMENSION D(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:

Required 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.
GS is passed in as the total generalized stress at the beginning of the increment, and must
be redefined as the total stress generalized at the end of the increment.
GSI are the increments of generalized harmonic stress, if complex harmonic analysis.
TEMP are the total state variables at the beginning of the increment; temperature is the first
state variable.
DTEMP are the increments of state variables.
NGENS is the number of generalized stress.
312 UBEAM
Input for Nonlinear Beam

N is the element number.


NN is the integration point number.
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
Required Output:
D is the matrix of cross-section stiffness properties (to be defined in this user subroutine).
FCRP is the generalized stress increment caused by change in state variables (to be defined in
this user subroutine).
DF are the increments of generalized stress (to be defined in this user subroutine).
DFI are the increments of imaginary generalized stress, if complex harmonic analysis.

The components of generalized strain and stress for element 52 are:

ETOT(1) Axial strain


ETOT(2) Curvature change in first bending direction
ETOT(3) Curvature change in second bending direction
ETOT(4) Twist of the beam
GS(1) Axial force
GS(2) Bending moment in first bending direction
GS(3) Bending moment in second bending direction
GS(4) Twisting moment

The components of generalized strain and stress for element 98 are:

ETOT(1) Axial strain


ETOT(2) Local xy shear
ETOT(3) Local yz shear
ETOT(4) Curvature change in first bending direction
ETOT(5) Curvature change in second bending direction
ETOT(6) Twist of the beam
GS(1) Axial force
GS(2) Local xy shear
GS(3) Local yz shear
GS(4) Bending moment in the first bending direction
GS(5) Bending moment in the second bending direction
GS(6) Twisting moment

An example of the use of the UBEAM user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 8.10.
UCOHESIVE 313
Interface Material Model

UCOHESIVE Interface Material Model

Description
The UCOHESIVE user subroutine is provided to allow the user to enter a material model used by the
interface elements 186 to 192. The call to this user subroutine is triggered by the COHESIVE model
definition option, where the cohesive material type has to be set to -1. Material data entered on the
COHESIVE option is available within this user subroutine.

Unlike conventional stress elements, the material behavior of the interface elements is defined in terms
of stresses and relative displacements instead of stresses and strains. The element stresses are the so-
called tractions and consist of one normal and one shear stress component for 2-D elements (186, 187,
190, and 191) and one normal and two shear components for 3-D elements (188, 189, 192, and 193). The
stress and relative displacement components are given in the local element coordinate system (see Marc
Volume B: Element Library).

In order to cope with multi-axial stress states, the equivalent relative opening displacement can be used.
When UCOHESIVE is used, this variable can be set by the user to, for example, keep track of the loading
history at the element integration point. The use of this variable is optional. For postprocessing purposes,
one can define a damage parameter (corresponding to post code 80).

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

Alternate Format
User subroutine MD_UCOHESIVE (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UCOHESIVE ( D,ETOT,E,S,SEND,NGENS,RELOP,DT,DTDL,


$ NCYCLE,MDUM,NN,KCUS,MATUS,COHPROP,
$ NSTATS,MATNAMEC,ISUNIT,NID,NRD,NCD,
$ IDATA,RDATA,CDATA)
INTEGER KCUS,MATUS,MDUM,NCYCLE,NGENS,NN,NSTATS,ISUNIT
INTEGER NID,NRD,NCD,IDATA
314 UCOHESIVE
Interface Material Model

CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION D(NGENS,NGENS),ETOT(*),E(*),S(*),SEND(*),RELOP(2),
$ DT(*),DTDL(*),MDUM(2),KCUS(2),MATUS(2),COHPROP(*)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

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; temperature is the first state variable
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
UCOHESIVET 315
Thermal Interface Material Model

UCOHESIVET Thermal Interface Material Model

Description
The UCOHESIVET user subroutine is provided to allow the user to enter a material model used by the
thermal interface elements 220 to 227. The call to this user subroutine is triggered by the COHESIVE
THERMAL model definition option, when the cohesive material type is set to -1. Material data entered
on the COHESIVE THERMAL option is available within this user subroutine.
Unlike conventional thermal elements, the material behavior of the thermal interface elements is defined
in terms of flux and temperature difference instead of flux and temperature gradient. The flux and
temperature difference components are given in the local element coordinate system (see Marc Volume
B: Element Library).

This user subroutine allows the user to define an isotropic conductance matrix at each integration point
in each thermal interface element.

Format
User subroutine UCOHESIVET is written with the following headers:
subroutine ucohesivet ( cond,coniso,nel,nn,kcus,
* temp,dtemp,xyzg,ngens,ncrd,
* matus,matnamec,isunit,time,dtime,
* joulht,nstats)
real*8 cond, coniso, temp, dtemp, xyzg, time, dtime
integer nel, nn, kcus, ngens, ncrd, matus, isunit, joulht
integer nstats
character*12 matnamec
dimension cond(ngens),nel(2),kcus(2),
* xyzg(ncrd),matus(2)user coding
RETURN
END

where

Required Input:
coniso is the isotropic conductivity value from material property input
nel is the element number
(1) = external/user
(2) = internal
nn is the integration point number
316 UCOHESIVET
Thermal Interface Material Model

kcus is the layer number


(1) = external/user
(2) = internal
temp Temperature
dtemp Incremental temperature
xyzg Array of integration point coordinates
ngens Number of flux and temperature gradient components
ncrd Number of coordinate axis directions
matus Material identification number
(1)- external/user
(2)- internal
matnamec Material name
isunit System units
0 = not entered
1 = SI-m unit (N,m,S,C)
2 = SI-mm unit (N,mm,S,C)
3 = US(British) unit (lbf,inch,S,F)
time Time at beginning of current increment
dtime Time step for current increment
joulht Control flag to indicate if in joule phase of heat transfer analysis
0 = heat transfer phase (return thermal conductivity)
1 = joule phase (return electrical conductivity)
nstats Number of state variables
Required Output:
cond is the conductance matrix, H:
Q = HdT

This isotropic conductance scalar value is to be re-defined as necessary by the user.


If the subroutine remains empty of user coding, the conductance matrix remains
isotropic according to the properties given in the COHESIVE thermal option.
UPHI 317
Input of PHI Function in Harmonic Analysis

UPHI Input of PHI Function in Harmonic Analysis

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

Alternate Format
User subroutine MD_UPHI (activated through the MATUDS option) is written with the following headers:

SUBROUTINE MD_UPHI ( ELCG,FREQ,WI1,WI2,C10,C01,C11,C20,C30,NDI,


* NSHEAR,FI0,FI1,FI2,FI11,FI12,FI21,FI22,
* IFLAG,DERIVS,MDUM,NN,KCUS,
* MATUS,MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 C01,C10,C11,C20,C30,DERIVS,ELCG,FI0,FI1,FI11,FI12
REAL*8 FI2,FI21,FI22,FREQ,WI1,WI2,RDATA
INTEGER IFLAG,NDI,NSHEAR,MATUS,MDUM,NN,KCUS
INTEGER NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION MATUS(2),MDUM(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
318 UPHI
Input of PHI Function in Harmonic Analysis

where:

Required 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,FI12, are the seven PHI functions which should be defined in this user
FI21,FI22 subroutine by the user.

where:

W is the strain energy density.


W1 is W I 1 .

W2 is W I 2 .

2 2
W11 is W I 1 .

W12 is 2 W I 1 I 2 .

2
W21 is W I 2 I 1 .

2 2
W22 is W I 2 .

An example of the use of the UPHI user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.14, 2.37, 2.38, 2.39, and 8.6.
UCOMPL 319
Input of Viscous Stress Strain Relationship

UCOMPL Input of Viscous Stress Strain Relationship

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,
3 NDEG,NCRD,NDI,NSHEAR)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION C(NGENS,NGENS),B(NGENS,NGENS),ETOT(1),
2 COORD(NCRD,1),EELAS(1),EPLAS(1),T(1),
3 XINTP(NCRD),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

Alternate Format
User subroutine MD_UCOMPL (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UCOMPL ( C,B,ETOT,EELAS,EPLAS,S,T,XINTP,COORD,


2 DISPT,FREQ,N,NN,KCUS,NGENS,INC,INCSUB,
3 NDEG,NCRD,NDI,NSHEAR,MATUS,NSTATS,NNODE,
4 MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
5 RDATA,CDATA)
REAL*8 B,C,COORD,DISPT,EELAS,EPLAS,ETOT,FREQ
INTEGER INC,INCSUB,KCUS,N,NCRD,NDEG,NDI,NGENS,NN,NSHEAR
INTEGER MATUS,NSTATS,NNODE
320 UCOMPL
Input of Viscous Stress Strain Relationship

REAL*8 S,T,XINTP,RDATA
INTEGER NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION C(NGENS,NGENS),B(NGENS,NGENS),ETOT(*),N(2),KCUS(2),
2 EELAS(*),EPLAS(*),T(*),XINTP(NCRD),COORD(NCRD,*),
DISPT(NDEG,*)
DIMENSION IDATA(*),RDATA(*),CDATA(*),MATUS(2)
RETURN
END

where:

Required Input:
ETOT are the total strains.
EELAS are the total elastic strains.
EPLAS are the plastic strains.
S are the stresses.
T are the total state variables (temperature first).
XINTP are the coordinates of this integration point.
COORD are the coordinates of the nodes of this element.
DISPT are the total displacements of the nodes of this element.
FREQ is the harmonic frequency in radians/time unit.
N(1) is the users 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).
NGENS is the number of stress-strain components; for Herrmann elements, this includes the
Herrmann variable.
INC is the increment number.
INCSUB is the subincrement number.
NDEG is the number of degrees of freedom per node.
NCRD is the number of coordinate directions per node.
NDI is the number of direct component of stress.
NSHEAR is the number of shear components of stress.
UCOMPL 321
Input of Viscous Stress Strain Relationship

Required Output:
C is the imaginary damping part of the stress-strain law.
B is the real elastic part of the stress-strain law.
322 GAPU
Input of Gap Direction And Closure Distance

GAPU Input of Gap Direction And Closure Distance

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:

Required 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.
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.
GAPU 323
Input of Gap Direction And Closure Distance

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 2-D problems, DIR, X1, and X4 have two components; otherwise, DIR, X1, and X4 have
three components.
An example of the use of the GAPU user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 2.70.
324 UGASKET
Define the Initial Gasket Gap Distance

UGASKET Define the Initial Gasket Gap Distance

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

Alternate Format
User subroutine MD_UGASKET (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UGASKET ( MDUM,NN,XINTP,NCRD,NGASK,GASGAP,


* MATUS,MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 GASGAP,XINTP,RDATA
INTEGER MDUM,NCRD,NGASK,NN,MATUS
INTEGER NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION XINTP(*),MDUM(*)
RETURN
END
where:

Required Input:
MDUM(1) is the element ID.
MDUM(2) is the internal element storage number.
NN is the integration point number.
UGASKET 325
Define the Initial Gasket Gap Distance

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).
326 USELEM
User-defined Element

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 users 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.

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)
IMPLICIT REAL *8 (A-H, O-Z)
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,*)
USELEM 327
User-defined Element

DIMENSION F(NDEG,*),R(NDEG,*),SIGXX(NSTRMU,*),GEOM(*),
JGEOM(*)
user coding
RETURN
END

where:

Required 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.
IPASS Flag to indicate which pass for coupled analysis.
= 1 during a stress analysis pass.
= 2 during a heat transfer pass.
= 3 during a fluid pass.
= 4 during a Joule heating pass.
= 5 during a pore pressure pass.
= 6 during an electrostatic pass.
= 7 during a magnetostatic pass.
= 8 during an electromagnetic pass.
NSTATS is the number of state variables.
NGENEL is the number of generalized strains.
INTEL is the number of integration points.
COORD is the original nodal coordinates array.
NCRD is the number of coordinates per node.
328 USELEM
User-defined Element

IFLAG indicates what is to be returned by the user.


= 1 Called by OPRESS during formation of load vector.
You return F.
= 2 Called by OASEMB during formation of stiffness matrix.
You return XK,R.
= 3 Called by OASMAS during formation of mass matrix.
The user returns XM.
= 4 Called by OGETST during stress recovery.
The user returns R,GSIGS,DE,ETOTA,SIGXX for stress analysis pass.
The user returns R, SIGXX for heat transfer pass.
= 5 Called by SCIMP during output phase.
The user prints the results.
IDSS is the size of element stiffness matrix.
T is the state variables; temperature is the first state variable.
DT is the increment of state variables.
GEOM is the array of the geometric parameters.
JGEOM is the array of table ids for the geometric parameters.
NSTRMU is the number of stresses/heat fluxes per integration points.
Required Output:
XK is the stiffness matrix or conductivity matrix.
XM is the mass matrix or specific heat matrix.
F is the externally applied equivalent nodal loads/nodal fluxes array.
R is the internal forces/fluxes array.
ETOTA is the total strain array.
Not used in heat transfer.
GSIGS is the generalized stress array.
Not used in heat transfer.
DE is the increment of strain array.
Not used in heat transfer.
SIGXX is layer stresses for shell elements and is equal to GSIGS for continuum element.
In the heat transfer pass, SIGXX contains the thermal gradients and the
heat fluxes.

Note that the stiffness matrix is normally symmetric. If a nonsymmetric formulation is used, the SOLVER
option should be used to indicate this.
UNEWTN 329
Input of Viscosity in Flow Analysis

UNEWTN Input of Viscosity in Flow Analysis

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

Alternate Format
User subroutine MD_UNEWTN (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UNEWTN ( N,NN,V,E,NGENS,DT,DTDL,


* MATUS,MATNAMEC,ISUNIT,
* NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 DT,DTDL,E,V,RDATA
INTEGER N,NGENS,NN,MATUS
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
INTEGER NID,NRD,NCD,IDATA,ISUNIT
DIMENSION E(*),N(2),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
N(1) is the users element number.
330 UNEWTN
Input of Viscosity in Flow Analysis

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.
URPFLO 331
Rigid-Plastic Flow

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

Alternate Format
User subroutine MD_URPFLO (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_URPFLO ( MDUM,NN,KCUS,MATUS,INC,NDI,NGENS,NCRD,


1 NSTAT,CPTIM,TIMINC,EBAR,ERATE,DT,DTDL,
2 STATS,DSTATS,COORD,YD,MATNAMEC,ISUNIT,
3 NID,NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 COORD,CPTIM,DSTATS,DT,DTDL,EBAR,ERATE
INTEGER INC,KCUS,MATUS,MDUM,NCRD,NDI,NGENS,NN,NSTAT
INTEGER NID,NRD,NCD,IDATA,ISUNIT
REAL*8 STATS, TIMINC, YD, RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION MDUM(2),STATS(NSTAT),DSTATS(NSTAT),COORD(NCRD),
* MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
332 URPFLO
Rigid-Plastic Flow

where:

Required 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.
NSTAT number of state variables excluding temperature.
CPTIM time at beginning of increment.
TIMINC incremental time.
DT temperature at beginning of increment.
DTDL incremental temperature.
EBAR total equivalent strain at beginning of increment.
STATS values of state variables excluding temperature at beginning of increment.
DSTATS values of incremental state variables excluding temperature.
ERATE equivalent strain rate.
COORD integration point coordinates.
Required Output:
YD equivalent stress; if not calculated here, Marc finds the value of yd from the
input data.
DSTATS incremental state variables (excluding temperature).

Examples of the use of the URPFLO user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 3.30, 8.92, and 8.100.
UARRBO 333
Arruda-Boyce Material Model

UARRBO Arruda-Boyce Material Model

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 = nk --- I 1 3 + ---------- I 9 + ------------------2- I 27 + ------------------3- I 81 + ------------------------4- I 243 +
1 1 11 19 519
2 20N 1
1050N 1

7000N 1

673750N 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

Alternate Format
User subroutine MD_UARRBO (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UARRBO ( A1,A2,T,N,NN,MATUS,BULKM,


* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 A1, A2, BULKM,T, RDATA
INTEGER MATUS, N, NN,NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION N(2),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
T is the temperature.
334 UARRBO
Arruda-Boyce Material Model

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.
UGENT 335
Gent Material Model

UGENT Gent Material Model

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

Alternate Format
User subroutine MD_UGENT (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UGENT ( E,AI,T,N,NN,MATUS,BULKM,


* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 AI, BULKM, E, T, RDATA
INTEGER MATUS, N, NN,ISUNIT, NID,NRD,NCD,IDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION N(2),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
T is the temperature.
336 UGENT
Gent Material Model

N(1) is the users element number.


N(2) is the internal element number.
NN is the integration point number.
MATUS(1) is the users material identifier.
MATUS(2) is the internal material identifier.
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
UACOUS 337
Definition of Material Properties for Acoustic Analysis

UACOUS Definition of Material Properties for Acoustic Analysis

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

Alternate Format
User subroutine MD_UGENT (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_UACOUS ( MDUM,FREQC,XKF,DRAG,RHOHT,MATUS,


* MATNAMEC,ISUNIT,NID,NRD,NCD,IDATA,
* RDATA,CDATA)
REAL*8 DRAG, FREQC, RHOHT, XKF, RDATA
INTEGER MDUM,MATUS,NID,NRD,NCD,IDATA,ISUNIT
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION MDUM(2),MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
where:

Required Input:
MDUM(1) is the users element number.
MDUM(2) is the Marc element storage number.
FREQC is the frequency in cycles per time.
338 UACOUS
Definition of Material Properties for Acoustic Analysis

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.
USSUBS 339
Superelements Not Generated by Marc

USSUBS Superelements Not Generated by Marc

Description
This user subroutine allows you to enter stiffness matrix, mass matrix, conductivity matrix, capacity
matrix, load vector, internal force vector, or output for superelements not generated by Marc.
The number of superelements and the dimension are given via SUPER parameter and the connectivity of
the superelements is given via the SUPERINPUT model definition option.

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:

Required Input:
NLEV is the superelement level = 1.
NSS is the superelement number.
IC = 1: return XLOAD (XDISP,XRESI,XMAT not filled)
= 2: return XMAT (stiffness matrix) (XLOAD,XDISP,XRESI not filled)
= 3: return XRESI or if IC is reset to -3 return XMAT, the program will
calculate XRESI=XMAT*XDISP
XLOAD,MXAT not filled XDISP filled
= 4: output phase
XLOAD,XRESI,XMAT not filled XDISP filled
= 5: return XMAT (mass matrix) XLOAD,XDISP,XRESI not filled
= 6: return XMAT (damping matrix) XLOAD,XDISP,XRESI not filled
NODSUB is the number of nodes in the superelement.
340 USSUBS
Superelements Not Generated by Marc

NDEG is the number of degrees of freedom per node in the superelement.


LIM( ) is the node IDs of the superelement.
LM() is the future expansion.
TIME is the transient time at the start of the increment.
TIMINC is the incremental time period.
INC is the increment number.
IPASS Flag to indicate which pass for coupled analysis.
= 1 during a stress analysis pass.
= 2 during a heat transfer pass.
= 3 during a fluid pass - not supported.
= 4 during a Joule heating pass.
= 5 during a pore pressure pass.
= 6 during an electrostatic pass.
= 7 during a magnetostatic pass.
= 8 during an electromagnetic pass.
XDISP( ) is the displacement of the superelement.
Required Output:
XLOAD( ) is the external load vector on the superelement; this is total external force.
XRESI( ) in the internal force vector for the superelement
XRESI=XMAT*XDISP (if linear)
XMAT( ) is the stiffness, mass, damping matrix of the superelement.
UPYROLSL 341
Calculate the Rate of Decomposition

UPYROLSL Calculate the Rate of Decomposition

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 DArcy 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:

Required Input:
IREG is the region ID (Streamline model).
is the element number (DArcy flow).
ISTL is the streamline ID (Streamline flow).
is the integration point number (DArcy 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 DArcy flow
NCRD is the number of coordinates.
XSID is the coordinate of streamline integration point, or conventional integration point
for DArcy flow.
CPTIM is the time at beginning of increment.
DELTIM is the increment in time.
ARRPRY is the coefficients.
342 UPYROLSL
Calculate the Rate of Decomposition

TEMPE is the current temperature.


ND is the number of terms in Arrhenius series.
ARRPRY is the Arrhenius coefficients.
PHIJN is j at beginning of the increment.
XSIPN is the rate of pyrolysis.
Required Output:
DRODT is the time gradient of solid density due to pyrolysis.
PHJN1 is j at end of the increment.
UCOKSL 343
Calculate the Mass Fraction of Carbon in Pyrolysis Gas

UCOKSL Calculate the Mass Fraction of Carbon in Pyrolysis Gas

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 DArcy 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:

Required Input:
IREG is the region ID (Streamline model).
is the element number (DArcy flow).
ISTL is the streamline ID (Streamline flow).
is the integration point number (DArcy 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 DArcy flow
NCRD number of coordinates.
XXSIP is the coordinate of streamline integration point or conventional integration point for
DArcy flow.
CPTIM is the time at beginning of increment.
DELTIM is the increment in time.
344 UCOKSL
Calculate the Mass Fraction of Carbon in Pyrolysis Gas

AKCGN is the mass fraction of carbon in pyrolysis gases at previous time.


XSICN is the fraction of coking.
NC is the number of Arrhenius coefficients.
ARRCOK is the coefficients.
PRESSURE is the pressure.
TEMPE is the current temperature.
Required Output:
AKCGN1 is the mass fraction of carbon in pyrolysis gases at current time.

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
UWATERSL 345
Calculate the Rate of Water Evaporation

UWATERSL Calculate the Rate of Water Evaporation

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 DArcy law is used, and the water drying state is less than
0.98.

Format
User subroutine UWATERSL is written with the following headers:

SUBROUTINE UWATERSL ( 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:

Required Input:
IREG is the region ID (Streamline model).
is the element number (DArcy flow).
ISTL is the streamline ID (Streamline flow).
is the integration point number (DArcy 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 DArcy flow
NCRD is the number of coordinates.
XSIP is the coordinate of streamline integration point.
CPTIM is the time at beginning of increment.
DELTIM increment in time.
ARRWVP(4) is the coefficients.
346 UWATERSL
Calculate the Rate of Water Evaporation

PHIWN is the j (advancement variable of water drying) at current point, at previous time step.
RHO10 is the initial mass density of liquid water.
TEMPE is the current temperature.
Required Output:
DRODT is the time gradient of liquid density due to water drying.

It may be useful to obtain the universal gas constant which is available in variable UNVGAS in
COMMON MRCPARM.
UPYROLEFF 347
Define the Effective Conductivity

UPYROLEFF Define the Effective Conductivity

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 UPYROLEFF 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:

Required 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.
INEED is the number of components to be returned:
- 1 return 11
- 2 return 11 and 22
- 3 return 11, 12, and 22
- 4 return 11, 22, and 33
- 5 return 11, 12, 13, 22, 23 and 33
348 UPYROLEFF
Define the Effective Conductivity

MATE is the material ID.


IP is ne.0 - pyrolysis allowed.
IC is ne.0 - coking allowed.
IW is the water model/drying allowed
XDF is the fraction charred (0 to 1)
XDC is the fraction coked (0 to 1)
PHIW is the water drying state
CONDEFF is the effective conductivity to be returned by user
ECONDVR is the virgin conductivity, evaluated at the current temperature, etc.
ECONDC is the charred conductivity, evaluated at the current temperature, etc.
ECONDK is the coked conductivity, evaluated at the current temperature, etc.
ECOND1 is the coked conductivity, evaluated at the current temperature, etc.
RHO is the array of material densities
RHON is the material density at the beginning of the increment
DT is the temperature at the beginning of the increment
TEE is the temperature at the end of the increment
CPTIM is the time at the beginning of the increment
DELTIM is the increment of time

The conductivity in ECONDVR, ECONDC, and ECONDK is stored as follows:

k11 1st component


k22 2nd component
k33 3rd component
k12 4th component
k13 5th component
k23 6th component

For :

1 virgin material
2 charred material
3 not used
4 not used
5 not used
UPYROLEFF 349
Define the Effective Conductivity

6 liquid data
7 coke data

The conductivity in CONDEFF is output as follows:

k11 1st component


k12 2nd component
k13 3rd component
k22 4th component
k23 5th component
k33 6th component

For isotropic material INEED=1, and only the 1st component CONDEFF(1) needs to be returned.
350 USPCHTAB
Define Specific Heat for Simplified Pyrolysis Model

USPCHTAB Define Specific Heat for Simplified Pyrolysis Model

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

Alternate Format
User subroutine MD_USPCHTAB (activated through the MATUDS option) is written with the following
headers:

SUBROUTINE MD_USPCHTAB ( SPHEAT,M,NN,KC,INC,NCYCLE,MATUS,NSTATS,


* TEMP0,DTEMP,TIME,DTIME,RANGE,IFIRST,
* TPYRBEG,TCOMBEND,MATNAMEC,ISUNIT,NID,
* NRD,NCD,IDATA,RDATA,CDATA)
REAL*8 DTEMP, DTIME, RDATA
INTEGER IFIRST, INC, KC, M, MATUS, NCYCLE, NN, NSTATS
INTEGER NID,NRD,NCD,IDATA,ISUNIT
REAL*8 RANGE, SPHEAT, TCOMBEND, TEMP0, TIME, TPYRBEG
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION MATUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END
USPCHTAB 351
References

where:

Required 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
TPYRBEG temperature when pyrolysis begins
TCOMBEND temperature when combustion ends
Required Output
SPHEAT specific heat on input set to standard value from input cards

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.
Chapter 4 Viscoplasticity and Generalized Plasticity User Subroutines List
Marc Volume D: User Subroutines and Special Routines

Viscoplasticity and
4 Generalized Plasticity User
Subroutines List

User Subroutine Page


ASSOC 367

CRPLAW 361

NASSOC 363

SINCER 368

UCRPLW 359
UVSCPL 355

YIEL 366

ZERX 365
Chapter 4 Viscoplasticity and Generalized Plasticity User Subroutines
Marc Volume D: User Subroutines and Special Routines

Viscoplasticity and
4 Generalized Plasticity
User Subroutines
Chapter 4 Viscoplasticity and Generalized Plasticity User Subroutines 353

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.
354 Marc Volume D: User Subroutines and Special Routines

Table 4-1 Viscoplasticity and Generalized Plasticity User Subroutine Requirements


User Required Parameters or
Subroutine Model Definition Options Purpose
ASSOC ISOTROPIC GEN-PLAST Definition of the direction of incremental plastic strain in
generalized plasticity model.
CRPLAW CREEP Definition of inelastic strain rate for explicit viscoplasticity
model.
NASSOC CREEP Definition of direction of incremental viscoplastic strain for
explicit viscoplasticity model.
SINCER ISOTROPIC GEN-PLAST Definition of fraction of increment which is elastic for
generalized plasticity model.
UCRPLW CREEP Definition of complex relationships for the factors in the
power law expression for the creep strain rate
UVSCPL CREEP Definition of inelastic strain rate for implicit
ISOTROPIC VISCO-PLASTIC viscoplastic model.
YIEL ISOTROPIC, Definition of yield stress.
ORTHOTROPIC or
ANISOTROPIC
ZERX ISOTROPIC, Definition of equivalent stress.
ORTHOTROPIC or
ANISOTROPIC
UVSCPL 355
Definition of the Inelastic Strain Rate

UVSCPL Definition of the Inelastic


Strain Rate

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,THMSTI,


1 EELAS,S,SINC,GF,EPL,AVGINE,EQCRP,EQCPNC,
2 YD,YD1,VSCPAR,DT,DTDL,CPTIM,TIMINC,XINTP,
3 NGENS,M,NN,KCUS,MATUS,NDI,NSHEAR,NCRD,
4 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),
3 EPL(NGENS),AVGINE(NGENS),DT(NSTATS),DTDL(NSTATS),
4 XINTP(NCRD),SHEAR(3,2),VSCPAR(NVSPLM),
5 MATUS(2),KCUS(2)
user coding
RETURN
END

Alternate Format
User subroutine MD_UVSCPL is written with the following headers:

SUBROUTINE MD_UVSCPL ( YOUNG,POISS,SHEAR,B,USTRRT,ETOT,E,THMSTI,


1 EELAS,S,SINC,GF,EPL,AVGINE,EQCRP,EQCPNC,
2 YD,YD1,VSCPAR,DT,DTDL,CPTIM,TIMINC,XINTP,
3 NGENS,M,NN,KCUS,MATUS,NDI,NSHEAR,NCRD,
4 LOVL,NVSPLM,MATNAMEC,ISUNIT,NID,NRD,NCD,
5 IANISO,NSTATS,INC,NCYCLE,IDATA,
^ RDATA,CDATA)
356 UVSCPL
Definition of the Inelastic Strain Rate

REAL*8 AVGINE,B,CPTIM,DT,DTDL,E,EELAS,EPL,EQCPNC,EQCRP
REAL*8 ETOT,GF,POISS,S,SHEAR,SINC,THMSTI,TIMINC,USTRRT
REAL*8 VSCPAR,XINTP, D,YD1,YOUNG
INTEGERIANISO,INC,KCUS,LOVL,M,MATUS,NCRD,NCYCLE,NDI
INTEGER NGENS,NN,NSHEAR,NSTATS,NVSPLM
INTEGER NID,NRD,NCD,IDATA,ISUNIT
REAL*8 RDATA
CHARACTER*16 CDATA
CHARACTER*12 MATNAMEC
DIMENSION POISS(3,2),YOUNG(3,2),B(NGENS,NGENS),USTRRT(NGENS),
1 ETOT(NGENS),E(NGENS),THMSTI(NGENS),EELAS(NGENS),
2 S(NGENS),SINC(NGENS),GF(NGENS),EPL(NGENS),AVGINE(NGENS)
,
3 DT(NSTATS),DTDL(NSTATS),XINTP(NCRD),
4 SHEAR(3,2),VSCPAR(NVSPLM),MATUS(2),KCUS(2)
DIMENSION IDATA(*),RDATA(*),CDATA(*)
RETURN
END

where:

Required Input:
YOUNG is the Youngs modulus.
POISS is the Poissons 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.
THMSTI is the thermal strain increment.
EELAS is the accumulated elastic strain at beginning of increment.
S is the accumulated stress at beginning of increment.
EPL is the accumulated inelastic strain at beginning of increment.
EQRCP is the equivalent inelastic strain at beginning of increment.
EQCPNC is the increment equivalent inelastic strain.
YD is the flow stress at temperature t.
YDL is the flow stress at temperature t + dt.
VSCPAR is the viscoplastic data read off isotropic or orthotropic option.
UVSCPL 357
Definition of the Inelastic Strain Rate

DT is the state variables at beginning of increment; temperature is the first state variable.
DTDL is the incremental state variables.
CPTIM is the elapsed time at beginning of increment.
TIMINC is the time increment.
XINTP is the integration point coordinates.
NGENS is the number of strain components.
M 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.
NDI is the number of direct components.
NSHEAR is the number of shear components.
NCRD is the number of coordinate directions.
IANISO is the flag to indicate nonisotropic elasticity.
NSTATS is the number of state variables.
INC is the increment number.
NCYCLE is the cycle number.
LOVL = 4 during stiffness formation.
= 6 during residual calculation.
NVSPLM is the number of viscoplastic data read from input.
358 UVSCPL
Definition of the Inelastic Strain Rate

Required Output:
USTRRT is the inelastic strain rate.
SINC is the stress increment.
GF is the change in stress due to change in elastic material properties associated with DT.
AVGINE is the inelastic strain increment.

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.
UCRPLW (Viscoplastic) 359
Input of Creep Factors for Power Law Implicit Creep

UCRPLW (Viscoplastic) Input of Creep Factors for Power Law Implicit Creep

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)
CREEP STRAIN RATE = CPA*CFT*CFE*CFTI*(STRESS**CFSTRE)
C
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION MDUM(*),MATUS(2), KCUS(2)
user coding
RETURN
END

where:

Required 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).
MATUS(1) is the user material identifier.
MATUS(2) is the internal material identifier.
360 UCRPLW (Viscoplastic)
Input of Creep Factors for Power Law Implicit Creep

Required Output
CPA is thecreep constant
CFT is thetemperature factor
CFE is thecreep strain factor
CFTI is thetime factor
CFSTRE is thestress exponent
CRPLAW (Viscoplastic) 361
Input of Explicit Viscoplastic Strain Rate Law

CRPLAW (Viscoplastic) Input of Explicit Viscoplastic Strain Rate Law

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:

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).

Examples of the use of the CRPLAW user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 3.12, 3.22, 3.24, and 11.8.25.

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.

y is the current equivalent yield stress including workhardening, temperature effects and
Mohr-Coulomb terms.
n is the index of the power law.
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 yo where yo is the equivalent stress at first yield.
362 CRPLAW (Viscoplastic)
Input of Explicit Viscoplastic Strain Rate Law

This is programmed as follows; for n=2

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(1),DT(1),STR(1),CRPE(1),MATUS(2),KCUS(2)
C = 0.01/(YD*YD)
S = T(1) - YDZER
EQCPNC = 0.0
IF(S.LT.0.0)RETURN
S=S*S
EQCPNC=C*S*TIMINC
RETURN
END
NASSOC 363
Input of a Nonassociated Flow Law

NASSOC Input of a Nonassociated Flow Law

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:

Required 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.
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.
364 NASSOC
Input of a Nonassociated Flow Law

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:

Required Input:
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
ZERX 365
Calculation of Equivalent Stress

ZERX Calculation of Equivalent Stress

Description
The ZERX user subroutine (formely ZERO) is used to calculate the equivalent yield stress based on the
current total stresses. The ZERX user subroutine in Marc applies the von Mises yield criterion as a
default. The user can substitute another yield criterion by writing a new ZERX user subroutine.
Mohr-Coulomb models specified in the ISOTROPIC option should not be used when ZERX user
subroutine is used because of the danger of taking into account the effects of hydrostatic pressure twice.

Format
User subroutine ZERX is written with the following headers:

REAL*8 FUNCTION ZERX ( 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:

Required 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 Hills anisotropic plasticity.
YRSHR are the shear components for Hills anisotropic plasticity.
AMM is the metric if curvilinear coordinates are used.
AO is the metric scale factor if curvilinear coordinates are used.
Required Output:
ZERX is the equivalent yield stress.
366 YIEL
Calculation of Current Yield

YIEL Calculation of Current Yield

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:

Required 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 ZERX 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.
ASSOC 367
Input of Associated Flow Law

ASSOC Input of Associated Flow Law

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:

Required 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:

SINC is the flow direction


------- to be defined by the user, where is the equivalent stress T.

368 SINCER
User Subroutine for Improving Accuracy

SINCER User Subroutine for Improving Accuracy

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:

Required 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.
Chapter 5 Viscoelasticity User Subroutines List
Marc Volume D: User Subroutines and Special Routines

Viscoelasticity User
5 Subroutines List

User Subroutine Page


CRPVIS 372

HOOKVI 377

TRSFAC 375
Chapter 5 Viscoelasticity User Subroutines
Marc Volume D: User Subroutines and Special Routines

Viscoelasticity User
5 Subroutines
Chapter 5 Viscoelasticity User Subroutines 1754

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


User Required Parameters or
Subroutine Model Definition Options Purpose
CRPVIS VISCO ELAS Definition of generalized Kelvin model using
explicit procedure.
HOOKVI VISCELORTH Definition of anisotropic viscoelastic material law for a
particular relaxation time.
TRSFAC VISCELPROP or Definition of shift function for thermo-rheologically
VISCELORTH or simple material.
VISCELMOON or
VISCELOGDEN and
SHIFT FUNCTION
1755 CRPVIS
Viscoelasticity Generalized Kelvin Material Behavior

CRPVIS Viscoelasticity Generalized Kelvin Material Behavior

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
d K
strain ijK , governed by ----
- ij = A ijkl S kl B ijkl kl
K
dt

where:

[A] and [B] are defined by the user in the user subroutine described below,
kk
s ij are the deviatoric stress components s ij = ij ij -------
-
3

and the total strain is: ij = ije + ijp + ijc + ijK + ijth

where:

ijth are the thermal strain components.

ije are the elastic strain components (instantaneous response).

ijp are the plastic strain components.

ijc are the creep strains defined via CRPLAW and VSWELL user subroutines and using the
CREEP option.
ijK are the Kelvin model strain components as defined above.

Format
User subroutine CRPVIS is written with the following headers:

SUBROUTINE CRPVIS ( CRPR,TSIG,SINC,AE,BE,NGENS,DT,DTDL,


1 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
CRPVIS 1756
Viscoelasticity Generalized Kelvin Material Behavior

where:

Required Input:
CRPR are the Kelvin creep strain components.
12
TSIG(1) is the second invariant of the deviatoric stress = 3--- s ij s ij .
2

TSIG(2) is the hydrostatic stress = 1--- kk .


3

SINC are the deviatoric stress components s ij .


NGENS is the number of stress (strain) components.
DT are the total state variables at this point (temperature first).
DTDL are the increments of state variables at this point during this step of the solution.
N(1) is the users 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 users material identifier.
MATUS(2) is the internal material identifier.
NDI is the number of direct components.
NSHEAR is the number of shear components.
TIME is the total time.
TIMINC is the time increment.
Required Output:
AE is the matrix A ijkl above, to be defined here by the user.
BE is the matrix B ijkl above, to be defined here by the user.

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
1757 CRPVIS
Viscoelasticity Generalized Kelvin Material Behavior

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:
d
----- K = A S B d K , etc. = 1 ,2
dt

with two shear components stored, 1 2 , then 2 1 .


TRSFAC 1758
Define a Shift Function for Thermo-Rheologically Simple (T.R.S.) Material Behavior

TRSFAC Define a Shift Function for Thermo-Rheologically Simple (T.R.S.)


Material Behavior

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.

Marc proceeds to compute the increment of pseudo- or reduced time (x, t) according to
the relationship:
t + t
t
1
x t = 10 B T x t dt 1

where the shift factor, B, is a function of the spatially and time dependent temperature, T(x, t). A
five-point Simpsons 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.

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
1759 TRSFAC
Define a Shift Function for Thermo-Rheologically Simple (T.R.S.) Material Behavior

where:
The following parameters are passed into this user subroutine and must not be redefined:

Required 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 users 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.
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.
HOOKVI 1760
User-defined Anisotropic Viscoelasticity

HOOKVI User-defined Anisotropic Viscoelasticity

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:

Required Input:
M(1) is the users 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 Youngs moduli input in the VISCELORTH option.
PR is the vector of time dependent Poissons 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.
Chapter 6 Geometry Modifications User Subroutines List
Marc Volume D: User Subroutines and Special Routines

Geometry Modifications User


6 Subroutines List

User Subroutine Page


MAP2D 385

REBAR 394

UACTIVE 392
UACTUAT 413
UADAP 399
UADAP2 406
UADAPBOX 407
UCOORD 398
UCRACK_PARIS 409
UCRACKGROW 400
UDELAM 402
UFCONN 384
UFRORD 395
UFXORD 383
Chapter 6 Geometry Modifications User Subroutines List 379

User Subroutine Page


UMAKNET 387
UPNOD 391
URCONN 396
USHELL 411
USIZEOUTL 386
USPLIT 397
USPLIT_MESH 404
UTHICK 412
UTRANS 410
Chapter 6 Geometry Modifications User Subroutines
Marc Volume D: User Subroutines and Special Routines

Geometry Modifications
6 User Subroutines
Chapter 6 Geometry Modifications User Subroutines 381

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


User Required Parameters or
Subroutine Model Definition Options Purpose
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 option) adaptive meshing.
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.
UDELAM DELAMINATION Defines the delamination index
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
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.
382 Marc Volume D: User Subroutines and Special Routines

Table 6-1 Geometry Modifications User Subroutines Requirements (continued)


User Required Parameters or
Subroutine Model Definition Options Purpose
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.
UFXORD 383
Coordinate Generation or Modification

UFXORD Coordinate Generation or Modification

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:

Required 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.
Examples of the use of the UFXORD user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.16, 2.17, 2.18, 2.19, 2.20, 2.55, 2.56, 3.5, 3.16, 3.17, 3.23, 3.27, 4.5, and 4.7.
384 UFCONN
Connectivity Generation or Modification

UFCONN Connectivity Generation or Modification

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:

Required 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.

LM is passed in containing the connectivity of the Jth element already generated by previous
CONNECTIVITY, UFCONN, or other generators. Similarly, ITYPE is the element type if previously
defined. The user can modify or define ITYPE or LM in 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 .
Examples of the use of the UFCONN user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.20, 2.27, 2.34, 2.46, and 7.15.
MAP2D 385
Boundary Node Coordinates Modification in Mesh2D

MAP2D Boundary Node Coordinates Modification in Mesh2D

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:

Required Input:
NNO is the number of boundary nodes.
Required Output:
X and Y are the user-defined coordinates of the boundary nodes.
386 USIZEOUTL
Local Refinement Definition for 2-D Remeshing with Advancing Front Mesher

USIZEOUTL Local Refinement Definition for 2-D Remeshing with


Advancing Front Mesher

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:

Required 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.
XZY is the outline point coordinates.
NUMOUT is the number of the outline points.
Required Output:
ESIZE is the edge length array on the outline.

An example of the use of the US{CHT user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 8.31.
UMAKNET 387
User-defined Remeshing Routine

UMAKNET User-defined Remeshing Routine

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
User subroutine UMAKNET is written with the following header lines:

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:

Required 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.
numnp is the total number of nodes.
numel is the total number of elements.
numelmx is the maximum number of elements.
388 UMAKNET
User-defined Remeshing Routine

neltab is the size of the array ieltab.


ndeg is the number of degrees of freedom.
ncrd is the number of coordinate components (2d=2, 3d=3).
xord(ncrdmx,*) is the nodal coordinates.
disp(ndegmx,*) is the nodal displacement.
ieltab(neltab,*) is the element group information.
ielcon(nnodmx,*) is the current element connectivity.
filename is the remeshing filename.
Required Output:
iflag if return 0, no user subroutine not used
if 1, user subroutine is used.
t18 file with filename if 2-D.
feb file with filename if 3-D.

t18 file for 2-D or Axisymmetric - Fixed Format

Format

Format
Data
Fixed Free Entry Entry
1st data block
1-10 A Enter the word extended.
2nd data block
1-20 A Enter the words connectivity change.
3rd data block
1-10 I Enter 0.
4th data block
1-10 I Enter the element number.
11-20 I Enter 11.
21-30 I First node number of element.
31-40 I Second node number of element.
41-50 I Third node number of element.
51-60 I Fourth node number of element.
5th data block
1-20 A Enter the words coordinate change.
UMAKNET 389
User-defined Remeshing Routine

Format
Data
Fixed Free Entry Entry
6th data block
1-10 I Enter 0.
Repeat the 7th data block for each node.
7th data block
1-10 I Enter node number.
11-30 E Enter:
x-coordinate for 2-D.
z-coordinate for axisymmetric.
31-50 E Enter:
y-coordinate for 2-D.
r-coordinate for axisymmetric.
8th data block
1-10 A Enter the word exit.
9th data block
1-10 A Enter the word usdata.

feb file format - fixed format

Format

Format
Data
Fixed Free Entry Entry
1st data block
1-10 A Enter the word extended.
2nd data block
1-10 A Enter the words connectivity change.
3rd data block
1-10 I Enter 0.
Repeat the 4th data block for each element.
4th data block
1-10 I Enter element number.
11-20 I Enter 7.
21-30 I First node number of element.
390 UMAKNET
User-defined Remeshing Routine

Format
Data
Fixed Free Entry Entry
31-40 I Second node number of element.
41-50 I Third node number of element.
51-60 I Fourth node number of element.
61-70 I Fifth node number of element.
71-80 I Sixth node number of element.
81-90 I Seventh node number of element.
91-100 I Eighth node number of element.
5th data block
1-20 A Enter the words coordinate change.
6th data block
1-10 I Enter 0.
Repeat the 7th data block for each node.
7th data block
1-10 I Enter node number.
11-30 E Enter x-coordinate.
31-50 E Enter y-coordinate.
51-70 E Enter z-coordinate.
8th data block
1-10 A Enter the words end option.
UPNOD 391
Update Nodal Positions in Flow Solutions

UPNOD Update Nodal Positions in Flow Solutions

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:

Required 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.

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
392 UACTIVE
Activate or Deactivate Elements

UACTIVE Activate or Deactivate Elements

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.
The UACTIVE user routine is called multiple times per increment. In particular, it is called for every
element during the stiffness matrix assembly for each iteration and for every physics pass (mechanical,
thermal, etc.). It is also called for each element after the increment has converged. The ELMVAR utility
routine may be used to obtain calculated element quantities.

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),M(2)
user coding
RETURN
END
where:

Required 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.
1 activate element and add element to post file
11 activate element and keep status on post file.
UACTIVE 393
Activate or Deactivate Elements

MODE(2) 0 activate/deactivate element in all physics passes.


1 only activate/deactivate mechanical part in coupled
2 only activate/deactivate at the thermal part in coupled
MODE(3) 0 activation/deactivation at the end of increment
1 activation/deactivation at the beginning of increment
IRSTSTR is set to 1 to reset stresses to zero.
IRSTSTN is set to 1 to reset strains to zero.

An example of the use of the UACTIVE user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 3.46.
394 REBAR
Input of Rebar Positions, Areas and Orientations

REBAR Input of Rebar Positions, Areas and Orientations

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:

Required 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 (three values).

Examples of the use of the REBAR user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.14, 2.37, 2.38, 2.39, and 8.6.
UFRORD 395
Rezoning Coordinate Generation or Modification

UFRORD Rezoning Coordinate Generation or Modification

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:

Required 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.
396 URCONN
Rezoning Connectivity Generation or Modification

URCONN Rezoning Connectivity Generation or Modification

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:

Required 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.

LM is passed in containing the connectivity of the Jth element already generated by previous
CONNECTIVITY, UFCONN, CONNECTIVITY CHANGE, or other generators. Similarly, ITYPE is the
element type if previously defined. The user can modify or define ITYPE or LM in 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 .
USPLIT 397
User-defined Criterion to Split a Two-dimensional Body

USPLIT User-defined Criterion to Split a Two-dimensional Body

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:

Required Input:
IDIERE is the body number.
Required Output:
IFLAG=1 is a body is split by checking the thickness or distance of any pair of the
opposite segments.
SPLIT0 is the distance value at which the body will be split.

An example of the use of the USPLIT user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 8.32.
398 UCOORD
Relocate Nodes Created During Adaptive Meshing

UCOORD Relocate Nodes Created During Adaptive Meshing

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)


DIMENSION XORD(NCRD,1),LM(1)
user coding
RETURN
END
where:

Required 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.

Update XORD(J,INOD) if desired.


UADAP 399
User-defined Error Criterion

UADAP User-defined Error Criterion

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:

Required Input:
MM is the users 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.
400 UCRACKGROW
Definition of Crack Growth Direction and Crack Growth Increment for the VCCT Option

UCRACKGROW Definition of Crack Growth Direction and Crack Growth


Increment for the VCCT Option

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.
LCRACK is current crack number.
ICFN is index of the crack tip node in the current crack front. For 2-D and 3-D, shells always
equal to 1.
INC is the current increment number.
TIME is the current analysis time.
TIMEINC is the current time increment.
UCRACKGROW 401
Definition of Crack Growth Direction and Crack Growth Increment for the VCCT Option

Required Output:
DIR is the estimated crack growth direction.
GROWINC is the crack growth increment.
402 UDELAM
User-defined Delamination Index for Delamination Feature

UDELAM User-defined Delamination Index for Delamination Feature

Description
This user subroutine can be used for defining the delamination index for the delamination feature
(Volume A Theory and User Information, Chapter 5, Mesh Splitting).
The routine is called each time a delamination index is calculated using the DELAMINATION option. it
may be called multiple times for each node but for different elements and different layers of the element.
Upon entry to the routine, the program has already calculated the default delamination index:

n
m
-----n- + -------t- for n 0
Sn St
t n
-------
- otherwise
St

This is passed in as:

m
t1 = -----
Sn
n
- for n 0

n
t2 = -------
St
t
-

t1 and t2 can be modified to define the delamination index. If mesh splitting is active the mesh will split
if t1 + t2 1.0 .

t1 appears on the post file as nodal post code 69, Delamination Index (Normal)
t2 appears on the post file as nodal post code 70, Delamination Index (Tangential)
t1 + t2 appears on the post file as nodal post code 71, Delamination Index

Format
User subroutine UDELAM is written with the following headers:

SUBROUTINE UDELAM ( T1,T2,SINGNORM,SIGTAN,SN,ST,EXPN,


$ EXPT,NODE,IELEM,ILAYER,INC,TIME,TIMEINC)
REAL*8 T1,T2,SINGNORM,SIGTAN,SN,ST,EXPN,EXPT,TIME,TIMEINC
INTEGER NODE,IELEM,ILAYER,INC
RETURN
END
UDELAM 403
User-defined Delamination Index for Delamination Feature

where:

Required Input:
T1 is the first term of the delamination criterion.
T2 is the is the second term of the delamination criterion.
SIGNORM is the current normal stress ( S n ) at NODE.
SIGTAN is the current tangential stress ( S t ) at NODE.
SN is the user input ( S n ); possibly scaled due to table variation.
ST is the user input ( S t ); possibly scaled due to table variation
EXPN is the user input m; possibly scaled due to table variation.
EXPT is the user input n; possibly scaled due to table variation.
NODE is the user ID of the current node.
IELEM is the user ID of the current element
ILAYER is the current layer in IELEM. For non-layered elements it is always equal to 1
INC is the current increment number.
TIME is the time at the beginning of the increment.
TIMEINC is the time increment.

For the definition of normal and tangential stress see Volume A Theory and User Information, Chapter 5,
Mesh Splitting.
404 USPLIT_MESH
User Subroutine for Splitting Up a Mesh

USPLIT_MESH User Subroutine for Splitting Up a 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:

Required 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.
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.
USPLIT_MESH 405
User Subroutine for Splitting Up a Mesh

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.

An example of the use of the USPLIT_MESH user subroutine can be found in Marc Volume E:
Demonstration Problems, problem 8.94 .
406 UADAP2
User-defined Unrefinement

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.
This routine is only called for active 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:

Required 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.
UADAPBOX 407
User-defined Region For Local Adaptive Meshing

UADAPBOX User-defined Region For Local Adaptive Meshing

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:

Required 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.
BODYMOTION(I,J) are the displacements of the reference point of contact body j.
NBODIES are the total number of contact bodies in the model.
NFIRSTRIGID is the the number of the first rigid contact body (= 0 if none are present).
Required Output:
For Box Criteria - Type 4
REGCOORD(1) = Xmin
REGCOORD(2) = Ymin
408 UADAPBOX
User-defined Region For Local Adaptive Meshing

REGCOORD(3) = Zmin
REGCOORD(4) = Xmax
REGCOORD(5) = Ymax
REGCOORD(6) = Zmax
For Cylindrical Region Criteria - Type 19
REGCOORD(1) = Radius
REGCOORD(2) = X coordinate of 1st point on axis.
REGCOORD(3) = Y coordinate of 1st point on axis.
REGCOORD(4) = Z coordinate of 1st point on axis.
REGCOORD(5) = X coordinate of 2nd point on axis.
REGCOORD(6) = Y coordinate of 2nd point on axis.
REGCOORD(7) = Z coordinate of 2nd point on axis.
For Spherical Region Criteria - Type 20
REGCOORD(1) = Radius
REGCOORD(2) = X coordinate of center.
REGCOORD(3) = Y coordinate of center.
REGCOORD(4) = Z coordinate of center.

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
UCRACK_PARIS 409
Define the Crack Growth Increment

UCRACK_PARIS Define the Crack Growth Increment

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.
GROWINCMIN is the minimum growth increment, from input possibly scaled by table.
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.
INC is the increment number.
TIME is the time.
TIMEINC is the time increment.
Required Output
GROWINC is the crack growth increment to be specified in this routine; initially contains the
value determined by the program based upon Pariss law which is:
growinc = C G max G min exp o n G th exp on
410 UTRANS
Implement Local Coordinate System

UTRANS Implement Local Coordinate System

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:

Required 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 users 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.

Examples of the use of the UTRANS user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.62 and 4.14.
USHELL 411
Modify Thickness of Shell Elements

USHELL Modify Thickness of Shell Elements

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:

Required Input:
XINTP is the integration point coordinates.
NCRD is the number of coordinates per point.
M(1) is the users 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.
412 UTHICK
User-specified Nodal Thicknesses

UTHICK User-specified Nodal Thicknesses

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:

Required 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.

Examples of the use of the UTHICK user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.83, 2.87, 7.15, and 7.16.
UACTUAT 413
Prescribe the Length of an Actuator

UACTUAT Prescribe the Length of an Actuator

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:

Required Input:
M(1) is the users 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.

An example of the use of the UACTUAT user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 4.26.
Chapter 7 Output Quantities User Subroutines Li
Marc Volume D: User Subroutines and Special Routines s

Output Quantities User


7 Subroutines List

User Subroutine Page


ELEVAR 432
ELEVEC 434

IMPD 424
INTCRD 436

PLOTV 417

UBGINC 437
UBGITR 439
UBGPASS 440
UEDINC 438
UELOOP 441
UPOSTV 420
UPSTNO 422
Chapter 7 Output Quantities User Subroutines
Marc Volume D: User Subroutines and Special Routines

Output Quantities
7 User Subroutines
416 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


User Required Parameters or
Subroutine Model Definition Options Purpose
ELEVAR UDUMP Allows postprocessing of element results.
ELEVEC UDUMP Allows postprocessing of element results in
harmonic analysis.
INTCRD Makes available integration point coordinates.
IMPD UDUMP Allows postprocessing of nodal vector results.
PLOTV POST Defines element quantity to be written to post file.
ORIENTATION
UBGINC Dummy routine available at the beginning of each increment.
UBGITR Dummy routine available at the beginning of each iteration.
UBGPASS Dummy routine available at the beginning of each pass in
coupled analyses.
UEDINC Dummy routine available at the end of each increment.
UELOOP Dummy routine available during major element loops.
UPOSTV POST Defines nodal vectors to be written to a post file.
UPSTNO POST Defines nodal quantities to be written to a post file
PLOTV 417
User-selected Postprocessing of Element Variables

PLOTV User-selected Postprocessing of Element Variables

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:

Required 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 users 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).
NDI is the number of direct stresses.
NSHEAR is the number of shear stresses.
418 PLOTV
User-selected Postprocessing of Element Variables

JPLTCD is the absolute value of the users entered code.


Required Output:
V is the variable to be plotted or put onto the post file, to be defined in this routine.

The components of the stress and strain arrays passed through this user subroutine are in the same order
as by Marc Volume B: Element Library element type.
Examples of the use of the PLOTV user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 2.26 and 4.20.

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)
user coding
RETURN
END
This quantity could then be postprocessed using Marc Mentat or Patran.
For electromagnetics, the PLOTV variables are:

Required Input:
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 users 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
PLOTV 419
User-selected Postprocessing of Element Variables

NSHEAR is not used.


JPLTCD is the absolute value of the users post code.
420 UPOSTV
User-selected Postprocessing of Nodal Variables

UPOSTV User-selected Postprocessing of Nodal Variables

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:

Required Input:
N is the users 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 users 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.
UPOSTV 421
User-selected Postprocessing of Nodal Variables

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
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
422 UPSTNO
User-selected Postprocessing of Nodal Variables

UPSTNO User-selected Postprocessing of Nodal Variables

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

Required 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
NQNCOMP Number of values in VALNO
NQTYPE 0 = scalar
1 = vector
NQAVER Only for DDM:
0 = sum over domains
1 = average over domains
UPSTNO 423
User-selected Postprocessing of Nodal Variables

NQCOMPTYPE Used by Marc Mentat:


0 = global coordinate system (X,Y,Z)
1 = shell (Top, Bottom, Middle)
2 = order (First, Second, Third)
NQDATATYPE 0 = default
1 = modal
2 = buckle
3 = harmonic real
4 = harmonic real/imaginary
5 = harmonic magnitude/phase

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
424 IMPD
Output of Nodal Quantities

IMPD Output of Nodal Quantities

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:

Required 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.
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).
IMPD 425
Output of Nodal Quantities

During harmonic subincrements:

Required 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.

Note: The value of these quantities (displacement, reaction force, velocity acceleration) are with
respect to the global coordinate system. To obtain the values with respect to a dser-defined
local coordinate system, use the UT_TRANSF utility discussed earlier.

Examples of the use of the IMPD user subroutine can be found in Marc Volume E: Demonstration
Problems, problems 3.3, 3.19, 3.21, 7.14, and 8.15.

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.
426 IMPD
Output of Nodal Quantities

Heat Transfer Analysis

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:

Required 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).

Joule Heating (Current Pass) Analysis

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
IMPD 427
Output of Nodal Quantities

RETURN
END

where:

Required 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:

Required 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.
428 IMPD
Output of Nodal Quantities

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).

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:

Required 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).
IMPD 429
Output of Nodal Quantities

Harmonic Electromagnetic 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:

Required 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).

Transient Electromagnetic 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),LNODE(2)
user coding
RETURN
END
430 IMPD
Output of Nodal Quantities

where:

Required 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:

Required 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.
F is the real reaction forces (nodes of structural elements).
IMPD 431
Output of Nodal Quantities

is the real reaction sound source (nodes of acoustic medium).


V is the imaginary reaction forces (nodes of structural elements).
is the imaginary reaction sound source (nodes of structural elements).
A is not used.
NDEG is the number of degrees of freedom per node.
NCRD is the number of coordinate directions per node.

Fluid or Fluid-Thermal 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(1),A(1),
LNODE(2)
user coding
RETURN
END
where:

Required 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).
432 ELEVAR
Output of Element Quantities

ELEVAR Output of Element Quantities

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,
2 KRTYP,PRANG,DT,GSV,NGENS,NGEN1,NSTATS,
3 NSTASS,THERM)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION GSTRAN(NGENS),GSTRES(NGENS),
1 STRESS(NGEN1),PSTRAN(NGEN1),CSTRAN(NGEN1),
2 VSTRAN(NGEN1),CAUCHY(NGEN1),DT(NSTATS),GSV(1),
2 THERM(NGEN1),KRTYP(4),
3 PRANG(3,2),KCUS(2)
user coding
RETURN
END
where:

Required 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.
VSTRAN is the viscoelastic strain array.
ELEVAR 433
Output of Element Quantities

CAUCHY is the Cauchy stress array.


EPLAS is the equivalent plastic strain.
EQUIVC is the equivalent creep strain.
SWELL is the swelling strain.
KRTYP(1) is the crack indicator for the first crack direction
0 = no crack in this direction.
1 = open crack, developed in this increment.
2 = open crack, developed in previous increment.
3 = closed crack.
KRTYP(2) is the crack indicator for the second crack direction.
KRTYP(3) is the crack indicator for the third crack direction.
KRTYP(4) is the crushing indicator:
0 = no crushing.
1 = crushing occurring in this increment.
2 = crushing occurred in previous increment.
PRANG (i,1) = components of normal to the first crack plane.
(i,2) = components of normal to the second crack plane (3-D only).
DT is the state variables array, temperature first.
GSV is the global state variable array.
NGENS is the number of generalized strains.
NGEN1 is the number of physical components.
NSTATS is the number of state variables.
NSTASS is the number of global state variables.
THERM is the total thermal strain array.

An example of the use of the ELEVAR user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 7.14.
434 ELEVEC
Output of Element Quantities in Harmonic Analysis

ELEVEC Output of Element Quantities in Harmonic Analysis

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,
2 KRTYP,PRANG,DT,GSV,NGENS,NGEN1,NSTATS,
3 NSTASS,STSRE,STSIM,STNRE,STNIM)
IMPLICIT REAL *8 (A-H, O-Z)
DIMENSION GSTRAN(NGENS),GSTRES(NGENS),STRESS(NGEN1),
1 PSTRAN(NGEN1),CSTRAN(NGEN1),VSTRAN(NGEN1),
2 CAUCHY(NGEN1),DT(NSTATS),GSV(NSTASS),STSRE(NGEN1),
3 STSIM(NGEN1),STNRE(NGEN1),STNIM(NGEN1),KCUS(2)
user coding
RETURN
END
where:

Required 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.
VSTRAN is the viscoelastic strain array.
CAUCHY is the Cauchy stress array.
ELEVEC 435
Output of Element Quantities in Harmonic Analysis

EPLAS is the equivalent plastic strain.


EQUIVC is the equivalent stress.
SWELL is the swelling strain.
KRTYP is the cracking type.
PRANG is the crack angle.
DT is the state variables array, temperature first.
GSV is the global state variable array.
NGENS is the number of generalized strains.
NGEN1 is the number of physical components.
NSTATS is the number of state variables.
NSTASS is the number of global state variables.
STSRE is the real harmonic stress.
STSIM is the imaginary harmonic stress.
STNRE is the real harmonic strain.
STNIN is the imaginary harmonic strain.
436 INTCRD
Output of Integration Point Coordinates

INTCRD Output of Integration Point Coordinates

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:

Required 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.
UBGINC 437
Beginning of Increment

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.

Note: No special flag is required in the input file.

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:

Required Input:
INC is the increment number.
INCSUB is the subincrement number.

An example of the use of the UBGINC user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 7.14.
438 UEDINC
End of Increment

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.

Note: No special flag is required in the input file.

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:

Required Input:
INC is the increment number.
INCSUB is the subincrement number.

An example of the use of the UEDINC user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 7.14.
UBGITR 439
Beginning of Iteration

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.

Note: No special flag is required in the input file.

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:

Required Input:
INC is the increment number.
INCSUB is the subincrement number.
NCYCLE is the iteration number (the first is labeled zero).
440 UBGPASS
Beginning of Pass in Coupled Analyses

UBGPASS Beginning of Pass in Coupled Analyses

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.

Note: No special flag is required in the input file.

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:

Required 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
UELOOP 441
Beginning of Element Loop

UELOOP Beginning of Element Loop

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.

Note: No special flag is required in the input file.

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:

Required
Input:
M is the users 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.
Chapter 8 Hydrodynamic Lubrication User Subroutines List
Marc Volume D: User Subroutines and Special Routines s

Hydrodynamic Lubrication
8 User Subroutines List

User Subroutine Page


UBEAR 445
UGROOV 446
URESTR 447
UTHICK 448
UVELOC 449
Chapter 8 Hydrodynamic Lubrication User Subroutine
Marc Volume D: User Subroutines and Special Routines

Hydrodynamic Lubrication
8 User Subroutines
444 Marc Volume D: User Subroutines and Special Routines

This chapter describes user subroutines that can be used to customize a hydrodynamic bearing analysis.
In such problems, the geometry can be complicated by grooves in the bearing surface or nonuniform
lubricant. The user subroutines provided here facilitate the input of this data. Table 8-1 summarizes these
user subroutines and indicates what parameters or model definition options are required to invoke the
user subroutine.

Table 8-1 Hydrodynamic Lubrication User Subroutines Requirements


User Required Parameters or
Subroutine Model Definition Options Purpose
UBEAR BEARING Define the orientation of the film surface.
UGROOV BEARING Define the groove depth.
URESTR BEARING Define the nonuniform restrictor coefficient and
RESTRICTOR pump pressures.
UTHICK BEARING Define the lubricant thickness.
NODAL THICKNESS
THICKNS CHANGE
UVELOC BEARING Define the nodal velocity of bearing surface.
VELOCITY
UBEAR 445
Input of Spatial Orientation of Lubricant Thickness

UBEAR Input of Spatial Orientation of Lubricant Thickness

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:

Required 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.

An example of the use of the UBEAR user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 7.16.
446 UGROOV
Input of Groove Depths

UGROOV Input of Groove Depths

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:

Required 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.

An example of the use of the UGROOV user subroutine can be found in Marc Volume E: Demonstration
Problems, problem 7.15.
URESTR 447
Input of Nonuniform Restrictor Coefficients

URESTR Input of Nonuniform Restrictor Coefficients

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:

Required 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).

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.
448 UTHICK (Hydrodynamic Lubrication)
Generation or Modification of Nodal Thickness or Thickness Change Field

UTHICK (Hydrodynamic Generation or Modification of Nodal Thickness or


Lubrication) Thickness Change Field

Description
In bearing analysis, the film height usually varies over the entire lubricant region. The UTHICK user
subroutine allows the user to define, or to redefine previously specified, nodal thicknesses. It is called for
each node in the mesh.
In addition, this user subroutine can be used to define thickness increments in incremental analysis or
within subincrements when evaluating damping and/or stiffness coefficients. In order to enable the
specification of thickness increments as function of previously calculated bearing properties, the user has
access to the latter quantities in this user subroutine.

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:

Required 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.
NBEARF is the maximum number of subincrements as given on the BEARING parameter.
INC is the increment number.
INCSUB is the subincrement number.
Required Output:
THICK is the lubricant thickness or incremental lubricant thickness magnitude to be specified for
this node.
UVELOC (Hydrodynamic Lubrication) 449
Generation or Modification of Nodal Velocity Vectors

UVELOC (Hydrodynamic Generation or Modification of Nodal Velocity Vectors


Lubrication)

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.

Note: No special flag is required in the input file.

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:

Required 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.
Chapter 9 Special Routines Marc Post File Processor List
Marc Volume D: User Subroutines and Special Routines s

Special Routines Marc Post


9 File Processor List

Special Routine
PLDUMP13/PLDUMP2000 453
Chapter 9 Special Routines Marc Post File Processor
Marc Volume D: User Subroutines and Special Routines

Special Routines User Marc


9 Post File Processor
452 Marc Volume D: User Subroutines and Special Routines

This chapter discusses a stand-alone program that provides examination of the postprocessing file created
by the POST option. This allows the user to perform additional calculations based upon results calculated
in Marc and to create a post file. These results can then be viewed with Marc Mentat or Patran.
PLDUMP13/PLDUMP2000 453
Marc Post File Processor

PLDUMP13/PLDUMP2000 Marc Post File Processor

PLDUMP13/PLDUMP2000 is a small utility program which can be used to access, analyze, convert, and
process Marc binary and formatted post files. PLDUMP13 should be used for post files with revision 13
or greater written by MSC.Marc 2005r3 and newer versions. The source is supplied at no additional
charge to Marc customers and is available on the Marc installation media. The user can modify this
source as necessary to suit his requirements.
When PLDUMP13/PLDUMP2000 is executed, the user is asked several questions, as follows (the
example answers given in italics show the conversion of 12 increments of a binary post file
jobname.t16 into a formatted post file newpost.t19):

1. Dump output file name: for example, post.txt.


The amount of data written into this file depends on the answer to question 2.
2. Write post data to output option: for example, p.
Valid responses are:
n or none do not write post file to output
p or partial write analysis control data to output
f or full write entire post file to output
3. Type of post file to read: for example, b.
Valid responses are:
b or binary to read a binary file
f or formatted to read a formatted file
4. Name of post file to read: for example, jobname.t16.
5. Type of post file to write: for example, f.
Valid responses are:
n or none do not write a new post file
b or binary write a new binary file
f or formatted write a new formatted file
6. New post file name: for example, newpost.t19.
7. User data processing option: for example, n.
Valid responses are:
n or no no user data processing; default pldump13/pldump2000/pldump is used
y or yes user data processing; only if the source of pldump13/pldump2000/pldump has
been modified by the user
8. Number of increments to process: for example, 12.
Processing stops if this number of increments has been processed. To process only
non-incremental data, enter a 0.
454 PLDUMP13/PLDUMP2000
Marc Post File Processor

Marc Post File Layout (Revision 9 or Higher): PLDUMP 2000


The revision 9 (or higher) post file is subdivided into blocks with each block having a unique number and
name. For each block, a description is given below, following the Fortran code of PLDUMP2000, both
for formatted and binary post files. First, the block number and name are given. Next, the way in which
the data is read is shown. Finally, the data read is explained.
The post file for revision 12 has seven new blocks:
53000 - Points
52100 - Curves
53200 - Surfaces
53300 - Attach Nodes
53400 - Attach Edges
53500 - Attach Faces
53600 - Boundary Conditions

BLOCK 501nn - analysis title


****************************

read(formatted,(a70)) blkbegin
read(formatted,(a70)) title(1:70)
read(formatted,( a5)) blkend

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

blkbegin = =beg=50100 (Analysis Title)


title = title of analysis
blkend = =end=

BLOCK 502nn - analysis verification data


****************************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) (lm(ijk),ijk=1,18)
read(formatted,(6i13)) (lm(ijk),ijk=19,30)
read(formatted,( a5)) blkend

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)
PLDUMP13/PLDUMP2000 455
Marc Post File Processor

write(blkbegin,(5a1)) blkend

blkbegin = =beg=50200 (Analysis Verification Data)


lm( 1) = number of post codes (npost )
lm( 2) = number of nodes (numnp )
lm( 3) = number of elements (numel )
lm( 4) = number of d.o.f. per node (ndeg ) not used
lm( 5) = number of int. points (nstres)
lm( 6) = number of nodal variables (inod ) not used
lm( 7) = post file type (ipstco) not used
lm( 8) = number of tyings from adaptive meshing (nadtie)
lm( 9) = number of coordinates per node (ncrd )
lm(10) = number of nodes per element (nnodmx)
lm(11) = analysis type (iantyp) not used
lm(12) = complex flag (icompl) not used
lm(13) = number of transformations (nbctra)
lm(14) = post file revision number (postrv) not used
lm(15) = number of distributed loads (ndistl)
lm(16) = number of sets (nset )
lm(17) = number of springs (nsprng)
lm(18) = number of contact bodies (ndie )
lm(19) = number of element sets (nesets) not used
lm(20) = number of node sets (nnsets) not used
lm(21) = number of int. point sets (nisets) not used
lm(22) = number of layer sets (nlsets) not used
lm(23) = number of d.o.f. sets (ndsets) not used
lm(24) = number of increment sets (ninset) not used
lm(25) = number of items in element sets (kelem ) not
used
lm(26) = number of items in nodes in sets (knode ) not
used
lm(27) = number of items in int. point sets (kint ) not
used
lm(28) = number of items in layer sets (klayr ) not used
lm(29) = number of items in d.o.f. sets (kdof ) not used
lm(30) = number of items in increment sets (kinc ) not
used
blkend = =end=

BLOCK 504nn - dummy


*******************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) idum
read(formatted,( a5)) blkend

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

blkbegin = =beg=50400 (Dummy)


456 PLDUMP13/PLDUMP2000
Marc Post File Processor

idum = dummy variable (=0)


blkend = =end=

BLOCK 505nn - domain decomposition information


***********************************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) nprocd,idomit
read(formatted,( a5)) blkend

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

blkbegin = =beg=50500 (Domain Decomposition Information)


nprocd = number of domains of total model
idomit = domain number of this post file
blkend = =end=

BLOCK 506nn - element variable postcodes


****************************************

if(npost.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,npost
read(formatted,(i13,a24)) ipost,cpost
enddo
read(formatted,( a5)) blkend

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

blkbegin = =beg=50600 (Element Variable Postcodes)


npost = number of element post variable (from BLOCK 502nn)
ipost = element post code (see manual Volume C model definition
option POST) + 1000 * layer number for post variable ijk
cpost = character string with name to be given to post variable
ijk
(see manual Volume C model definition option POST)
blkend = =end=
PLDUMP13/PLDUMP2000 457
Marc Post File Processor

BLOCK 507nn - element connectivities


************************************

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(formatted,( a5)) blkend

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

blkbegin = =beg=50700 (Element Connectivities)


numel = number of elements (from BLOCK 502nn)
nnodmx = number of nodes per element (from BLOCK 502nn)
ielid = user element number of element ijk
ityp = MARC element type of element ijk (see Volume B)
nnod = number of nodes of element ijk
iel(i) = user node number of i-th node of element ijk
blkend = =end=

BLOCK 508nn - nodal coordinates


*******************************

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(formatted,( a5)) blkend

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
458 PLDUMP13/PLDUMP2000
Marc Post File Processor

blkbegin = =beg=50800 (Nodal Coordinates)


numnp = number of nodes (from BLOCK 502nn)
ncrd = number of coordinates per node (from BLOCK 502nn)
inod = user node number of node ijk
xord(i) = i-th coordinate of node ijk
blkend = =end=

BLOCK 53000 - point data


************************

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

read (binary) (ibeg(ijk),ijk=1,70)


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

blkbegin = =beg=53000 (Points)


npoints = number of geometric points
ipnt = user point id of point ijk
xpnt(i,ijk)=i th coordinate of point ijk
blkend = =end=

BLOCK 53100 - curve data


************************

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)
PLDUMP13/PLDUMP2000 459
Marc Post File Processor

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

read (binary) (ibeg(ijk),ijk=1,70)


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
elseif(lct.eq.6) then
do itp=1,npu
read(binary) (xtrim(kk1),kk1=1,3),xiso,yiso
460 PLDUMP13/PLDUMP2000
Marc Post File Processor

enddo
endif
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=53100 (Curves)


ncurves = number of geometric curves
icurvinf(1)= user curve id of curve ijk
icurvinf(2)= curve type
-4 -NURB curve - referencing previously defined points
+4 -NURB curve - not referencing previously defined
points
-6 -Trimming curve on surface - referencing previously
defined
points
+6 -Trimming curve on surface - not referencing
previously
defined points
icurvinf(3)= number of points
icurvinf(4)= order of curve
icurvinf(5)= not used
icurvinf(6)= not used
xhomog = homogeneous coordinates of points on curve
xknot = knot vector of curve
jpnt = array of point ids
xpnt = coordinates of points on curve
xtrim = real coordinates of points on trimming curve
xiso,yiso = isoparametric coordinates of points on trimming curve
relative to
surface
itpid = point id of trimming point
blkend = =end=

BLOCK 53200 - surface data


**************************

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)
nnnn=npu*npv
read(formatted,(6e13.6)) (xhomog(ijl),ijl=1,nnnn)
PLDUMP13/PLDUMP2000 461
Marc Post File Processor

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

read (binary) (ibeg(ijk),ijk=1,70)


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
enddo
endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=53200 (Surfaces)


nsurfaces = number of geometric surfaces
isurfinf(1)= user surface id of surface ijk
isurfinf(2)= surface type
462 PLDUMP13/PLDUMP2000
Marc Post File Processor

-9 -NURB surface - referencing previously defined


points
+9 -NURB surface - not referencing previously defined
points
isurfinf(3)= number of points, 1st isoparametric direction
isurfinf(4)= order of curve, 1st isoparametric direction
isurfinf(5)= number of points, 2nd isoparametric direction
isurfinf(6)= order of curve, 2nd isoparametric direction
isurfinf(7)= number of trimming curves
xhomog = homogeneous coordinates of points on surface
xknot = knot vector of surface
jpnt = array of point ids
xpnt(i) = i th coordinate of point
jtrmcv = array of curve ids that are the trimming curves for
this surface
blkend = =end=

BLOCK 53300 - attach nodes


**************************

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

read (binary) (ibeg(ijk),ijk=1,70)


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

blkbegin = =beg=53300 (Attach Nodes)


natpts = number of nodes attached to points
jpoint(ijk)= point id for ijk th node
jnode(ijk) = node id for ith th node
blkend = =end=

BLOCK 53400 - attach edges


**************************

read(formatted,(a70)) blkbegin
read(formatted,(i13)) ncvwedat
PLDUMP13/PLDUMP2000 463
Marc Post File Processor

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

read (binary) (ibeg(ijk),ijk=1,70)


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

blkbegin = =beg=53400 (Attach Edges)


ncvwedat = number of curves with edges attached
icurvid = curve id
nedgat = number of edges attached to this curve
lelem = array of elements attached to the curve
ledge = array of edge ids corresponding to the element (Marc
convention)
blkend = =end=

BLOCK 53500 - attach faces


**************************

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

read (binary) (ibeg(ijk),ijk=1,70)


write(blkbegin,(70a1)) blkbegin
read(binary) nsfwfcat
if(nsfwfcat.ne.0) then
464 PLDUMP13/PLDUMP2000
Marc Post File Processor

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

blkbegin = =beg=53500 (Attach Faces)


nsfwfcat = number of surfaces with faces attached
isurfid = surface id
nfaceat = number of faces attached to this surface
lelem = array of elements attached to the surface
lface = array of face ids corresponding to the element (Marc
convention)
blkend = =end=

BLOCK 53600 - boundary conditions


*********************************

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)
enddo
enddo
endif
read(formatted,(a5)) blkend
PLDUMP13/PLDUMP2000 465
Marc Post File Processor

read (binary) (ibeg(ijk),ijk=1,70)


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)
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

blkbegin = =beg=53600 (Boundary Conditions)


nbcs = number of boundary conditions
ibcname = boundary condition name
ibcinfo = boundary condition information
ibcinfo(1) = boundary condition physics type
=1 mechanical displacements-pressure
=2 temperature temperature-fluxes
=3 magnetic voltage-current
=4 electrical potential-charge
=5 bearing pressure-mass flux
=6 fluid velocity - pressure
=7 acoustics pressure-source
ibcinfo(2) = boundary condition type
=1 fixed
=2 point
=3 distributed
=4 foundation
=5 initial displacement/temperature/pressure
=6 initial velocity or velocity for convection
=7 initial acceleration
466 PLDUMP13/PLDUMP2000
Marc Post File Processor

=8 initial density or relative density (powder)


=9 hold node
=10 rad-cavity or press-cavity
=11 initial stress - mechanical analysis only
=12 initial plastic strain - mechanical analysis only
=13 initial porosity -
=14 porosity
=15 initial pore pressure
=16 change pore pressure
=17 initial temperature - not heat transfer analysis
=18 point temperature - not heat transfer analysis
=19 initial state - not heat transfer analysis
=20 change state - not heat transfer analysis
=21 initial void ratio
=22 void ratio
=23 initial preconsolidation pressure
=24 weld flux (read in readbcweld.f)
ibcinfo(3) = active/inactive flag
ibcinfo(4) = user subroutine used
ibcinfo(5) = complex harmonic flag
= 0 - real values only
= 1 - real and imaginary values
= 2 - magnitude and phase
ibcinfo(6) = Fourier loading series term (currently always = 0)
ibcinfo(7) = Number of geometric types
ibcinfo(8) = Number of real data associated with boundary condition
ibcinfo(9) = Number of integer data associated with boundary
condition
rload = real data associated with boundary condition
itrload = table ids associated with real data
cload = imaginary or phase data associated with boundary
condition
itcload = table ids associated with imaginary or phase data
igid = geometry number
igtype = geometry type
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
12= element-face
13= elem mn-edge
14= elem mn-face
15= cavity
16= surface-edge
17= curve-face
18= surface mn-edge
19= curve mn-face
PLDUMP13/PLDUMP2000 467
Marc Post File Processor

kbcline = list of location where boundary condition is applied


blkend = =end=
BLOCK 509nn - spring data
*************************

if(nsprng.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,nsprng
read(formatted,(5i13)) (ispr(ijl,ijk),ijl=1,5)
enddo
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
do ijk=1,nsprng
read(binary) id,node1,idof1,node2,idof2
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

endif

blkbegin = =beg=50900 (Spring Data)


nsprng = number of springs (from BLOCK 502nn)
id = number of spring ijk
node1 = number of first node of spring ijk
idof1 = degree of freedom of node1 of spring ijk
node2 = number of second node of spring ijk
idof2 = degree of freedom of node2 of spring ijk
blkend = =end=

BLOCK 510nn - nodal codes and transformation id


***********************************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) (inoco(ijl),ijl=1,numnp)
read(formatted,( a5)) blkend

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

blkbegin = =beg=51000 (Nodal Codes and Transformation ID)


numnp = number of nodes (from BLOCK 502nn)
inoco(i) = nodal code for node i + 1000*transformation number for
node i
blkend = =end=

BLOCK 511nn - ties due to meshing


468 PLDUMP13/PLDUMP2000
Marc Post File Processor

*********************************

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(formatted,( a5)) blkend

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
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

endif

blkbegin = =beg=51100 (Ties due to Meshing)


nadtie = number of adaptive meshing tyings (from BLOCK 502nn)
ityp = type of adaptive meshing tying
91 : tie one node in between 2 other nodes
92 : tie one node in between 4 other nodes
iret = number of nodes involved in adaptive meshing tying
nodes(i) = node numbers involved in adaptive meshing tying
91 : nodes(1)=0.5 *(nodes(2)+nodes(3))
92 : nodes(1)=0.25*(nodes(2)+nodes(3)+nodes(4)+nodes(5))
blkend = =end=

BLOCK 512nn - transformation matrices


*************************************

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
read(formatted,( a5)) blkend

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

blkbegin = =beg=51200 (Transformation Matrices)


PLDUMP13/PLDUMP2000 469
Marc Post File Processor

nbctra = number of transformations (from BLOCK 502nn)


d(i,j) = transformation matrix for transformation number ijk
blkend = =end=

BLOCK 51300 - set definition


****************************

if(nset.gt.0.and postrv.le.10) then

read(formatted,(a70)) blkbegin
do ijk=1,nset
read(formatted,(a12)) 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.or.
* isett.eq.18.or.isett.eq.19)
* read(formatted,(6i13)) (nsettf(ijl),ijl=1,isetn)
endif
enddo
read(formatted,( a5)) blkend

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

blkbegin =
=beg=51300 (Set Definitions)
nset =
number of sets (from BLOCK 502nn)
setnam =
name of set ijk
isetn =
number of items in set ijk
isett =
type of set ijk
0 : element set
1 : node set
nsett(i) = element/node numbers of members of set ijk
blkend = =end=

BLOCK 51301 - set definition


****************************
470 PLDUMP13/PLDUMP2000
Marc Post File Processor

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
endif
enddo
read(formatted,( a5)) blkend

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

blkbegin =
=beg=51301 (Set Definitions)
nset =
number of sets
setnam =
name of set ijk
isetn =
number of items in set ijk
isett =
type of set ijk
0 : element set
1 : node set
12: edge set
13: face set
14: point set
15: curve set
16: surface set
17: cavity set
18: ordered surface set
19 ordered curve set
nsett(i) = element/node numbers of members of set ijk
neddt(i) = face/edge number if face/edge set of set ijk
blkend = =end=
PLDUMP13/PLDUMP2000 471
Marc Post File Processor

BLOCK 514nn - contact geometry data


***********************************

if(ndie.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,ndie
if(ipstk2.lt.8) then
read(formatted,(3i13)) ibody,itype,nitems
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
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
472 PLDUMP13/PLDUMP2000
Marc Post File Processor

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
endif
enddo
read(formatted,( a5)) blkend

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)
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
PLDUMP13/PLDUMP2000 473
Marc Post File Processor

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
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

endif

blkbegin = =beg=51400 (Contact Geometry Data)


ndie = number of contact bodies (from BLOCK 502nn)
ibody = number of body ijk
itype = type of body ijk
0 : deformable
1 : 2d line elements (type 9)
2 : 3d patch elements (type 18)
3 : 2d curves
4 : 3d surfaces
nitems = number of entities in body ijk
istruc = physical meaning of body ijk
1 : rigid
2 : deformable structural
3 : symmetry
4 : deformable heat-rigid
5 : workpiece (Autoforge only)
6 : deformable acoustic
474 PLDUMP13/PLDUMP2000
Marc Post File Processor

bdnam = name of body ijk


pos(i) = position of center of body ijk
rot(i) = rotation vector for body ijk
nelem = number of elements in deformable body ijk
ielem(i) = user element numbers of deformable body ijk
npatch = number of patches in body ijk entity ijl
npoint = number of points in body ijk entity ijl
ipatn = patch number
ipatt = patch type (9=line,18=surface)
ip1 = first node of patch
ip2 = second node of patch
ip3 = third node of patch
ip4 = fourth node of patch
ipoint = point number
xp,yp,zp = x-, y- and z-coordinates of point
nurbid = identifier of NURBS
kpt = number of points for NURBS curve
kor = order of NURBS curve
nptu = number of points in u-direction for NURBS surface
nptv = number of points in v-direction for NURBS surface
noru = order of NURBS surface in u-direction
norv = order of NURBS surface in v-direction
itrim = number of trimming curves of NURBS surface
homo(i) = homogeneous coordinates
xnot(i) = knot vectors
itriid = identifier of trimming curve of NURBS surface
blkend = =end=

BLOCK 515nn - flow line data


****************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13))
numcrgr,numndgr,ngrid,idum4,idum5,idum6
do ijk=1,ngrid
if(numcrgr.eq.2) read(formatted,(6i13)) (lm(ijm),ijm=1,6)
if(numcrgr.eq.3) read(formatted,(6i13)) (lm(ijm),ijm=1,10)
enddo
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
read(binary) numcrgr,numndgr,ngrid,idum4,idum5,idum6
do ijk=1,ngrid
if(numcrgr.eq.2) read(binary) (lm(ijm),ijm=1,6)
if(numcrgr.eq.3) read(binary) (lm(ijm),ijm=1,10)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=51500 (Flow Line Data)


numcrgr = dimension of grid
2 : 2d grid (quad "elements")
3 : 3d grid (brick "elements")
PLDUMP13/PLDUMP2000 475
Marc Post File Processor

numndgr = number of "nodes" in grid


ngrid = number of "elements" in grid
lm(1) = "element" number
lm(2) = "element" type
lm(3-6) = "node" numbers of quad "element"
lm(3-10) = "node" numbers of brick "element"
blkend = =end=
BLOCK xxxxx - begin increment/end of analysis indicator
*******************************************************

read(formatted,(a4)) csee

read(binary) isee
write(csee,(a4)) isee

csee = indicator
**** begin of incremental data
++++ end of analysis

BLOCK 516nn - loadcase title


****************************

read(formatted,(a70)) blkbegin
read(formatted,(a70)) title(1:70)
read(formatted,( a5)) blkend

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

blkbegin = =beg=51600 (Loadcase Title)


title = title of loadcase
blkend = =end=

BLOCK 517nn - integer increment verification data


*************************************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) (lm(ijk),ijk=1,12)
read(formatted,( a5)) blkend

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

blkbegin = =beg=51701 (Integer Increment Verification Data)


lm( 1) = remeshing flag (newmo)
476 PLDUMP13/PLDUMP2000
Marc Post File Processor

0 : same mesh as before


1 : new mesh
lm( 2) = increment number (inc)
lm( 3) = sub-increment number (incsub)
lm( 4) = analysis type (jantyp)
> 100 element variables are written for this increment
lm( 5) = number of nodal variables (knod)
lm( 6) = number of design variables (ndsvar)
lm( 7) = normal/harmonic/modal/buckle flag (ihresp)
0 : normal
1 : modal result
2 : buckle result
3 : real harmonic result
4 : complex harmonic result
lm( 8) = number of recycles for this increment
lm( 9) = total number of separation recycles
lm(10) = total number of cutbacks
lm(11) = total number of increment splittings
lm(12) = not used
blkend = =end=

BLOCK 51800 - real increment verification data


**********************************************

If post file revision number is 9 (MARC 2000)

read(formatted,(a70)) blkbegin
read(formatted,(6e13.6)) (xlm(ijk),ijk=1,6)
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
read(binary) (xlm(ijk),ijk=1,6)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=51800 (Real Increment Verification Data)


xlm( 1) = transient time (time)
xlm( 2) =
modal result : frequency (freq)
harmonic result : frequency (freq)
buckle result : buckle factor (fact)
xlm( 3) =
modal result : generalized mass (gmas)
xlm( 4) =
jantyp = 60 sensitivity check (respon)
jantyp = 61 objective function (objec )
xlm( 5) =
jantyp = 60 limiting value (rsplim)
jantyp = 61 critical constraint (conval)
xlm( 6) = not used
blkend = =end=
PLDUMP13/PLDUMP2000 477
Marc Post File Processor

BLOCK 51801 - real increment verification data


**********************************************

If post file revision number > 10 (MARC 2001 and later)

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) nw
read(formatted,(6e13.6)) (xlm(ijk),ijk=1,nw)
read(formatted,( a5)) blkend

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

blkbegin = =beg=51801 (Real Increment Verification Data)


xlm( 1) = transient time (time)
xlm( 2) =
modal result : frequency (freq)
harmonic result : frequency (freq)
buckle result : buckle factor (fact)
xlm( 3) =
modal result : generalized mass (gmas)
xlm( 4) =
jantyp = 60 sensitivity check (respon)
jantyp = 61 objective function (objec )
xlm( 5) =
jantyp = 60 limiting value (rsplim)
jantyp = 61 critical constraint (conval)
xlm( 6) = not used
xlm( 7) = total volume
xlm( 8) = total mass
xlm( 9) = total strain energy
xlm(10) = total plastic strain energy
xlm(11) = total creep strain energy
xlm(12) = total Kinetic energy
xlm(13) = total damping energy
xlm(14) = total work done by contact/external forces
xlm(15) = total thermal energy
xlm(16) = total elastic strain energy
xlm(17) = total work done by contact forces
xlm(18) = total work done by friction forces
xlm(19) = total work done by springs
xlm(20) = total work done by foundations
xlm(21) = total work done by applied-force/disp
xlm(22) = not used
xlm(23) = not used
xlm(24) = not used
blkend = =end=

Note: nw = 18
BLOCK 519nn - new model
478 PLDUMP13/PLDUMP2000
Marc Post File Processor

***********************

if(newmo.ne.0) then

repeat BLOCK 502nn upto and including BLOCK 514nn

endif

newmo = remeshing flag (see BLOCK 517nn)

BLOCK 520nn - magnitude of distributed loads


********************************************

if(ndistl.gt.0) then

read(formatted,(a70)) blkbegin
read(formatted,(6e13.6)) (dist(ijk),ijk=1,ndistl)
read(formatted,( a5)) blkend

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

blkbegin = =beg=52000 (Magnitude of Distributed Loads)


ndistl = number of dist loads (see BLOCK 502nn)
dist(i) = magnitude of dist load i
blkend = =end=

BLOCK 521nn - magnitude of spring forces


****************************************

if(nsprng.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,nsprng
read(formatted,(6e13.6)) force1,force2
enddo
read(formatted,( a5)) blkend

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
PLDUMP13/PLDUMP2000 479
Marc Post File Processor

blkbegin = =beg=52100 (Magnitude of Spring Forces)


nsprng = number of springs (see BLOCK 502nn)
force1 = real force of spring ijk
force2 = imaginary force of spring ijk
only non-zero for complex analysis (see BLOCK 517nn)
blkend = =end=

BLOCK 522nn - contact body results


**********************************

if(ndie.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,ndie
read(formatted,(6e13.6)) (ddat(ijk),ijk=1,36)
enddo
read(formatted,( a5)) blkend

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

blkbegin = =beg=52200 (Contact Body Results)


ddat( 1) - ddat( 3) =
x-, y-, z- position of center of body ijk
ddat( 4) = not used
ddat( 5) = not used
ddat( 6) = total angle rotated for body ijk
ddat( 7) - ddat( 9) =
x-, y-, z- velocity of center of body ijk
ddat(10) = not used
ddat(11) = not used
ddat(12) = angular velocity of body ijk
ddat(13) - ddat(15) =
x-, y-, z- force of body ijk
ddat(16) - ddat(18) =
moment around x-, y-, z- axis of body ijk
ddat(19) - ddat(34) =
4x4 rotation/translation matrix to transform
original position of body ijk to current position
ddat(35) = not used
ddat(36) = not used
blkend = =end=

BLOCK 523nn - element integration point values


480 PLDUMP13/PLDUMP2000
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(formatted,( a5)) blkend

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

blkbegin =
=beg=52300 (Element Integration Point Values)
npost =
number of post codes (see BLOCK 502nn)
numel =
number of elements (see BLOCK 502nn)
jantyp =
analysis type (see BLOCK 517nn)
nstres =
number of integration points per element
(see BLOCK 502nn)
elvar(i) = values of post codes for element ijk, integration
point ijl
blkend = =end=

BLOCK 524nn - nodal results


***************************

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
PLDUMP13/PLDUMP2000 481
Marc Post File Processor

read(formatted,( a5)) blkend

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

blkbegin = =beg=52400 (Nodal Results)


jantyp = analysis type (see BLOCK 517nn)
knod = number of nodal variables (see BLOCK 517nn)
numnp = number of nodes (from BLOCK 502nn)
nnqnod = number of nodal vectors on post file
nnvnod = total number of nodal quantities on post file
cnam = name of nodal vector ijk
ivec( 1) = quantity identifier for vector ijk (see Table below)
ivec( 2) =
ivec( 3) =
ivec( 4) = number of components per node in vector ijk
ivec( 5) =
ivec( 6) = normal/modal/buckle/harmonic flag ijk
0 : normal
1 : modal
2 : buckle
3 : real harmonic
4 : complex harmonic (real + imaginary)
5 : complex harmonic (magnitude + phase)
ivec( 7) = number of nodes flag for vector ijk
-1 : values for all nodes given
0 : all values zero, no values given
ivec( 8) = not used
ivec( 9) = not used
ivec(10) = not used
ivec(11) = not used
ivec(11) = not used
vecr(i) = real values for vector ijk (or magnitude)
veci(i) = imaginary values for vector ijk (or phase)
blkend = =end=

Description of quantity identifiers of nodal vectors:


482 PLDUMP13/PLDUMP2000
Marc Post File Processor

1 = Displacement
2 = Rotation
3 = External Force
4 = External Moment
5 = Reaction Force
6 = Reaction Moment
7 = Fluid Velocity
8 = Fluid Pressure
9 = External Fluid Force
10 = Reaction Fluid Force
11 = Sound Pressure
12 = External Sound Source
13 = Reaction Sound Source
14 = Temperature
15 = External Heat Flux
16 = Reaction Heat Flux
17 = Electric Potential
18 = External Electric Charge
19 = Reaction Electric Charge
20 = Magnetic Potential
21 = External Electric Current
22 = Reaction Electric Current
23 = Pore Pressure
24 = External Mass Flux
25 = Reaction Mass Flux
26 = Bearing Pressure
27 = Bearing Force
28 = Velocity
29 = Rotational Velocity
30 = Acceleration
31 = Rotational Acceleration
32 = Modal Mass
33 = Rotational Modal Mass
34 = Contact Normal Stress
35 = Contact Normal Force
36 = Contact Friction Stress
37 = Contact Friction Force
38 = Contact Status
39 = Contact Touched Body
40 = Herrmann Variable

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccc

BLOCK 25 - response gradients


*****************************

if(jantyp.eq.60) then

read(formatted,(a70)) blkbegin
read(formatted,(6e13.6)) (respon(ijk),ijk=1,ndsvar)
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
PLDUMP13/PLDUMP2000 483
Marc Post File Processor

write(blkbegin,(70a1)) blkbegin
read(binary) (respon(ijk),ijk=1,ndsvar)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

endif

blkbegin = =beg=52500 (Response Gradients)


jantyp = analysis type (see BLOCK 517nn)
ndsvar = number of design variables (see BLOCK 517nn)
respon(i)= response gradient for design variable i
blkend = =end=

BLOCK 526nn - element contribution to response


**********************************************

if(jantyp.eq.60) then

read(formatted,(a70)) blkbegin
read(formatted,(6e13.6)) (elcon(ijk),ijk=1,numel)
read(formatted,( a5)) blkend

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

blkbegin = =beg=52600 (Element Contribution to the Response)


jantyp = analysis type (see BLOCK 517nn)
numel = number of elements (from BLOCK 502nn)
elcon(i) = contribution of element i to the response
blkend = =end=

BLOCK 527nn - design variable values


************************************

if(jantyp.eq.61) then

read(formatted,(a70)) blkbegin
read(formatted,(6e13.6)) (desvar(ijk),ijk=1,ndsvar)
read(formatted,( a5)) blkend

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
484 PLDUMP13/PLDUMP2000
Marc Post File Processor

blkbegin = =beg=52700 (Design Variable Values)


jantyp = analysis type (see BLOCK 517nn)
ndsvar = number of design variables (see BLOCK 517nn)
desvar(i)= value of design variable i
blkend = =end=

BLOCK 528nn - flow line updates


********************************

if(numndgr.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,numndgr
if(numcrgr.eq.2) read(formatted,(i13,2e13.6)) inod,yp,yp
if(numcrgr.eq.3) read(formatted,(i13,3e13.6)) inod,yp,yp,zp
enddo
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
do ijk=1,numndgr
if(numcrgr.eq.2) read(binary) inod,yp,yp
if(numcrgr.eq.3) read(binary) inod,yp,yp,zp
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

endif

blkbegin = =beg=52800 (Flow Line Updates)


numndgr = number of "nodes" in grid (see BLOCK 515nn)
numcrgr = dimension of grid (see BLOCK 515nn)
inod = id of grid "node" ijk
xp,yp,zp = x-, y-, z- coordinate of grid "node" ijk
blkend = =end=

BLOCK 529nn - global variables


********************************

if(postrv.ge.11) then

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(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
PLDUMP13/PLDUMP2000 485
Marc Post File Processor

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

blkbegin = =beg=52900 (Flow Line Updates)


inumv = number of items in this block
inumt = total number of global variables in this block
globname = global variable name for this item
ityp = global variable type:
1=Cavity Pressure
2=Cavity volume
3=Global State Variable
4=Cavity Mass
5=Cavity Temperature
6=Throat Coordinate
7=Loadcase percentage complete
id2 = 0 (for the time being)
inum = id for this global variable, e.g. cavity number
nnum = 1 (number of variables in this item)
id5 = 0 (for the time being)
id6 = 0 (for future use)
xlm = value of the global variables defined in this item
blkend = =end=

BLOCK yyyyy - end increment indicator


*************************************

read(formatted,(a4)) csee

read(binary) isee
write(csee,(a4)) isee

csee = indicator
---- end of incremental data

Marc Post File Layout (Revision 13 or Higher): PLDUMP13


The post file is subdivided into blocks with each block having a unique number and name. For each
block, a description is given below, following the Fortran code of PLDUMP13, both for formatted and
binary post files. First, the block number and name are given. Next, the way in which the data is read is
shown. Finally, the data read is explained.
The post file for revision 13 has one new block:
53800 - Element Groups
486 PLDUMP13/PLDUMP2000
Marc Post File Processor

BLOCK 501nn - analysis title


****************************

read(formatted,(a70)) blkbegin
read(formatted,(a70)) title(1:70)
read(formatted,( a5)) blkend

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

blkbegin = =beg=50100 (Analysis Title)


title = title of analysis
blkend = =end=

BLOCK 502nn - analysis verification data


****************************************

read(formatted,'(a70)') blkbegin
read(formatted,'(6i13)') (lm(ijk),ijk=1,6)
read(formatted,'( a5)') blkend

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

blkbegin = =beg=50201 (Analysis Verification Data)


lm(1) = post file revision number (postrv)
lm(2) = number of nodes in the model (numnp )
lm(3) = number of elements in the model (numel )
lm(4) = maximum number of nodes per element (nnodmx)
lm(5) = not used
lm(6) = not used
blkend = =end=

BLOCK 505nn - domain decomposition information


***********************************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) nprocd,idomit
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
read(binary) nprocd,idomit
PLDUMP13/PLDUMP2000 487
Marc Post File Processor

read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=50500 (Domain Decomposition Information)


nprocd = number of domains of total model
idomit = domain number of this post file
blkend = =end=

BLOCK 506nn - element variable postcodes


****************************************

read(formatted,(a70)) blkbegin
read(formatted,(2i13)) npost
do ijk=1,npost
read(formatted,(i13,a48)) ipost,cpost
enddo
read(formatted,( a5)) blkend

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

blkbegin = =beg=50601 (Element Variable Postcodes)


npost = number of element post variables
ipost = element post code (see manual Volume C model definition
option POST) + 1000 * layer number for post variable ijk
cpost = character string with name to be given to post variable
ijk
(see manual Volume C model definition option POST)
blkend = =end=

BLOCK 538nn - element type data


*******************************

read(formatted,'(a70)') blkbegin
read(formatted,'(i13)') neltyp
do j=1,neltyp
read(formatted,'(6i13)') (lm(i),i=1,8)
read(formatted,'(2i13)') npvars(j),nintps(j)
read(formatted,'(6i13)') (ints(i),i=1, npvars(j))
ityps(lm(1))=j
enddo
read(formatted,'( a5)') blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,'(70a1)') blkbegin
read(binary) neltyp
488 PLDUMP13/PLDUMP2000
Marc Post File Processor

do j=1,neltyp
read(binary) (lm(i),i=1,8)
read(binary) npvars(j),nintps(j)
read(binary) (ints(i),i=1, npvars(j))
ityps(lm(1))=j
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,'(5a1)') blkend

blkbegin = =beg=53800 (Element Type Data)


neltyp = number of element types
lm(1) = MARC element type
lm(2) = number of nodes per element
lm(3) = number of integration points per element
lm(4) = number of direct stress components
lm(5) = number of shear stress components
lm(6) = element class
lm(7) = toplogical class
lm(8) = heat transfer element
npvars(j)= number of valid post codes for element type j
nintps(j)= number of integration points in post file
ints(*) = index of valid post codes for element type j
(see block 50601)
ityps(*) = array to convert MARC element type to sequence number
blkend = =end=

BLOCK 507nn - element connectivities


************************************

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(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
read(binary) numelp,nnodmx
do j=1,numelp
read(binary) ielid,ityp,nnod,(iel(ijl),ijl=1,nnodmx)
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=50701 (Element Connectivities)


numelp = number of elements in this block
nnodmx = number of nodes per element
ielid = user element number of element j
ityp = MARC element type of element j (see Volume B)
nnod = number of nodes of element j
iel(i) = user node number of i-th node of element j
PLDUMP13/PLDUMP2000 489
Marc Post File Processor

jetyp(j) = element type index for element j


blkend = =end=

BLOCK 508nn - nodal coordinates


*******************************

read(formatted,(a70)) blkbegin
read(formatted,(2i13)) numnp, ncrd
do ijk=1,numnp
read(formatted,(i13,5e13.6,/,6e13.6))
inod(ijk),(xord(ijl,ijk),ijl=1,ncrd)
enddo
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
read(binary) numnp, ncrd
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

blkbegin = =beg=50801 (Nodal Coordinates)


numnp = number of nodes in this block.
ncrd = number of coordinates per node
inod = user node number of node ijk
xord(i) = i-th coordinate of node ijk
blkend = =end=

BLOCK 53000 - point data


************************

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

read (binary) (ibeg(ijk),ijk=1,70)


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)
490 PLDUMP13/PLDUMP2000
Marc Post File Processor

write(blkbegin,(5a1)) blkend

blkbegin = =beg=53000 (Points)


npoints = number of geometric points
ipnt = user point id of point ijk
xpnt(i,ijk)=i th coordinate of point ijk
blkend = =end=

BLOCK 53100 - curve data


************************

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
read(formatted,(5e13.6)) (xtrim(kk1),kk1=1,3),xiso,yiso
enddo
endif
enddo
endif
read(formatted,(a5)) blkend

read (binary) (ibeg(ijk),ijk=1,70)


write(blkbegin,(70a1)) blkbegin
read(binary) ncurves
if(ncurves.ne.0) then
do ijk=1,ncurves
read(binary) (icurvinf(ijl),ijl=1,6)
PLDUMP13/PLDUMP2000 491
Marc Post File Processor

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
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

blkbegin = =beg=53100 (Curves)


ncurves = number of geometric curves
icurvinf(1)= user curve id of curve ijk
icurvinf(2)= curve type
-4 -NURB curve - referencing previously defined points
+4 -NURB curve - not referencing previously defined
points
-6 -Trimming curve on surface - referencing previously
defined points
+6 -Trimming curve on surface - not referencing
previously
defined points
icurvinf(3)= number of points
icurvinf(4)= order of curve
icurvinf(5)= not used
icurvinf(6)= not used
xhomog = homogeneous coordinates of points on curve
xknot = knot vector of curve
jpnt = array of point ids
xpnt = coordinates of points on curve
xtrim = real coordinates of points on trimming curve
xiso,yiso = isoparametric coordinates of points on trimming curve
relative to
surface
itpid = point id of trimming point
492 PLDUMP13/PLDUMP2000
Marc Post File Processor

blkend = =end=

BLOCK 53200 - surface data


**************************

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)
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

read (binary) (ibeg(ijk),ijk=1,70)


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
PLDUMP13/PLDUMP2000 493
Marc Post File Processor

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

blkbegin = =beg=53200 (Surfaces)


nsurfaces = number of geometric surfaces
isurfinf(1)= user surface id of surface ijk
isurfinf(2)= surface type
-9 -NURB surface - referencing previously defined
points
+9 -NURB surface - not referencing previously defined
points
isurfinf(3)= number of points, 1st isoparametric direction
isurfinf(4)= order of curve, 1st isoparametric direction
isurfinf(5)= number of points, 2nd isoparametric direction
isurfinf(6)= order of curve, 2nd isoparametric direction
isurfinf(7)= number of trimming curves
xhomog = homogeneous coordinates of points on surface
xknot = knot vector of surface
jpnt = array of point ids
xpnt(i) = i th coordinate of point
jtrmcv = array of curve ids that are the trimming curves for
this surface
blkend = =end=

BLOCK 53300 - attach nodes


**************************

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

read (binary) (ibeg(ijk),ijk=1,70)


write(blkbegin,(70a1)) blkbegin
494 PLDUMP13/PLDUMP2000
Marc Post File Processor

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

blkbegin = =beg=53300 (Attach Nodes)


natpts = number of nodes attached to points
jpoint(ijk)= point id for ijk th node
jnode(ijk) = node id for ith th node
blkend = =end=

BLOCK 53400 - attach edges


**************************

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

read (binary) (ibeg(ijk),ijk=1,70)


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

blkbegin = =beg=53400 (Attach Edges)


ncvwedat = number of curves with edges attached
icurvid = curve id
nedgat = number of edges attached to this curve
lelem = array of elements attached to the curve
ledge = array of edge ids corresponding to the element (Marc
convention)
blkend = =end=
PLDUMP13/PLDUMP2000 495
Marc Post File Processor

BLOCK 53500 - attach faces


**************************

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

read (binary) (ibeg(ijk),ijk=1,70)


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

blkbegin = =beg=53500 (Attach Faces)


nsfwfcat = number of surfaces with faces attached
isurfid = surface id
nfaceat = number of faces attached to this surface
lelem = array of elements attached to the surface
lface = array of face ids corresponding to the element (Marc
convention)
blkend = =end=

BLOCK 53600 - boundary conditions


*********************************

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)
496 PLDUMP13/PLDUMP2000
Marc Post File Processor

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)
enddo
enddo
endif
read(formatted,(a5)) blkend

read (binary) (ibeg(ijk),ijk=1,70)


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)
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
PLDUMP13/PLDUMP2000 497
Marc Post File Processor

blkbegin = =beg=53600 (Boundary Conditions)


nbcs = number of boundary conditions
ibcname = boundary condition name
ibcinfo = boundary condition information
ibcinfo(1) = boundary condition physics type
=1 mechanical displacements-pressure
=2 temperature temperature-fluxes
=3 magnetic voltage-current
=4 electrical potential-charge
=5 bearing pressure-mass flux
=6 fluid velocity - pressure
=7 acoustics pressure-source
ibcinfo(2) = boundary condition type
=1 fixed
=2 point
=3 distributed
=4 foundation
=5 initial displacement/temperature/pressure
=6 initial velocity or velocity for convection
=7 initial acceleration
=8 initial density or relative density (powder)
=9 hold node
=10 rad-cavity or press-cavity
=11 initial stress - mechanical analysis only
=12 initial plastic strain - mechanical analysis only
=13 initial porosity -
=14 porosity
=15 initial pore pressure
=16 change pore pressure
=17 initial temperature - not heat transfer analysis
=18 point temperature - not heat transfer analysis
=19 initial state - not heat transfer analysis
=20 change state - not heat transfer analysis
=21 initial void ratio
=22 void ratio
=23 initial preconsolidation pressure
=24 weld flux (read in readbcweld.f)
ibcinfo(3) = active/inactive flag
ibcinfo(4) = user subroutine used
ibcinfo(5) = complex harmonic flag
= 0 - real values only
= 1 - real and imaginary values
= 2 - magnitude and phase
ibcinfo(6) = Fourier loading series term (currently always = 0)
ibcinfo(7) = Number of geometric types
ibcinfo(8) = Number of real data associated with boundary condition
ibcinfo(9) = Number of integer data associated with boundary
condition
rload = real data associated with boundary condition
itrload = table ids associated with real data
cload = imaginary or phase data associated with boundary
condition
itcload = table ids associated with imaginary or phase data
igid = geometry number
498 PLDUMP13/PLDUMP2000
Marc Post File Processor

igtype = geometry type


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
12= element-face
13= elem mn-edge
14= elem mn-face
15= cavity
16= surface-edge
17= curve-face
18= surface mn-edge
19= curve mn-face
kbcline = list of location where boundary condition is applied
blkend = =end=

BLOCK 509nn - spring data


*************************

read(formatted,(a70)) blkbegin
read(formatted,(i13)) nsprng
do ijk=1,nsprng
read(formatted,(5i13)) (ispr(ijl,ijk),ijl=1,5)
enddo
read(formatted,( a5)) blkend

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

blkbegin = =beg=50900 (Spring Data)


nsprng = number of springs
id = number of spring ijk
node1 = number of first node of spring ijk
idof1 = degree of freedom of node1 of spring ijk
node2 = number of second node of spring ijk
idof2 = degree of freedom of node2 of spring ijk
blkend = =end=

BLOCK 510nn - nodal codes and transformation id


PLDUMP13/PLDUMP2000 499
Marc Post File Processor

***********************************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) (inoco(ijl),ijl=1,numnp)
read(formatted,( a5)) blkend

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

blkbegin = =beg=51000 (Nodal Codes and Transformation ID)


numnp = number of nodes (from BLOCK 508nn)
inoco(i) = nodal code for node i + 1000*transformation number for
node i
blkend = =end=

BLOCK 511nn - ties due to meshing


*********************************

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(formatted,( a5)) blkend

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

blkbegin = =beg=51101 (Ties due to Meshing)


nadtie = number of adaptive meshing tyings
ityp = type of adaptive meshing tying
91 : tie one node in between 2 other nodes
92 : tie one node in between 4 other nodes
iret = number of nodes involved in adaptive meshing tying
nodes(i) = node numbers involved in adaptive meshing tying
91 : nodes(1)=0.5 *(nodes(2)+nodes(3))
92 : nodes(1)=0.25*(nodes(2)+nodes(3)+nodes(4)+nodes(5))
blkend = =end=

BLOCK 512nn - transformation matrices


*************************************
500 PLDUMP13/PLDUMP2000
Marc Post File Processor

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(formatted,( a5)) blkend

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
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=51201 (Transformation Matrices)


nbctra = number of transformations
d(i,j) = transformation matrix for transformation number ijk
blkend = =end=

BLOCK 513nn - set definition


****************************

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
read(formatted,( a5)) blkend

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
PLDUMP13/PLDUMP2000 501
Marc Post File Processor

read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin =
=beg=51301 (Set Definitions)
nset =
number of sets
setnam =
name of set ijk
isetn =
number of items in set ijk
isett =
type of set ijk
0 : element set
1 : node set
12: edge set
13: face set
14: point set
15: curve set
16: surface set
17: cavity set
18: ordered surface set
19 ordered curve set
nsett(i) = element/node numbers of members of set ijk
neddt(i) = face/edge number if face/edge set of set ijk
blkend = =end=

BLOCK 514nn - contact geometry data


***********************************

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
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
502 PLDUMP13/PLDUMP2000
Marc Post File Processor

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
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(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
read(binary) ndie
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
PLDUMP13/PLDUMP2000 503
Marc Post File Processor

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
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
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=51401 (Contact Geometry Data)


ndie = number of contact bodies
ibody = number of body ijk
itype = type of body ijk
0 : deformable
1 : 2d line elements (type 9)
2 : 3d patch elements (type 18)
3 : 2d curves
4 : 3d surfaces
504 PLDUMP13/PLDUMP2000
Marc Post File Processor

nitems = number of entities in body ijk


istruc = physical meaning of body ijk
1 : rigid
2 : deformable structural
3 : symmetry
4 : deformable heat-rigid
5 : workpiece (Autoforge only)
6 : deformable acoustic
bdnam = name of body ijk
pos(i) = position of center of body ijk
rot(i) = rotation vector for body ijk
nelem = number of elements in deformable body ijk
ielem(i) = user element numbers of deformable body ijk
npatch = number of patches in body ijk entity ijl
npoint = number of points in body ijk entity ijl
ipatn = patch number
ipatt = patch type (9=line,18=surface)
ip1 = first node of patch
ip2 = second node of patch
ip3 = third node of patch
ip4 = fourth node of patch
ipoint = point number
xp,yp,zp = x-, y- and z-coordinates of point
nurbid = identifier of NURBS
kpt = number of points for NURBS curve
kor = order of NURBS curve
nptu = number of points in u-direction for NURBS surface
nptv = number of points in v-direction for NURBS surface
noru = order of NURBS surface in u-direction
norv = order of NURBS surface in v-direction
itrim = number of trimming curves of NURBS surface
homo(i) = homogeneous coordinates
xnot(i) = knot vectors
itriid = identifier of trimming curve of NURBS surface
blkend = =end=

BLOCK 515nn - flow line data


****************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13))
numcrgr,numndgr,ngrid,idum4,idum5,idum6
do ijk=1,ngrid
if(numcrgr.eq.2) read(formatted,(6i13)) (lm(ijm),ijm=1,6)
if(numcrgr.eq.3) read(formatted,(6i13)) (lm(ijm),ijm=1,10)
enddo
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
read(binary) numcrgr,numndgr,ngrid,idum4,idum5,idum6
do ijk=1,ngrid
if(numcrgr.eq.2) read(binary) (lm(ijm),ijm=1,6)
if(numcrgr.eq.3) read(binary) (lm(ijm),ijm=1,10)
PLDUMP13/PLDUMP2000 505
Marc Post File Processor

enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=51500 (Flow Line Data)


numcrgr = dimension of grid
2 : 2d grid (quad "elements")
3 : 3d grid (brick "elements")
numndgr = number of "nodes" in grid
ngrid = number of "elements" in grid
lm(1) = "element" number
lm(2) = "element" type
lm(3-6) = "node" numbers of quad "element"
lm(3-10) = "node" numbers of brick "element"
blkend = =end=

BLOCK xxxxx - begin increment/end of analysis indicator


*******************************************************

read(formatted,(a4)) csee

read(binary) isee
write(csee,(a4)) isee

csee = indicator
**** begin of incremental data
++++ end of analysis

BLOCK 516nn - loadcase title


****************************

read(formatted,(a70)) blkbegin
read(formatted,(a70)) title(1:70)
read(formatted,( a5)) blkend

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

blkbegin = =beg=51600 (Loadcase Title)


title = title of loadcase
blkend = =end=

BLOCK 517nn - integer increment verification data


*************************************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) (lm(ijk),ijk=1,12)
506 PLDUMP13/PLDUMP2000
Marc Post File Processor

read(formatted,( a5)) blkend

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

blkbegin = =beg=51701 (Integer Increment Verification Data)


lm( 1) = remeshing flag (newmo)
0 : same mesh as before
1 : new mesh
lm( 2) = increment number (inc)
lm( 3) = sub-increment number (incsub)
lm( 4) = analysis type (jantyp)
> 100 element variables are written for this increment
lm( 5) = number of nodal variables (knod)
lm( 6) = number of design variables (ndsvar)
lm( 7) = normal/harmonic/modal/buckle flag (ihresp)
0 : normal
1 : modal result
2 : buckle result
3 : real harmonic result
4 : complex harmonic result
lm( 8) = number of recycles for this increment
lm( 9) = total number of separation recycles
lm(10) = total number of cutbacks
lm(11) = total number of increment splittings
lm(12) = not used
blkend = =end=

BLOCK 518nn - real increment verification data


**********************************************

read(formatted,(a70)) blkbegin
read(formatted,(6i13)) nw
read(formatted,(6e13.6)) (xlm(ijk),ijk=1,nw)
read(formatted,( a5)) blkend

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

blkbegin = =beg=51801 (Real Increment Verification Data)


xlm( 1) = transient time (time)
xlm( 2) =
modal result : frequency (freq)
harmonic result : frequency (freq)
buckle result : buckle factor (fact)
xlm( 3) =
PLDUMP13/PLDUMP2000 507
Marc Post File Processor

modal result : generalized mass (gmas)


xlm( 4) =
jantyp = 60 sensitivity check (respon)
jantyp = 61 objective function (objec )
xlm( 5) =
jantyp = 60 limiting value (rsplim)
jantyp = 61 critical constraint (conval)
xlm( 6) = not used
xlm( 7) = total volume
xlm( 8) = total mass
xlm( 9) = total strain energy
xlm(10) = total plastic strain energy
xlm(11) = total creep strain energy
xlm(12) = total Kinetic energy
xlm(13) = total damping energy
xlm(14) = total work done by contact/external forces
xlm(15) = total thermal energy
xlm(16) = total elastic strain energy
xlm(17) = total work done by contact forces
xlm(18) = total work done by friction forces
xlm(19) = total work done by springs
xlm(20) = total work done by foundations
xlm(21) = total work done by applied-force/disp
xlm(22) = not used
xlm(23) = not used
xlm(24) = not used
blkend = =end=

Note: nw = 24

BLOCK 519nn - new model


***********************

if(newmo.ne.0) then

repeat BLOCK 502nn upto and including BLOCK 514nn

endif

newmo = remeshing flag (see BLOCK 517nn)

BLOCK 520nn - magnitude of distributed loads


********************************************

read(formatted,(a70)) blkbegin
read(formatted,(i13)) ndistl
read(formatted,(6e13.6)) (dist(ijk),ijk=1,ndistl)
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
read(binary) ndistl
508 PLDUMP13/PLDUMP2000
Marc Post File Processor

read(binary) (dist(ijk),ijk=1,ndistl)
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

blkbegin = =beg=52001 (Magnitude of Distributed Loads)


ndistl = number of dist loads
dist(i) = magnitude of dist load i
blkend = =end=

BLOCK 521nn - magnitude of spring forces


****************************************

if(nsprng.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,nsprng
read(formatted,(6e13.6)) force1,force2
enddo
read(formatted,( a5)) blkend

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

blkbegin = =beg=52100 (Magnitude of Spring Forces)


nsprng = number of springs (see BLOCK 509nn)
force1 = real force of spring ijk
force2 = imaginary force of spring ijk
only non-zero for complex analysis (see BLOCK 517nn)
blkend = =end=

BLOCK 522nn - contact body results


**********************************

if(ndie.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,ndie
read(formatted,(6e13.6)) (ddat(ijk),ijk=1,36)
enddo
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
do ijk=1,ndie
read(binary) (ddat(ijk),ijk=1,36)
PLDUMP13/PLDUMP2000 509
Marc Post File Processor

enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

endif

blkbegin = =beg=52200 (Contact Body Results)


ddat( 1) - ddat( 3) =
x-, y-, z- position of center of body ijk
ddat( 4) = not used
ddat( 5) = not used
ddat( 6) = total angle rotated for body ijk
ddat( 7) - ddat( 9) =
x-, y-, z- velocity of center of body ijk
ddat(10) = not used
ddat(11) = not used
ddat(12) = angular velocity of body ijk
ddat(13) - ddat(15) =
x-, y-, z- force of body ijk
ddat(16) - ddat(18) =
moment around x-, y-, z- axis of body ijk
ddat(19) - ddat(34) =
4x4 rotation/translation matrix to transform
original position of body ijk to current position
ddat(35) = not used
ddat(36) = not used
blkend = =end=

BLOCK 523nn - element integration point values


**********************************************

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(formatted,'( a5)') blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,'(70a1)') blkbegin
do k=1,numel
j=jetyp(k)
nstres=nintps(j)
npost=npvars(j)
do ijl=1,nstres
read(binary) (elvar(ijk),ijk=1,npost)
enddo
510 PLDUMP13/PLDUMP2000
Marc Post File Processor

enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,'(5a1)') blkend

endif

blkbegin = =beg=52301 (Element Integration Point Values)


numel = number of elements (see BLOCK 507nn)
jantyp = analysis type (see BLOCK 517nn)
jetyp(k) = element type index for element k (see BLOCK 507nn)
npvars(j)= number of valid postcodes for element type j (see BLOCK
538nn)
nintps(j)= number of integration points for element type j (see
BLOCK 538nn)
elvar(i) = values of post codes for element k, integration point
ijl
blkend = =end=

BLOCK 524nn - nodal results


***************************

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(formatted,( a5)) blkend

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
PLDUMP13/PLDUMP2000 511
Marc Post File Processor

endif
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

endif

blkbegin = =beg=52400 (Nodal Results)


jantyp = analysis type (see BLOCK 517nn)
knod = number of nodal variables (see BLOCK 517nn)
numnp = number of nodes (from BLOCK 508nn)
nnqnod = number of nodal vectors on post file
nnvnod = total number of nodal quantities on post file
cnam = name of nodal vector ijk
ivec( 1) = quantity identifier for vector ijk (see Table below)
ivec( 2) =
ivec( 3) =
ivec( 4) = number of components per node in vector ijk
ivec( 5) =
ivec( 6) = normal/modal/buckle/harmonic flag ijk
0 : normal
1 : modal
2 : buckle
3 : real harmonic
4 : complex harmonic (real + imaginary)
5 : complex harmonic (magnitude + phase)
ivec( 7) = number of nodes flag for vector ijk
-1 : values for all nodes given
0 : all values zero, no values given
ivec( 8) = not used
ivec( 9) = not used
ivec(10) = not used
ivec(11) = not used
ivec(11) = not used
vecr(i) = real values for vector ijk (or magnitude)
veci(i) = imaginary values for vector ijk (or phase)
blkend = =end=

Description of quantity identifiers of nodal vectors:


1 = Displacement
2 = Rotation
3 = External Force
4 = External Moment
5 = Reaction Force
6 = Reaction Moment
7 = Fluid Velocity
8 = Fluid Pressure
9 = External Fluid Force
10 = Reaction Fluid Force
11 = Sound Pressure
12 = External Sound Source
13 = Reaction Sound Source
14 = Temperature
15 = External Heat Flux
16 = Reaction Heat Flux
512 PLDUMP13/PLDUMP2000
Marc Post File Processor

17 = Electric Potential
18 = External Electric Charge
19 = Reaction Electric Charge
20 = Magnetic Potential
21 = External Electric Current
22 = Reaction Electric Current
23 = Pore Pressure
24 = External Mass Flux
25 = Reaction Mass Flux
26 = Bearing Pressure
27 = Bearing Force
28 = Velocity
29 = Rotational Velocity
30 = Acceleration
31 = Rotational Acceleration
32 = Modal Mass
33 = Rotational Modal Mass
34 = Contact Normal Stress
35 = Contact Normal Force
36 = Contact Friction Stress
37 = Contact Friction Force
38 = Contact Status
39 = Contact Touched Body
40 = Herrmann Variable

cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cc

BLOCK 525nn - response gradients


*****************************

if(jantyp.eq.60) then

read(formatted,(a70)) blkbegin
read(formatted,(6e13.6)) (respon(ijk),ijk=1,ndsvar)
read(formatted,( a5)) blkend

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

blkbegin = =beg=52500 (Response Gradients)


jantyp = analysis type (see BLOCK 517nn)
ndsvar = number of design variables (see BLOCK 517nn)
respon(i)= response gradient for design variable i
blkend = =end=

BLOCK 526nn - element contribution to response


PLDUMP13/PLDUMP2000 513
Marc Post File Processor

**********************************************

if(jantyp.eq.60) then

read(formatted,(a70)) blkbegin
read(formatted,(6e13.6)) (elcon(ijk),ijk=1,numel)
read(formatted,( a5)) blkend

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

blkbegin = =beg=52600 (Element Contribution to the Response)


jantyp = analysis type (see BLOCK 517nn)
numel = number of elements (from BLOCK 507nn)
elcon(i) = contribution of element i to the response
blkend = =end=

BLOCK 527nn - design variable values


************************************

if(jantyp.eq.61) then

read(formatted,(a70)) blkbegin
read(formatted,(6e13.6)) (desvar(ijk),ijk=1,ndsvar)
read(formatted,( a5)) blkend

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

blkbegin = =beg=52700 (Design Variable Values)


jantyp = analysis type (see BLOCK 517nn)
ndsvar = number of design variables (see BLOCK 517nn)
desvar(i)= value of design variable i
blkend = =end=

BLOCK 528nn - flow line updates


********************************

if(numndgr.gt.0) then

read(formatted,(a70)) blkbegin
do ijk=1,numndgr
514 PLDUMP13/PLDUMP2000
Marc Post File Processor

if(numcrgr.eq.2) read(formatted,(i13,2e13.6)) inod,yp,yp


if(numcrgr.eq.3) read(formatted,(i13,3e13.6)) inod,yp,yp,zp
enddo
read(formatted,( a5)) blkend

read(binary) (ibeg(ijk),ijk=1,70)
write(blkbegin,(70a1)) blkbegin
do ijk=1,numndgr
if(numcrgr.eq.2) read(binary) inod,yp,yp
if(numcrgr.eq.3) read(binary) inod,yp,yp,zp
enddo
read(binary) (iend(ijk),ijk=1,5)
write(blkbegin,(5a1)) blkend

endif

blkbegin = =beg=52800 (Flow Line Updates)


numndgr = number of "nodes" in grid (see BLOCK 515nn)
numcrgr = dimension of grid (see BLOCK 515nn)
inod = id of grid "node" ijk
xp,yp,zp = x-, y-, z- coordinate of grid "node" ijk
blkend = =end=

BLOCK 529nn - global variables


******************************

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(formatted,( a5)) blkend

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

blkbegin = =beg=52900 (Flow Line Updates)


inumv = number of items in this block
inumt = total number of global variables in this block
globname = global variable name for this item
ityp = global variable type:
1=Cavity Pressure
2=Cavity volume
PLDUMP13/PLDUMP2000 515
Marc Post File Processor

3=Global State Variable


4=Cavity Mass
5=Cavity Temperature
6=Throat Coordinate
7=Loadcase percentage complete
id2 = 0 (for the time being)
inum = id for this global variable, e.g. cavity number
nnum = 1 (number of variables in this item)
id5 = 0 (for the time being)
id6 = 0 (for future use)
xlm = value of the global variables defined in this item
blkend = =end=

BLOCK yyyyy - end increment indicator


*************************************

read(formatted,(a4)) csee

read(binary) isee
write(csee,(a4)) isee

csee = indicator
---- end of incremental data
Chapter 10 Mathematical Utility Routines List
Marc Volume D: User Subroutines and Special Routines s

Mathematical Utility
10 Routines List

Mathematical Utility Routine Page


DDOT 519

GMADD 520
GMPRD 521
GMSUB 522
GMTRA 523
GTPRD 524

INV3X3 526
INVERT 525

MCPY 527

PRINCV 528

SCLA 529
Chapter 10 Utility Routines
Marc Volume D: User Subroutines and Special Routines

10 Utility Routines
518 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.
DDOT 519
Inner Product of Two Vectors

DDOT Inner Product of Two Vectors

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:

Required Input:
NN is the number of items in each vector to be used
A is the first input vector
IA is the stride in vector A
B is the second input vector
IB is the stride in vector B
Required Output:
ANS is the inner product of vectors A and B

Note: Vectors A, B, and ANS are real*8 variables.


520 GMADD
Matrix Add

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:

Required Input:
W is the first input matrix
X is the second input matrix
N is the first dimension of W, X, and Y
M is the second dimension of W, X, and Y
Required Output:
Y is the output matrix, Y = W + X

Note: Matrices W, X, and Y are real*8 arrays.


GMPRD 521
Matrix Product

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:

Required Input:
W is the first input matrix
X is the second input matrix
N is the first dimension of W and Y
M is the second dimension of W and first dimension of X
L is the second dimension of X and Y
Required Output:
Y output matrix, Y = W * X

Note: Matrices W, X, and Y are real*8 arrays.


522 GMSUB
Matrix Subtract

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:

Required Input:
W is the first input matrix
X is the second input matrix
N is the first dimension of W, X, and Y
M is the second dimension of W, X, and Y
Required Output:
Y is the output matrix, Y = W X

Note: Matrices W, X, and Y are real*8 arrays.


GMTRA 523
Matrix Transpose

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:

Required Input:
W is the input matrix
N is the first dimension of W and second dimension of X
M is the second dimension of W and first dimension of X
Required Output:
X is the output matrix X = W T

Note: Matrices W and X are real*8 matrices.


524 GTPRD
Transpose Matrix Product

GTPRD Transpose Matrix Product

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:

Required Input:
W is the first input matrix
X is the second input matrix
N is the first dimension of W and X
M is the second dimension of W and first dimension of Y
L is the second dimension of X and Y
Required Output:
Y is the output matrix Y = W T * X

Note: Matrices W, X, and Y are real*8 matrices.


INVERT 525
Invert Matrix

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:

Required Input:
A is the input matrix
N is the number of rows and columns of A, must be less than or equal 15
B is the array of right-hand side vectors for which the solution is required
MR is the number of right hand side vectors. If MR = 0 , only inversion is performed
IDIM is the dimension of A in storage
Required Output:
A is the inverse of input matrix A
B is the array of solution vectors
D2 is the determinant of A

Note: Matrices A, B, and scalar D2 are real*8.


If D2 equals zero, the matrix is singular; neither the inverse or the solution are calculated.
If N is greater than 15, an error message is printed and the matrix is not inverted.
526 INV3X3
Invert 3 x 3 Matrix

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:

Required Input:
A is the input matrix
IFLAG is the flag for output
Required Output:
A is the inverse of input matrix A if IFLAG = 1
AINV is the inverse of input matrix A if IFLAG is not = 1
DET is the determinant of A

Note: Matrices A, AINV, and scalar DET are real*8 variables.


If DET = 0, the matrix is singular and the inverse is not calculated.
MCPY 527
Matrix Copy

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:

Required Input:
W is the input matrix
N is the first dimension of W and X
M is the second dimension of W and X
MS is not used
Required Output:
X is the output matrix, X = W

Note: Matrices W and X are real*8 arrays.


528 PRINCV
Find Principle Values

PRINCV Find Principle Values

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:

Required Input:
V(6) is the vector of strains or stresses.
NDI is the number of direct stress or strain components.
NSHEAR is the number of shear stress or strain components.
ISS is the flag to indicate whether V is stress or strain.
if ISS = 0, V is stress
if ISS = 1, V is strain
JCR1 is set to 0
JCR2 is set to 0
JCR3 is set to 0
Required Output:
PV(3) is the vector of principal values
R(3,3) is the matrix of principal directions

Note: Vectors and matrices PV, R, and V are real*8 arrays.


SCLA 529
Set Matrix to Value

SCLA Set Matrix to Value

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:

Required Input:
W is the input matrix
C is the scalar
N is the first dimension of W
M is the second dimension of W
MS is not used
Required Output:
W is the output matrix

Note: Matrix W and scalar C are real*8 variables.


Chapter 11 Considerations for Parallel Processing
Marc Volume D: User Subroutines and Special Routines

Considerations for
11 Parallel Processing


Overview 531

Auxiliary Routines 531
Sharing Data 534
Chapter 11 Considerations for Parallel Processing 531
Overview

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:
= 0: minimum
= 1: maximum
= 2: average
= 3: sum
532 Marc Volume D: User Subroutines and Special Routines
Reading Input

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.

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'

Now the file can be opened as in a serial run.


Chapter 11 Considerations for Parallel Processing 533
Reading Input

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
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.
534 Marc Volume D: User Subroutines and Special Routines
Sharing Data

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:
if (nprocd.gt.0) call domnodmask(mask)
num=0
do i=1,numnp
if (nprocd.gt.0) then
if (some_property(i).and.mask(i).eq.1) num=num+1
else
if (some_property(i)) num=num+1
endif
enddo
The integer array mask must be allocated with at least the number of nodes in the domain. The subroutine
domnodmask returns mask(i) such that mask(i) = 0 if internal node i is also present in another domain
and 1 otherwise (for each interdomain node, it is set to one in one domain and to zero in the rest).
Chapter 12 Code Coupling Interface User Subroutines and Utility List
Marc Volume D: User Subroutines and Special Routines

Code Coupling Interface User


12 Subroutines and Utility List

User Subroutine Page


CPLREG_EXCHANGE 541
CPLREG_FINALIZE 543
CPLREG_INIT 540

Coupling Utility Routine Page


CPLREG_FIND_NAME 544
CPLREG_GET_ALL_NODE_VALUES 555
CPLREG_GET_GLOBAL_VALUES 551
CPLREG_GET_INFO 545
CPLREG_GET_MESH 548
CPLREG_GET_NODE_VALUES 552
CPLREG_GET_QUANTS 547
CPLREG_PUT_ALL_EDGE_VALUES 565
CPLREG_PUT_ALL_ELEM_VALUES 573
CPLREG_PUT_ALL_FACE_VALUES 569
CPLREG_PUT_ALL_NODE_VALUES 561
536 Marc Volume D: User Subroutines and Special Routines

Coupling Utility Routine Page


CPLREG_PUT_EDGE_VALUES 563
CPLREG_PUT_ELEM_VALUES 571
CPLREG_PUT_FACE_VALUES 567
CPLREG_PUT_GLOBAL_VALUES 558
CPLREG_PUT_NODE_VALUES 559
Chapter 12 Code Coupling Interface
Marc Volume D: User Subroutines and Special Routines

12 Code Coupling Interface


538 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 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 Marc Volume C: Program Input).

The API allows code coupling software such as MpCCI1 to couple 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 Marc alone.
Table 12-1 summarizes the user subroutines of the API, which are called by 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
Marc Volume A: Theory and User Information for more information.

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.
Chapter 12 Code Coupling Interface 539

Table 12-1 User Subroutines for Coupling Regions.


Required Model
User Subroutine Definition Option Purpose
CPLREG_INIT COUPLING REGION Initialize coupling regions for a coupled analysis with an
external solver.
CPLREG_EXCHANGE COUPLING REGION Exchange data on coupling regions.
CPLREG_FINALIZE COUPLING REGION Finalize coupled analysis with an external solver.

Table 12-2 Utility Subroutines for Coupling Regions.


Available in User
Utility Subroutine Subroutines Purpose
CPLREG_FIND_NAME CPLREG_INIT Find coupling regions by name.
CPLREG_EXCHANGE
CPLREG_GET_INFO CPLREG_INIT Get general information about a
CPLREG_EXCHANGE coupling region.
CPLREG_GET_QUANTS CPLREG_INIT Get the prescribed physical quantities on a
CPLREG_EXCHANGE coupling region.
CPLREG_GET_MESH CPLREG_INIT Get the mesh of a coupling region.
CPLREG_EXCHANGE
CPLREG_GET_GLOBAL_VALUES CPLREG_EXCHANGE Get the values of a global quantity.
CPLREG_GET_NODE_VALUES CPLREG_EXCHANGE Get the values of a node-based quantity at a
CPLREG_GET_ALL_NODE_VALUES coupling region.
CPLREG_PUT_GLOBAL_VALUES CPLREG_EXCHANGE Put the values of a global quantity.
CPLREG_PUT_NODE_VALUES CPLREG_EXCHANGE Put the values of a node-based quantity at a
CPLREG_PUT_ALL_NODE_VALUES coupling region.
CPLREG_PUT_EDGE_VALUES CPLREG_EXCHANGE Put the values of an edge-based quantity at a
CPLREG_PUT_ALL_EDGE_VALUES coupling region.
CPLREG_PUT_FACE_VALUES CPLREG_EXCHANGE Put the values of a face-based quantity at a
CPLREG_PUT_ALL_FACE_VALUES coupling region.
CPLREG_PUT_ELEM_VALUES CPLREG_EXCHANGE Put the values of an element-based quantity
CPLREG_PUT_ALL_ELEM_VALUES at a coupling region.
540 CPLREG_INIT
Initialization of a Coupling Analysis

CPLREG_INIT Initialization of a Coupling Analysis

Description
The CPLREG_INIT user subroutine can be used to initialize a coupled analysis with an external solver.
For example, in case the 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 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 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
where:

Required 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.
CPLREG_EXCHANGE 541
Exchange Data on a Coupling Region

CPLREG_EXCHANGE Exchange Data on a Coupling Region

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 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). 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 Marc Volume C: Program Input).

Format
User subroutine CPLREG_EXCHANGE is written with the following headers:

SUBROUTINE ( NCPLREG,ICPLREG,ICALL,INC,TIME)
CPLREG_EXCHANGE
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION ICPLREG(NCPLREG)
user coding
RETURN
END
where

Required 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.
542 CPLREG_EXCHANGE
Exchange Data on a Coupling Region

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.
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.
CPLREG_FINALIZE 543
Finalize the Coupling

CPLREG_FINALIZE Finalize the Coupling

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 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 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:

Required Input:
IEXIT The Marc exit number of the job (see Appendix A in Marc Volume C:
Program Input).
544 CPLREG_FIND_NAME
Find Coupling Regions by Name

CPLREG_FIND_NAME Find Coupling Regions by 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 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:

Required 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
CPLREG_GET_INFO 545
Get General Information about a Coupling Region

CPLREG_GET_INFO Get General Information about a Coupling Region

Description
The CPLREG_GET_INFO utility routine returns general information about a coupling region, defined via
the COUPLING REGION model definition option (see 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).

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:

Required 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.
NRELEM is the number of edges, faces or elements (depending on the dimension) of the
coupling region.
546 CPLREG_GET_INFO
Get General Information about a Coupling Region

NRELNODE is the maximum number of nodes per edge, face or element of the coupling 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
CPLREG_GET_QUANTS 547
Get the Prescribed Quantities on a Coupling Region

CPLREG_GET_QUANTS Get the Prescribed Quantities on a Coupling Region

Description
The CPLREG_GET_QUANTS utility routine returns the quantities prescribed on a coupling region,
defined by the COUPLING REGION model definition option (see 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:

Required 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
548 CPLREG_GET_MESH
Get the Mesh of a Coupling Region

CPLREG_GET_MESH Get the Mesh of a Coupling Region

Description
The CPLREG_GET_MESH utility routine returns the mesh of a coupling region, defined via the
COUPLING REGION model definition option (see 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:

Required 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.
MXELEM is the maximum number of edges, faces or elements to return.
MXELNODE is the maximum number of nodes per edge, face or element to return.
Required Output:
INODEIDS is the array with the user IDs of the nodes.
COORDS is the array with the initial coordinates of the nodes.
IELCLASS is the array with the topology classes to which the edges, faces or elements belong
(see Table 12-3).
CPLREG_GET_MESH 549
Get the Mesh of a Coupling Region

IELTYPES is the array with the types of the elements (see Marc Volume B: Element Library).
IELEMIDS is the array with the IDs of the edges, faces or elements (see below).
NELNODES is the array with the number of nodes per edge, face or element.
IELNODES is the array with the connectivity of the edges, faces or elements.
IERROR is the error status:
= 0: on success
= 1: on error

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 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

Table 12-3 Topology Classes


Topology Class Number of Nodes Description
1 2 linear line element
2 3 quadratic line element
3 3 linear triangular element
4 6 quadratic triangular element
5 4 linear quadrilateral element
6 6 linear semi-infinite quadrilateral element
7 8 quadratic quadrilateral element
8 9 quadratic semi-infinite quadrilateral element
9 8 linear hexahedral element
10 12 linear semi-infinite hexahedral element
11 20 quadratic hexahedral element
550 CPLREG_GET_MESH
Get the Mesh of a Coupling Region

Table 12-3 Topology Classes (continued)


Topology Class Number of Nodes Description
12 27 quadratic semi-infinite quadrilateral element
13 4 linear tetrahedral element
14 10 quadratic tetrahedral element
15 6 linear pentahedral element
16 15 quadratic pentahedral element

Availability
This utility routine is available in the following user subroutines:
CPLREG_INIT
CPLREG_EXCHANGE
CPLREG_GET_GLOBAL_VALUES 551
Get the Values of a Global Quantity

CPLREG_GET_GLOBAL_VALUES Get the Values of a Global Quantity

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:

Required 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

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.
552 CPLREG_GET_NODE_VALUES
Get the Values of a Nodal Quantity at a Coupling Region

CPLREG_GET_NODE_VALUES Get the Values of a Nodal Quantity


at a Coupling Region

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 Marc Volume C:
Program Input).

Format
User subroutine CPLREG_GET_NODE_VALUES is called with the following headers:

SUBROUTINE ( IREG,IQID,NNODE,MXVAL,
CPLREG_GET_NODE_V
ALUES
INODEIDS,VALUES,IERROR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION INODEIDS(NNODE),VALUES(MXVAL,NNODE)
where:

Required 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

Note: The CPLREG_GET_NODE_VALUES routine may be called multiple times to obtain the
values of a quantity for a subset of nodes of the coupling region.
CPLREG_GET_NODE_VALUES 553
Get the Values of a Nodal Quantity at a Coupling Region

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
554 CPLREG_GET_NODE_VALUES
Get the Values of a Nodal Quantity at a Coupling Region

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.

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.
CPLREG_GET_ALL_NODE_VALUES 555
Get the Values of a Nodal Quantity at a Coupling Region

CPLREG_GET_ALL_NODE_VALUES Get the Values of a Nodal Quantity at


a Coupling Region

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 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:

Required 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

Note: 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.
556 CPLREG_GET_ALL_NODE_VALUES
Get the Values of a Nodal Quantity at a Coupling Region

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
CPLREG_GET_ALL_NODE_VALUES 557
Get the Values of a Nodal Quantity at a Coupling Region

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.

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.
558 CPLREG_PUT_GLOBAL_VALUES
Put the Values of a Global Quantity

CPLREG_PUT_GLOBAL_VALUES Put the Values of a Global Quantity

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:

Required 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.

Availability
This utility routine is available in the following user subroutines:
CPLREG_EXCHANGE
CPLREG_PUT_NODE_VALUES 559
Put the Values of a Nodal Quantity at a Coupling Region

CPLREG_PUT_NODE_VALUES Put the Values of a Nodal Quantity


at a Coupling Region

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 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:

Required 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.
560 CPLREG_PUT_NODE_VALUES
Put the Values of a Nodal Quantity at a Coupling Region

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 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
CPLREG_PUT_ALL_NODE_VALUES 561
Put the Values of a Nodal Quantity at a Coupling Region

CPLREG_PUT_ALL_NODE_VALUES Put the Values of a Nodal Quantity


at a Coupling Region

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 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:

Required 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

Note: 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.
562 CPLREG_PUT_ALL_NODE_VALUES
Put the Values of a Nodal Quantity at a Coupling Region

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 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
CPLREG_PUT_EDGE_VALUES 563
Put Edge Data at Coupling Regions

CPLREG_PUT_EDGE_VALUES Put Edge Data at Coupling Regions

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 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:

Required 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 Marc convention (see
CPLREG_GET_MESH utility).
564 CPLREG_PUT_EDGE_VALUES
Put Edge Data at Coupling Regions

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 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
CPLREG_PUT_ALL_EDGE_VALUES 565
Put Edge Data at Coupling Regions

CPLREG_PUT_ALL_EDGE_VALUES Put Edge Data at Coupling Regions

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 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:

Required 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

Note: 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.
566 CPLREG_PUT_ALL_EDGE_VALUES
Put Edge Data at Coupling Regions

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:

Note: Only quantities specified in the COUPLING REGION model definition option (see 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
CPLREG_PUT_FACE_VALUES 567
Put Face Data at Coupling Regions

CPLREG_PUT_FACE_VALUES Put Face Data at Coupling Regions

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 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:

Required 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 Marc convention (see
CPLREG_GET_MESH utility).
568 CPLREG_PUT_FACE_VALUES
Put Face Data at Coupling Regions

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 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
CPLREG_PUT_ALL_FACE_VALUES 569
Put Face Data at Coupling Regions

CPLREG_PUT_ALL_FACE_VALUES Put Face Data at Coupling Regions

Description
The CPLREG_PUT_ALL_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 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:

Required 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

Note: 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.
570 CPLREG_PUT_ALL_FACE_VALUES
Put Face Data at Coupling Regions

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 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
CPLREG_PUT_ELEM_VALUES 571
Put Element Data at Coupling Regions

CPLREG_PUT_ELEM_VALUES Put Element Data at Coupling Regions

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 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:

Required 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.
572 CPLREG_PUT_ELEM_VALUES
Put Element Data at Coupling Regions

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 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
CPLREG_PUT_ALL_ELEM_VALUES 573
Put Element Data at Coupling Regions

CPLREG_PUT_ALL_ELEM_VALUES Put Element Data at Coupling Regions

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 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.
574 CPLREG_PUT_ALL_ELEM_VALUES
Put Element Data at Coupling Regions

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 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
Appendix A User Subroutines, Special Routines, and Utility Routines List
Marc Volume D: User Subroutines and Special Routines

User Subroutines,
A Special Routines, and
Utility Routines List

User Subroutine Page


ANELAS 208
ANEXP 236
ANKOND 238
ANPLAS 222
ASSOC 367

CPLREG_EXCHANGE 541
CPLREG_FINALIZE 543
CPLREG_INIT 540
CREDE 102
CRPLAW (Viscoplastic) 361
CRPLAW 254
CRPVIS 372
CUPFLX 69
576 Marc Volume D: User Subroutines and Special Routines

User Subroutine Page


DIGEOM 127

ELEVAR 432
ELEVEC 434

FILM 85
FLOW 87
FLUX 63
FORCDF 82
FORCDT 73
FORCEM 57

GAPT 96
GAPU 321
GENSTR 308

HOOKLW 219
HOOKVI 377
HYPELA2 294

IMPD 424
INITPL 172
INITPO 173
INITSV 104
INTCRD 436
INTFTMP 107

MAP2D 385
MOTION (2-D) 113
MOTION (3-D) 116
Appendix A User Subroutines, Special Routines, and Utility Routines List 577

User Subroutine Page


NASSOC 363
NEWPO 174
NEWSV 105

ORIENT 234
ORIENT2 231

PLOTV 417

REBAR 394

SEPFOR 129
SEPFORBBC 131
SEPSTR 133
SEPSTR_STS 135
SINCER 368

TENSOF 270
TRSFAC 375

UABLATE 194
UABLTNORM 196
UACOUS 336
UACTGLUE 139
UACTIVE 392
UACTUAT 413
UADAP 399
UADAP2 406
UADAPBOX 407
UANISYLD 224
UARRBO 332
UBEAM 311
UBEAR 445
578 Marc Volume D: User Subroutines and Special Routines

User Subroutine Page


UBGINC 437
UBGITR 439
UBGPASS 440
UBREAKGLUE 137
UBSQUEAL 147
UCAV 177
UCOHESIVE 313
UCOHESIVET 315
UCOKSL 342
UCOMPL 319
UCOORD 398
UCRACK 268
UCRACK_PARIS 409
UCRACKGROW 400
UCRPLW (Viscoplastic) 252
UCRPLW (Viscoplastic) 359
UCURE 248
UDAMAG 279
UDAMAGE_INDICATOR 149
UDELAM 402
UEDINC 438
UELASTOMER 303
UELDAM 292
UELOOP 441
UENERG 288
UEPS 240
UFAH 182
UFAIL 226
UFCONN 384
UFILM 91
UFINITE 300
UFLUXMEC 184
UFMEC 190
Appendix A User Subroutines, Special Routines, and Utility Routines List 579

User Subroutine Page


UFORMSN 97
UFOUND 89
UFOUR 71
UFRIC 121
UFRICBBC 124
UFRORD 395
UFTHP 185
UFXORD 383
UGASKET 323
UGENT 334
UGLAW 187
UGMEC 192
UGRAIN 277
UGROOV 446
UGROWRIGID 119
UHTCOE 141
UHTCON 144
UHTNRC 151
UINSTR 70
UMAKNET 387
UMDCOE 163
UMDCON 166
UMDNRC 169
UMOONY 286
UMU 242
UNEWTN 328
UOBJFN 179
UOGDEN 290
UPERM 284
UPHI 317
UPNOD 391
UPOSTV 420
UPOWDR 281
580 Marc Volume D: User Subroutines and Special Routines

User Subroutine Page


UPRFILM 180
UPROGFAIL 228
UPSTNO 422
UPYROLEFF 346
UPYROLSL 340
UQVECT 94
URCONN 396
UREACB 175
URESTR 447
URPFLO 330
USDATA 110
USELEM 325
USHELL 411
USHRET 272
USHRINKAGE 250
USIGMA 244
USINC 109
USINKPT 93
USIZEOUTL 386
USPCHT 246
USPCHTAB 349
USPLIT 397
USPLIT_MESH 404
USPRNG 265
USSD 108
USSUBS 338
UTHICK (Hydrodynamic Lubrication) 448
UTHICK 412
UTIMESTEP 111
UTIMP 188
UTRANS 410
UVELOC (Hydrodynamic Lubrication) 449
UVELOC 112
Appendix A User Subroutines, Special Routines, and Utility Routines List 581

User Subroutine Page


UVOID 273
UVOIDN 274
UVOIDRT 276
UVSCPL 355
UVTCOE 154
UVTCON 157
UVTNRC 160
UWATERSL 344
UWEARINDEX 197
UWELDFLUX 65
UWELDPATH 67

VSWELL 259

WKSLP 262

YIEL 366

ZERX 365

Special Routine Page


PLDUMP13/PLDUMP2000 453

Mathematical Utility Routine Page


DDOT 519

GMADD 520
GMPRD 521
GMSUB 522
GMTRA 523
GTPRD 524
582 Marc Volume D: User Subroutines and Special Routines

Mathematical Utility Routine Page


INV3X3 526
INVERT 525

MCPY 527

PRINCV 528

SCLA 529

Coupling Utility Routine Page


CPLREG_FIND_NAME 544
CPLREG_GET_ALL_NODE_VALUES 555
CPLREG_GET_GLOBAL_VALUES 551
CPLREG_GET_INFO 545
CPLREG_GET_MESH 548
CPLREG_GET_NODE_VALUES 552
CPLREG_GET_QUANTS 547
CPLREG_PUT_ALL_EDGE_VALUES 565
CPLREG_PUT_ALL_ELEM_VALUES 573
CPLREG_PUT_ALL_FACE_VALUES 569
CPLREG_PUT_ALL_NODE_VALUES 561
CPLREG_PUT_EDGE_VALUES 563
CPLREG_PUT_ELEM_VALUES 571
CPLREG_PUT_FACE_VALUES 567
CPLREG_PUT_GLOBAL_VALUES 558
CPLREG_PUT_NODE_VALUES 559

You might also like