Marc 2008 r1 ®
Volume D: User Subroutines and Special Routines
Main Index
Corporate MSC.Software Corporation 2 MacArthur Place Santa Ana, CA 92707 Telephone: (800) 345-2078 FAX: (714) 784-4056
Europe MSC.Software GmbH Am Moosfeld 13 81829 Munich GERMANY Telephone: (49) (89) 43 19 87 0 Fax: (49) (89) 43 61 71 6
Asia Pacific MSC.Software Japan Ltd. Shinjuku First West 8F 23-7 Nishi Shinjuku 1-Chome, Shinjuku-Ku Tokyo 160-0023, JAPAN Telephone: (81) (3)-6911-1200 Fax: (81) (3)-6911-1201
Worldwide Web www.mscsoftware.com User Documentation: Copyright © 2008 MSC.Software Corporation. Printed in U.S.A. All Rights Reserved. This document, and the software described in it, are furnished under license and may be used or copied only in accordance with the terms of such license. Any reproduction or distribution of this document, in whole or in part, without the prior written authorization of MSC.Software Corporation is strictly prohibited. MSC.Software Corporation reserves the right to make changes in specifications and other information contained in this document without prior notice. The concepts, methods, and examples presented in this document are for illustrative and educational purposes only and are not intended to be exhaustive or to apply to any particular engineering problem or design. THIS DOCUMENT IS PROVIDED ON AN “AS-IS” BASIS AND ALL EXPRESS AND IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. MSC.Software logo, MSC, MSC., MD Nastran, Adams, Dytran, Marc, Mentat, and Patran are trademarks or registered trademarks of MSC.Software Corporation or its subsidiaries in the United States and/or other countries. NASTRAN is a registered trademark of NASA. Python is a trademark of the Python Software Foundation. LS-DYNA is a trademark of Livermore Software Technology Corporation. All other trademarks are the property of their respective owners. This software may contain certain third-party software that is protected by copyright and licensed from MSC.Software suppliers. METIS is copyrighted by the regents of the University of Minnesota. HP MPI is developed by Hewlett-Packard Development Company, L.P. MS MPI is developed by Microsoft Corporation. PCGLSS 6.0, copyright © 1992-2005 Computational Applications and System Integration Inc. MPICH Copyright 1993, University of Chicago and Mississippi State University. MPICH2 copyright © 2002, University of Chicago. Use, duplication, or disclosure by the U.S. Government is subject to restrictions as set forth in FAR 12.212 (Commercial Computer Software) and DFARS 227.7202 (Commercial Computer Software and Commercial Computer Software Documentation), as applicable.
MA*V2008r1*Z*Z*Z*DC-VOL-D
Main Index
Contents Marc Volume D: User Subroutines and Special Routines
Contents
1
Introduction Common Blocks Description, 14 Note on Double Precision, 14 Format, 15 Element Result Database Utility Routine, 17 Example, 19 Nodal Results Database Utility Routine, 19 Table Evaluation Routine, 21 MATDAT Common Block, 23 CONCOM Common Block, 29 ELMCOM Common Block, 36 BCLABEL Common Block, 40 Determining the Elements or Nodes in a Set, 43 Internal Data Structure, 43 Element Data, 44 Element Order, 45 Nodal Vectors, 45
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, 61 FLUX — Input of Nonuniform Fluxes, 66 UWELDFLUX — Input of User Defined Welding Flux, 68 UWELDPATH — Input of User Defined Welding Path, 70 CUPFLX — Coupling of Inelastic Energy and Internal Heat Generation, 72
Main Index
Main Index
4 Marc Volume D: User Subroutines and Special Routines
UINSTR — Input of Initial State of Stresses, 74 UFOUR — Input of a User-defined Function F(Q) for Fourier Analysis, 76 FORCDT — Input of Time Dependent Nodal based Boundary Conditions, 78 Stress Analysis, 78 Heat Transfer Analysis, 81 Format, 81 Joule Heating Analysis, 82 Diffusion Analysis, 83 Electrostatic Analysis, 84 Magnetostatic Analysis, 86 FORCDF — Input of Frequency Dependent Loads or Displacements in Harmonic Analysis, 88 Stress Analysis, 88 Piezoelectric Analysis, 89 FILM — Input of Nonuniform Film Coefficients, 92 FLOW — Input of Mass Flow Rate and Inlet Temperature, 94 UFOUND — Input of Nonlinear Foundation Stiffness and Damping, 96 UFILM — Input of Nonuniform Convective Coefficients, 98 USINKPT — Input of Sink Point Temperatures, 100 UQVECT — Directed Thermal Flux, 101 GAPT — Input of Thermal Contact (Conrad) Gap Temperature, 103 UFORMSN — Definition of Constraint Conditions, 104 CREDE — Input of Pre-specified State Variables, 109 INITSV — Initialize State Variable Values, 112 NEWSV — Input New State Variable Values, 113 USSD — Input of Spectral Response Density, 115 USINC — Input of Initial Conditions, 116 USDATA — Input of Initial Data, 117 UTIMESTEP — Input of User-defined Time Step, 118 UVELOC — Generation or Modification of Nodal Velocity Vectors, 119 MOTION (2-D) — Definition of Rigid Surface Motion for 2-D Contact, 120 MOTION (3-D) — Definition of Rigid Surface Motion for 3-D Contact, 123 UGROWRIGID — Changes the Size of a Rigid Body During the Analysis, 126 UFRIC — Definition of Friction Coefficients, 127 UFRICBBC — Definition of Friction Coefficients for Beam-to-Beam Contact, 129 DIGEOM — Definition of 3-D Rigid Surface Patch, 131 SEPFOR — Definition of Separation Force, 132 SEPFORBBC — Definition of Separation Force for Beam-to-Beam Contact, 134 SEPSTR — Definition of Separation Stress, 136 UHTCOE — Definition of Environment Film Coefficient, 138 UHTCON — Definition of Contact Film Coefficient, 141 UDAMAGE_INDICATOR — Indicator of Material Damage, 143 UHTNRC — Definition of Thermal Near Contact Film Coefficient, 145
Main Index
Main Index
Contents 5
UVTCOE — Definition of Environment Electrical Film Coefficient, 148 UVTCON — Definition of Electrical Film Coefficient, 151 UVTNRC — Definition of Electrical Near Contact Film Coefficient, 153 UMDCOE — Definition of Environment Mass Diffusion Coefficient, 156 UMDCON — Definition of Contact Mass Diffusion Coefficient, 159 UMDNRC — Definition of Mass Diffusion Coefficients between Surfaces almost in Contact, 161 UNORST — Definition of Normal Stress, Flow Stress and Temperature at Contact Node, 163 INITPL — Initialize Equivalent Plastic Strain Values, 167 INITPO — Initialize Pore Pressure in an Uncoupled Fluid-Soil Analysis, 168 NEWPO — Modify Pore Pressure in an Uncoupled Fluid-Soil Analysis, 169 UREACB — Definition of Reactive Boundary Coefficients in an Acoustic Harmonic Analysis, 170 UCAV — Input of Volume-Dependant Pressure Load for Cavities, 171 UOBJFN — Definition of Objective Function and its Gradient, 173 UPRFILM — Input of Nonuniform Pressure Film Coefficients, 175 UFAH — Define Correction Factor for Convection Coefficient aH, 177 UFLUXMEC — Determine the Rate of Ablation due to Mechanical Erosion from Sources other than Particle Impact, 179 UFTHP — Define Empirical Correction for the Effect of Surface Temperature, 180 UGLAW — Determine the Empirical Correlation G for Flux Calculation, 182 UTIMP — Define Thermal Effects of Particle Impact, 184 UFMEC — Define Empirical Correction Factor for Mechanical Erosion by Particles, 186 UGMEC — Determine the Empirical Correlation G for Recession Calculation, 188 UABLATE — Definition of Surface Recession Rate, 190 UABLTNORM — Definition of Direction of Recession, 192 UWEAR — Define the Rate of Mechanical Wear on a Surface, 193
3
User-defined Anisotropy and Constitutive Relations User Subroutines List
3
User-defined Anisotropy and Constitutive Relations User Subroutines ANELAS — Elastic Anisotropy, 205 HOOKLW — Anisotropic Elastic Law, 218 ANPLAS — Anisotropic Yield Surface and Creep Potential, 221 UFAIL — User-defined Failure Criterion, 223 UPROGFAIL — Definition of Material Stiffness Reduction Factors for Progressive Failure Analysis, 225 ORIENT — Specification of Preferred Orientation, 228
Main Index
Main Index
6 Marc Volume D: User Subroutines and Special Routines
ANEXP — Anisotropic Thermal Expansion, 230 ANKOND — Input of Anisotropic Thermal Conductivity Matrix, 232 UEPS — Input of Anisotropic Permittivity Matrix, 234 UMU — Input of Anisotropic Permeability Matrix, 235 USIGMA — Input of Anisotropic Electric Conductivity Matrix, 237 USPCHT — Definition of Specific Heat, 238 UCURE — Define the Cure Kinetics, 240 USHRINKAGE — Define Volumetric Cure Shrinkage, 242 UCRPLW (Viscoplastic) — Input of Creep Factors for Power Law Implicit Creep, 244 CRPLAW — Input of Special Creep Law, 246 VSWELL — Input of Special Swelling Law, 251 WKSLP — Work-hardening Slope Definition, 254 USPRNG — Input of Nonlinear Spring, Dashpot and Foundation Stiffness, 257 UCRACK — Input of Ultimate Stress for Cracking Analysis, 261 TENSOF — Input of Tension Softening Modulus for Cracking Analysis, 263 USHRET — Input of Shear Retention Factor for Cracking Analysis, 265 UVOID — Definition of the Initial Void Volume Fraction, 266 UVOIDN — Definition of the Void Nucleation Rate, 267 UVOIDRT — Definition of the Initial Void Ratio or Initial Porosity, 269 UGRAIN — Calculation of Grain Size, 271 UDAMAG — Prediction of Material Damage, 273 UPOWDR — Definition of Material Data for Powder Metallurgy Model, 275 UPERM — Definition of Permeability, 277 UMOONY — Mooney-Rivlin Material, 278 UENERG — Strain Energy Function, 279 UOGDEN — Definition of Ogden Material Parameters, 281 UELDAM — Definition of Damage Parameters in Ogden Model, 283 HYPELA2 — User-defined Material Behavior, 285 UFINITE — Finite Deformation Isotropic Material Models, 291 UELASTOMER — Generalized Strain Energy Function, 294 GENSTR — Generalized Stress Strain Law (Shells & Beams), 299 UBEAM — Input for Nonlinear Beam, 301 UCOHESIVE — Interface Material Model, 304 UPHI — Input of PHI Function in Harmonic Analysis, 306 UCOMPL — Input of Viscous Stress Strain Relationship, 308 GAPU — Input of Gap Direction And Closure Distance, 310 UGASKET — Define the Initial Gasket Gap Distance, 312 USELEM — User-defined Element, 313 UNEWTN — Input of Viscosity in Flow Analysis, 317 URPFLO — Rigid-Plastic Flow, 318 UARRBO — Arruda-Boyce Material Model, 320
Main Index
Main Index
Contents 7
UGENT — Gent Material Model, 321 UACOUS — Definition of Material Properties for Acoustic Analysis, 323 USSUBS — Superelements Not Generated by Marc, 324 UPYROLSL — Calculate the Rate of Decomposition, 326 UCOKSL — Calculate the Mass Fraction of Carbon in Pyrolysis Gas, 328 UWATERSL — Calculate the Rate of Water Evaporation, 330 UPYROLEFF — Define the Effective Conductivity, 332 USPCHTAB — Define Specific Heat for Simplified Pyrolysis Model, 335 References, 337
4
Viscoplasticity and Generalized Plasticity User Subroutines List
4
Viscoplasticity and Generalized Plasticity User Subroutines UVSCPL — Definition of the Inelastic Strain Rate, 343 UCRPLW (Viscoplastic) — Input of Creep Factors for Power Law Implicit Creep, 346 CRPLAW (Viscoplastic) — Input of Explicit Viscoplastic Strain Rate Law, 348 NASSOC — Input of a Nonassociated Flow Law, 350 ZERO — Calculation of Equivalent Stress, 352 YIEL — Calculation of Current Yield, 353 ASSOC — Input of Associated Flow Law, 354 SINCER — User Subroutine for Improving Accuracy, 355
5
Viscoelasticity User Subroutines List
5
Viscoelasticity User Subroutines CRPVIS — Viscoelasticity – Generalized Kelvin Material Behavior, 362 TRSFAC — Define a Shift Function for Thermo-Rheologically Simple (T.R.S.) Material Behavior, 365 HOOKVI — User-defined Anisotropic Viscoelasticity, 368
6
Geometry Modifications User Subroutines List
6
Geometry Modifications User Subroutines UFXORD — Coordinate Generation or Modification, 374 UFCONN — Connectivity Generation or Modification, 375 MAP2D — Boundary Node Coordinates Modification in Mesh2D, 377 USIZEOUTL — Local Refinement Definition for 2-D Remeshing with Advancing Front Mesher, 378
Main Index
Main Index
8 Marc Volume D: User Subroutines and Special Routines
UMAKNET — User-defined Remeshing Routine, 380 t18 file for 2-D or Axisymmetric - Fixed Format, 381 feb file format - fixed format, 383 UPNOD — Update Nodal Positions in Flow Solutions, 385 UACTIVE — Activate or Deactivate Elements, 387 REBAR — Input of Rebar Positions, Areas and Orientations, 389 UFRORD — Rezoning Coordinate Generation or Modification, 390 URCONN — Rezoning Connectivity Generation or Modification, 391 USPLIT — User-defined Criterion to Split a Two-dimensional Body, 392 UCOORD — Relocate Nodes Created During Adaptive Meshing, 393 UADAP — User-defined Error Criterion, 394 UCRACKGROW — Definition of Crack Growth Direction and Crack Growth Increment for the VCCT Option, 395 USPLIT_MESH — User Subroutine for Splitting Up a Mesh, 397 UADAP2 — User-defined Unrefinement, 399 UADAPBOX — User-defined Region For Local Adaptive Meshing, 400 UCRACK_PARIS — Define the Crack Growth Increment, 403 UTRANS — Implement Local Coordinate System, 405 USHELL — Modify Thickness of Shell Elements, 406 UTHICK — User-specified Nodal Thicknesses, 407 UACTUAT — Prescribe the Length of an Actuator, 408
7
Output Quantities User Subroutines List
7
Output Quantities User Subroutines PLOTV — User-selected Postprocessing of Element Variables, 413 UPOSTV — User-selected Postprocessing of Nodal Variables, 415 UPSTNO — User-selected Postprocessing of Nodal Variables, 418 IMPD — Output of Nodal Quantities, 420 Stress Analysis, 420 Joule Heating (Current Pass) Analysis, 422 Electrostatic Analysis, 423 Magnetostatic Analysis, 424 Harmonic Electromagnetic Analysis, 425 Transient Electromagnetic Analysis, 425 Acoustic Analysis, 426 Fluid or Fluid-Thermal Analysis, 427 ELEVAR — Output of Element Quantities, 428 ELEVEC — Output of Element Quantities in Harmonic Analysis, 430 INTCRD — Output of Integration Point Coordinates, 432 UBGINC — Beginning of Increment, 433
Main Index
Main Index
Contents 9
UEDINC — End of Increment, 434 UBGITR — Beginning of Iteration, 435 UBGPASS — Beginning of Pass in Coupled Analyses, 436 UELOOP — Beginning of Element Loop, 437
8
Hydrodynamic Lubrication User Subroutines List
8
Hydrodynamic Lubrication User Subroutines UBEAR — Input of Spatial Orientation of Lubricant Thickness, 443 UGROOV — Input of Groove Depths, 444 URESTR — Input of Nonuniform Restrictor Coefficients, 445 UTHICK (Hydrodynamic Lubrication) — Generation or Modification of Nodal Thickness or Thickness Change Field, 447 UVELOC (Hydrodynamic Lubrication) — Generation or Modification of Nodal Velocity Vectors, 449
9
Special Routines User — Marc Post File Processor List
9
Special Routines User — Marc Post File Processor PLDUMP13/PLDUMP2000 — Marc Post File Processor, 455 Marc Post File Layout (Revision 9 or Higher): PLDUMP 2000, 456 Marc Post File Layout (Revision 13 or Higher): PLDUMP13, 521
10 Utility Routines List 10 Utility Routines List DDOT — Inner Product of Two Vectors, 587 GMADD — Matrix Add, 588 GMPRD — Matrix Product, 589 GMSUB — Matrix Subtract, 590 GMTRA — Matrix Transpose, 591 GTPRD — Transpose Matrix Product, 592 INVERT — Invert Matrix, 593 INV3X3 — Invert 3 x 3 Matrix, 594 MCPY — Matrix Copy, 595
Main Index
Main Index
10 Marc Volume D: User Subroutines and Special Routines
PRINCV — Find Principle Values, 596 SCLA — Set Matrix to Value, 597
11
Considerations for Parallel Processing Overview, 600 Auxiliary Routines, 600 DOMFLAG, 600 Reading Input, 602 Sharing Data, 604
12 Code Coupling Interface User Subroutines and Utility List 12 Code Coupling Interface CPLREG_INIT — Initialization of a Coupling Analysis, 612 CPLREG_EXCHANGE — Exchange Data on a Coupling Region, 614 CPLREG_FINALIZE — Finalize the Coupling, 616 CPLREG_FIND_NAME — Find Coupling Regions by Name, 617 CPLREG_GET_INFO — Get General Information about a Coupling Region, 618 CPLREG_GET_QUANTS — Get the Prescribed Quantities on a Coupling Region, 620 CPLREG_GET_MESH — Get the Mesh of a Coupling Region, 621 CPLREG_GET_GLOBAL_VALUES — Get the Values of a Global Quantity, 624 CPLREG_GET_NODE_VALUES — Get the Values of a Nodal Quantity at a Coupling Region, 626 CPLREG_GET_ALL_NODE_VALUES — Get the Values of a Nodal Quantity at a Coupling Region, 629 CPLREG_PUT_GLOBAL_VALUES — Put the Values of a Global Quantity, 632 CPLREG_PUT_NODE_VALUES — Put the Values of a Nodal Quantity at a Coupling Region, 634 CPLREG_PUT_ALL_NODE_VALUES — Put the Values of a Nodal Quantity at a Coupling Region, 636 CPLREG_PUT_EDGE_VALUES — Put Edge Data at Coupling Regions, 638 CPLREG_PUT_ALL_EDGE_VALUES — Put Edge Data at Coupling Regions, 640
Main Index
Main Index
Contents 11
CPLREG_PUT_FACE_VALUES — Put Face Data at Coupling Regions, 642 CPLREG_PUT_ALL_FACE_VALUES — Put Face Data at Coupling Regions, 644 CPLREG_PUT_ELEM_VALUES — Put Element Data at Coupling Regions, 646 CPLREG_PUT_ALL_ELEM_VALUES — Put Element Data at Coupling Regions, 648
A
Main Index
Main Index
User Subroutines, Special Routines, and Utility Routines List
12 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 1 Introduction
1
Introduction
■ Common Blocks Description ■ Note on Double Precision
14 14
■ Element Result Database Utility Routine ■ Nodal Results Database Utility Routine ■ Table Evaluation Routine
21
■ MATDAT Common Block
23
■ CONCOM Common Block
29
■ ELMCOM Common Block
36
■ BCLABEL Common Block
40
■ Internal Data Structure
Main Index
Main Index
43
17 19
14 Marc Volume D: User Subroutines and Special Routines
In Marc, the user subroutine feature constitutes one of the real strengths of Marc, allowing the user to substitute his own subroutines for several existing in Marc. This feature provides the user with a wide latitude for solving nonstandard problems. These routines are easily inserted into Marc. When such a routine is supplied, the user is simply replacing the one which exists in Marc program using appropriate control setup. A description of each of the available user subroutines is given in this manual. In addition, discussions of special routines are also included. Note: The reading of data is not recommended in most of the user subroutines since many of these routines are in the recycling loop for nonlinear analysis, and hence, you cannot know how many times per increment the routine is called.
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.
Main Index
Main Index
CHAPTER 1 15 Introduction
Format The following quantities are available in all user subroutines: TIME AT BEGINNING OF INCREMENT:CPTIM TIME INCREMENT:TIMINC AVAILABLE THROUGH include ’creeps’ INCREMENT NUMBER: SUBINCREMENT NUMBER: AVAILABLE THROUGH include ’concom’
INC INCSUB
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: NUMBER OF NODES IN MESH: MAXIMUM NUMBER OF DEGREES OF FREEDOM PER NODE: MAXIMUM NUMBER OF COORDINATE DIRECTIONS: AVAILABLE THROUGH include ’dimen’
NUMEL NUMNP NDEG NCRD
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: INTEGRATION POINT NUMBER: USER LAYER NUMBER:
Main Index
Main Index
N NN KCUS(1)
16 Marc Volume D: User Subroutines and Special Routines
INTERNAL LAYER NUMBER: AVAILABLE IN include ’lass’
KCUS(2)
NUMBER OF NODES IN ELEMENT: AVAILABLE IN include ’elmcom’
NNODE
NUMBER OF DIRECT COMPONENTS OF STRESS: NUMBER OF SHEAR COMPONENTS OF STRESS: SIZE OF STRESS-STRAIN LAW: ELEMENT TYPE: NUMBER OF LAYERS PER ELEMENT: NUMBER OF INT. PTS PER ELEMENT: NUMBER OF GEN. STRESS COMP. PER ELEMENT: AVAILABLE THROUGH include ’elmcom’ MAXIMUM NUMBER OF LAYERS PER ELEMENT: MAXIMUM NUMBER OF INT. PTS PER ELEMENT: AVAILABLE THROUGH include ’nzro1’
NDI NSHEAR NSTRM1 JTYPE NSTRM2 INTEL NGENEL
NEQST NSTRES
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.
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)
Main Index
Main Index
CHAPTER 1 17 Introduction
To determine the external (LEXT) node number from the internal (LINT) node number, use the following function call: LEXT = NODEXT(LINT)
To determine the internal element number MINT from the user (external) element number MEXT, use the following function call: MINT = IELINT(MEXT)
To determine the user (external) element number MEXT from the internal number MINT, use the following function call: MEXT = IELEXT(MINT)
To determine 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)
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)
Main Index
Main Index
18 Marc Volume D: User Subroutines and Special Routines
where: ICODE
is the standard post code.
M
is the user’s element number.
NN
is the integration point number.
KCUS
is the internal layer number.
VAR
is the current value(s) of the items requested.
Note: If the user is requesting a tensor, he must make VAR a local array in his user subroutine.
The values of ICODE are given in Marc Volume C: Program Input in the model definition section in the POST option. This routine does not support negative post codes associated with the PLOTV user subroutine. If the ELMVAR utility routine is called from a subroutine within the element assembly or stress recovery stage, the values of VAR are the current ones for this iteration. They are not necessarily the converged values. ELMVAR Table 1-1
Main Index
Main Index
can be called from user subroutines: Element Based User Subroutines
ANELAS
FORCEM
SINCER
UELASTOMER UMDCON
USIGMA
ANEXP
GENSTR
TENSOF
UENERG
UMOONY
USPCHT
ANKOND
HOOKLW
TRSFAC
UEPS
UMU
UVOIDN
ANPLAS
HOOKVI
UACTIVE
UFAIL
UNEWTN
UVOIDRT
ASSOC
HYPELA2
UACOUS
UFILM
UOGDEN
UVSCPL
CRPLAW
INITSV
UADAP
UFOUND
UPERM
UVTCOE
CRPVIS
INTCRD
UARRBO
UGENT
UPOWDR
UVTCON
CUPFLX
NASSOC
UCOMPL
UFINITE
URESTR
UWELDFLUX
ELEVAR
NEWSV
UCRACK
UHTCOE
URPFLO
VSWELL
ELEVEC
ORIENT
UDAMAG
UHTCON
USELEM
WKSLP
FILM
PLOTV
UELDAM
UINSTR
USHELL
YIEL
FLUX
REBAR
UELOOP
UMDCOE
USHRET
CHAPTER 1 19 Introduction
Example Suppose the user would like the plastic strain tensor from within the UADAP user subroutine for a user-defined adaptive meshing criteria. In this example, there are no shell elements, so KCUS=1 and the number of integration points per element = 4, so INTEL=4. The plastic strain tensor is code 321. The plastic strains are stored in a local array EPTEN. The user could create the following routine:
…
SUBROUTINE UADAP (M,XORD,DSXT,NCRDMX,NDEGMX,LM,NNODE,USER) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION XORD(NCRDMX, *),DSXT(NDEGMX, *),LM(*) DIMENSION EPTEN (6,28) KCUS=1 INTEL=4 ICODE=321 DO NN=1,INTEL CALL ELMVAR(ICODE,M,NN,KCUS,EPTEN(1,NN)) ENDDO
…
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)
where:
Main Index
Main Index
20 Marc Volume D: User Subroutines and Special Routines
Input:
NODEID
is the user node number.
ICOD
0 1 2 3 4 5 6 7 8 9
= = = = = = = = = =
Coordinates Displacement Rotation External force External moment Reaction force Reaction moment Fluid velocity Fluid pressure External fluid force
25 26 27 28 29 30 31 32 33 34
= = = = = = = = = =
Reaction mass flux Bearing pressure Bearing force Velocity Rotational velocity Acceleration Rotational acceleration Modal mass Rotational modal mass Contact normal stress*
ICOD
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
= = = = = = = = = = = = = = =
Reaction fluid force Sound pressure External sound source Reaction sound source Temperature External heat flux Reaction heat flux Electric potential External electric charge Reaction electric charge Magnetic potential External electric current Reaction electric current Pore pressure External mass flux
35 36 37 38 39 40 41 42 43 44 45 46 47 48
= = = = = = = = = = = = = =
Contact normal force* Contact friction stress* Contact friction force* Contact status* Touched contact bodies* Not available Not available Not available Not available Not available Not available Tying force** Coulomb force Tying moment**
(continued)
Output:
VALNO***
is the current value of the item requested.
NQNCOMP
is the number of components returned.
* Not available when NODVAR is called from within a contact-related user subroutine; for example, UFRIC. Preferably use NODVAR for contact data during the output phase of an increment. ** Only available if the corresponding nodal post code has been requested. *** If a vector is requested, VALNO should be an array large enough to hold all NQNCOMP components of the vector. When a complex vector is requested, VALNO will contain first all real components followed by all imaginary components of the vector. NQCOMP is then the sum of real and imaginary components and VALNO should be a noncomplex vector.
Main Index
Main Index
CHAPTER 1 21 Introduction
NQDATATYPE is the type of data returned.
0 1 2 3 4 5
= = = = = =
Default Modal Buckle Harmonic real Harmonic real/imaginary 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.
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. For example, in a cracking problem, one might want to have the strain softening modulus as a function of the temperature dependent Young’s modulus, which is not available in the UCRACK user subroutine. The following procedure can be used:
Main Index
Main Index
22 Marc Volume D: User Subroutines and Special Routines
subroutine ucrack(scrack,esoft,ecrush,ecp,dt,dtdl,n,nn, * kcus,inc,ndi,nshear,shrfac) include '../common/implicit' dimension ecp(*),dt(*),dtdl(*), kcus(2) c c
this routine is called at each integration point for those
c
elements that have activated cracking
c c
scrack
- user defined cracking stress
c
esoft
- user defined strain softening modulus
c
ecrush
- user defined crushing strain
c
ecp
- array of cracking strains at this integration point
c
dt
- array of state variables at the begining of increment
c
dtdl
- array of increment of state variables
c
n
- user element number
c
nn
- integration point number
c
kcus(1) - user layer number
c
kcus(2) - internal layer number
c
inc
- increment number
c
ndi
- number of direct components of stress or strain
c
nshear
- number of shear components of stress or strain
c
shrfac
- user defined shear retention factor
c c
Define reference value (REFVAL) of Young's modulus = 30.e6 psi
c
In input file for this material, table number 1 was associated
c
with Young's modulus of this material, so set IDTABLE=1
c refval=30.d6 idtable=1 call tabva2(refval,evalue,idtable,0,0) c c c c
Main Index
Main Index
now set the softening modulus to be 10% of the Young's modulus at the current temperature
CHAPTER 1 23 Introduction
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:
Main Index
Main Index
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)
24 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
reluct(3)
reluctance
rprops(37-39)
permair
permeability of air
rprops(40)
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)
CHAPTER 1 25 Introduction
vscfunct(9)
reference viscoelastic values
rprops(90-98)
wgtmol
molecular weight
rprops(99)
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; used for interface elements
rprops(102)
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 interface elements
rprops(125)
comp_stiff
compression stiffening factor; used for interface elements
rprops(126)
In addition to array rprops, an iprops integer array is available in the ANELAS and HOOKLW user subroutines. The entries of this array have the following meaning (unless otherwise indicated, if the entry has a value of zero, it is false, and a value of one indicates true):
Main Index
Main Index
26 Marc Volume D: User Subroutines and Special Routines
iprops(1)
element control flag for anisotropic material behavior defined via the user subroutines
iprops(2)
element control flag for non-isotropic material behavior
iprops(3)
not used
iprops(4)
element control flag indicating that the current element is involved in a shell to brick tying
iprops(5)
element control flag indicating that the current element is a composite element
iprops(6)
element control flag indicating that cracking is allowed
iprops(7)
not used
iprops(8)
element control flag for damage material model
iprops(9)
element control flag for anisotropic material behavior defined via input file
iprops(10)
element control flag for generalized plasticity model
iprops(11)
element control flag indicating that the current element is a Herrmann-type element: 0: conventional elements; 1: higher-order Herrmann elements; 2: lower-order Herrmann elements
Main Index
Main Index
iprops(12)
number of integration points per element
iprops(13)
number of inertia degrees of freedom; used for mass matrix calculation
iprops(14)
number of integration points for distributed (edge or surface) load integration
iprops(15)
element control flag for curvilinear coordinates; used for element types 4, 8 and 24
iprops(16)
element control flag for hypoelastic material behavior
iprops(17)
element control flag for thermal rheologically simple material behavior
iprops(18)
element control flag indicating that the element is a shell or beam with layer integration
iprops(19)
integration point number of centroid
iprops(20)
element control flag for isotropic material
iprops(21)
internal element type of current element
CHAPTER 1 27 Introduction
iprops(22)
Updated Lagrange element class type (< 0 implies that Updated Lagrange is not supported for the current element)
iprops(23)
Kelvin viscoelastic flag (global variable defined via CREEP option)
iprops(24)
element control flag for viscoelasticity
iprops(25)
element control flag for Cam-Clay plasticity model
iprops(26)
element control flag for powder material model
iprops(27)
element control flag for ORNL material law
iprops(28)
element control flag for indicating type of ORNL 0: normal ORNL; 1: 2-1/4 Cr-Mo ORNL; 2: reversed plasticity ORNL; 3: full alpha reset ORNL
iprops(29)
element control flag for Ogden material model
iprops(30)
element control flag for soil material model
iprops(31)
user element type of current element
iprops(32)
element control flag for implicit creep material model
iprops(33)
not used
iprops(34)
element control flag for kinematic hardening 1: conventional kinematic hardening; 2: combined isotropic-kinematic hardening; 3: Chaboche kinematic hardening
iprops(35)
element control flag for axisymmetric elements with bending
iprops(36)
element control variable giving the class of the current element 0: pipe bend 1: truss 2: 3-D shells 4: plane stress 5: plane strain 6: generalized plane strain 7: axisymmetric 8: brick
Main Index
Main Index
9: Fourier 10: axisymmetric with twist 11: 2-D with layer integration 12: open section beams 13: closed section beams 14: membrane or shear panel 15: gap element
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)
28 Marc Volume D: User Subroutines and Special Routines
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 3D thick shell elements
Main Index
Main Index
iprops(57)
element control flag for progressive cracking
iprops(58)
number of generalized strains of the current element
iprops(59)
internal Marc flag
iprops(60)
element control flag to indicate that the current element uses reduced integration with hourglass control
CHAPTER 1 29 Introduction
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.
Main Index
Main Index
1
iacous
acoustic analysis
2
iasmbl
reassemble stiffness matrix
3
iautth
auto therm or auto therm creep
4
ibear
hydrodynamic bearing
5
icompl
complex harmonic analysis
6
iconj
EBE iterative solver
7
icreep
explicit creep
8
ideva(32)
debug print flags
9
idyn
dynamic analysis type (0, 1, 2, 3, 4, 5) based on the DYNAMIC parameter.
10
idynt
permanent dynamic analysis type (0, 1, 2, 3, 4, 5)
11
ielas
elastic reanalysis or Fourier
12
ielcma
flag to indicate this pass is a electromagnetic analysis (0,1,2)
13
ielect
flag to indicate this pass is a electrostatic analysis
14
iform
contact
15
ifour
Fourier
16
iharm
harmonic analysis
17
ihcps
thermal-mechanical or thermal-Joule-mechanical coupled analysis
18
iheat
flag to indicate this pass is heat transfer analysis
19
iheatt
flag to indicate that a heat transfer is performed in this job
20
ihresp
indicate that currently in a harmonic subincrement
21
ijoule
flag to indicate that Joule heating is performed in this job
22
ilem
indicates in which part of element assembly
23
ilnmom
indicates whether a coupled soil analysis (0,1,2)
24
iloren
DeLorenzi calculation required
30 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
25
inc
increment number
26
incext
creep extrapolation
27
incsub
subincrement number
28
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
29
iplres
dynamic, buckling or heat transfer second global matrix required
30
ipois
Poisson analysis for this pass
31
ipoist
Poisson flag for this job
32
irpflo
Eulerian - rigid plastic flow
33
ismall
small displacement analysis for this pass
34
ismalt
small displacement flag for this job
35
isoil
soil analysis
36
ispect
spectrum response
37
ispnow
perform spectrum response now
38
istore
update stress strain information.
39
iswep
currently performing eigenvalue extraction
40
ithcrp
thermal creep analysis
41
itherm
temperature dependent properties are present
42
iupblg
follower force
43
iupdat
update Lagrange
44
jacflg
Lanczos eigenmethod
45
jel
elastic increment
46
jparks
Fracture mechanics by Park method
47
largst
finite strain
48
lfond
distributed vs. foundation flag
49
loadup
nonlinearity has occurred
CHAPTER 1 31 Introduction
Main Index
Main Index
50
loaduq
nonlinearity has occurred
51
lodcor
load correction is activated
52
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
53
lsub
flag to indicate which part of calculation
54
magnet
flag to indicate this pass is magnetostatic
55
ncycle
cycle number
56
newtnt
permanent Newton-Raphson flag (0, 1, 2, 3, 8). See the CONTROL option.
57
newton
Newton-Raphson flag for this pass (0, 1, 2, 3, 8)
58
noshr
transverse shears included
59
linear
storage of betas, etc.
60
ivscpl
viscoplastic
61
icrpim
implicit creep
62
iradrt
radial return
63
ipshft
control on inclusion of initial stress terms (0, 1, 2, 3, 4). See the CONTROL option.
64
itshr
transverse shear
65
iangin
orientation angle
66
iupmdr
update-anisotropy flag
67
iconjf
sparse conjugant gradient solver
68
jincfl
not used
69
jpermg
indicates that permanent magnets are included
70
jhour
indicates that there are some reduced integration with hourglass control elements
71
isolvr
solver flag (0, 2, 4, 6, 8, 9, 10). See the SOLVER option.
32 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
72
jritz
indicates that Ritz vectors are used in eigenvalue analysis
73
jtable
flag indicates that tables are used for boundary conditions
74
jshell
indicates presence of shell elements
75
jdoubl
indicates that double eigenvalue extraction is used with Inverse Power Sweep method
76
jform
not used
77
jcentr
internal flag
78
imini
reduced storage flag for the ELASTIC parameter
79
kautth
flag used in the AUTO THERM option
80
iautof
flag indicating that global adaptive meshing is active
81
ibukty
convergence problem with buckling flag
82
iassum
assumed strain flag
83
icnstd
constant dilatation flag
84
icnstt
not used
85
kmakmas
recalculate mass matrix flag
86
imethvp
implicit viscoplastic procedure
87
iradrte
flag for large strain elastic material
88
iradrtp
radial return flag for plastic material
89
iupdate
updated Lagrange flag for elastic material
90
iupdatp
updated Lagrange flag for elastic-plastic material
91
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.
92
marmen
= 0 if Marc used for normal analysis = 1 if Marc used as reader via Marc Mentat
93
idynme
implicit dynamic analysis = 0 for Newmark-beta = 1 for Single Step Houbolt (SSH)
94
ihavca
= 0 if Cauchy stresses not stored separately = 1 if Cauchy stresses stored separately
95
ispf
Super Plastic Forming analysis
CHAPTER 1 33 Introduction
Main Index
Main Index
96
kmini
used for minimizing memory needed for element quantities if fast elastic-plastic material libraries of Superform are used
97
imixed
flag set to 1 in a Rigid Plastic analysis if some part of the material in the model has elasto-plastic material behavior
98
largtt
flag to preserve finite strain plasticity flag for the elastoplastic part of the model while doing the rigid-plastic part
99
kdoela
flag to trigger assembly in elastic analysis
100
iautofg
flag for analysis with MSC.SuperForm
101
ipshftp
flag to save the control for inclusion of the initial stress matrix ipshft during automatic increment restart feature
102
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
103
ipore
flag to indicate this pass is a diffusion analysis
104
jtablm
flag to indicate that tables are to be used for material properties
105
jtablc
flag to indicate that tables are to be used for the CONTACT option
106
isnecma
flag to indicate expanded film capabilities (not active in 2003)
107
itrnspo
flag to indicate steady state transport loadcase
108
imsdif
flag to indicate this pass is a diffusion analysis (not active in 2003)
109
jtrnspo
flag to indicate SS-ROLLING analysis
110
mcnear
flag to indicate that near thermal contact behavior is included between two bodies
111
imech
flag to indicate this pass is a mechanical analysis
112
imecht
flag to indicate that mechanical analysis will be performed in this job
113
ielcmat
flag to indicate electromagnetic analysis will be performed in this job
114
ielectt
flag to indicate electrostatic analysis will be performed in this job
34 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
115
magnett
flag to indicate magnetostatic analysis will be performed in this job
116
imsdift
flag to indicate diffusion analysis will be performed in this job
117
noplas
flag to indicate no material nonlinearity - reduce memory requirements
118
jtabls
flag to indicate that tables are to be used for the SPRINGS option
119
jactch
flag to indicate elements have been activated or deactivated
120
jtablth
flag to indicate that tables are to be used for the GEOMETRY option
121
kgmsto
= 1 store geometry in old format, = 2 store geometry based on geometry id
122
jpzo
flag to indicate piezoelectric analysis
123
ifricsh
flag to indicate that nodal based friction used
124
iremkin
flag to indicate gradual removal of kinematic boundary condition (table driven input)
125
iremfor
flag to indicate gradual removal of reaction force (table driven input)
126
ishearp
flag to indicate that shear panel elements are in the model
127
jspf
= 1 first increment of superplastic analysis
128
machining
flag to indicate that machining option is active
129
jlshell
flag to indicate that shells are present
130
icompsol
indicates the presence of composite solids in the mesh
131
iupblgfo
follower force point loads used
132
jcondir
contact priority is used
133
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)
134
nactive
number of active physics
135
ipassref
default physics type
136
nstspnt
not used
137
ibeart
permanent flag for hydrodynamic bearing
CHAPTER 1 35 Introduction
Main Index
Main Index
138
icheckmpc
indicate if check mpc is activated
139
noline
deactivate iterative contact if increment almost complete
140
icuring
set to 1 if the curing is included for the heat transfer analysis
141
ishrink
set to 1 if shrinkage strain is included for mechanical analysis
142
ioffsflg
1 for small displacement beam/shell offsets 2 for large displacement beam/shell offsets
143
isetoff
0 do not apply beam/shell offsets 1 apply beam/shell offsets
144
ioffsetm
minimum value of offset flag
145
iharmt
harmonic analysis flag
146
inc_incdat
flag to record increment number of a new loadcase
147
iautospc
flag for AutoSPC option
148
ibrake
brake squeal in this increment
149
icbush
set to 1 if cbush elements present in model
150
istream_input
set to 1 for streaming input calling Marc as library
151
iprsinp
set to 1 if pressure input introduced so other variable such as h can be a function of pressure
152
ivlsinp
set to 1 if velocity input introduced so other variables such a h can be a function of velocity
153
ifirst_time
internal
154
ipin_m
number of beam elements with pin flag
155
jgnstr_glb
global control over pre or fast integrated composite shells
156
imarc_return
Marc return flag for streaming input control
157
iqvcimp
in nonzero, then the number of QVECT boundary conditions
158
nqveceid
number of QVECT boundary conditions where emissivity/absorption id
159
istpnx
1 if to stop at end of increment
160
igenoa
1 if Genoa interface is used
36 Marc Volume D: User Subroutines and Special Routines
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:
Main Index
Main Index
1
ianels
anisotropy flag
2
ianiso
anisotropy flag
3
irebar
rebar element flag
4
icolps
indicates collapsed element
5
icomps
composite
6
icrack
cracking
7
ictrns
no longer used
8
idamag
damage
9
ianmat
anisotropic elastic constants given in input
10
igenpl
generalized plasticity
11
iherr
Herrmann element (0, 1, 2) 0 - not Herrmann element 1 - higher-order Herrmann element 2 - lower-order Herrmann element
12
intel
number of integration points
13
intin
integration point number if centroid
14
intpre
number of integration points for distributed
15
iort
curvilinear coordinates
16
ipela
hypoelastic
17
irheol
thermal rheologically simple
18
ishell
shell
19
isnte
integration point number if centroid
20
isotrp
elastic material
21
ityp
internal element type
22
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
CHAPTER 1 37 Introduction
Main Index
Main Index
23
ivisc
Kelvin viscoelastic flag
24
ivisel
Hereditary integral viscoelastic flag
25
jcamcl
Cam Clay model
26
jhip
powder model
27
joakr
Oak Ridge model
28
joakrm
Type of Oak Ridge model
29
jogden
Ogden
30
jsoil
Soil
31
jtype
element type
32
jviscp
viscoplastic
33
jvisel
hereditary integral viscoelastic
34
kinhrd
kinematic hardening
35
lbend
pipe bend
36
lclass
element class 0 - pipe element 1 - truss element 2 - shell 3 - none 4 - plane stress 5 - plane strain 6 - generalized plane strain 7 - axisymmetric solid
8 - 3D solid 9 - Fourier element 10 - axi with twist 11 - axisymmetric shell 12 - open section beam 13 - closed section beam 14 - membrane 15 - gap
37
lheat
heat transfer element
38
lnoint
no integration points
39
lrebar
rebar element
40
matno
material or composite id
41
mats
internal material id (see matus in this common block for user material id)
42
mohrc
Mohr-Coulomb (0, 1, 2) 0 - not Mohr-Coulomb 1 - linear Mohr-Coulomb 2 - quadratic Mohr-Coulomb
43
mooney
Mooney
44
mroz
Mroz - not supported
45
ncrdel
number of coordinates
38 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
46
ndegel
number of degrees of freedom
47
ndi
number of direct components
48
ngenel
number of generalized strains
49
nnode
number of nodes
50
nomid
mid-increment not used
51
noniso
anisotropic
52
kkdum1
dummy
53
nregs
pointer to transverse shear
54
nshear
number of shears
55
nstran
number of strains
56
ntshr
number of transverse shears
57
ipgrcr
progressive cracking
58
ngens
number of generalized strains
59
jparel
element running in parallel mode
60
jhoure
this element is a reduced integration element with hourglass control
61
jfoam
foam model
62
nnodg
number of nodes per element, excluding extra nodes for Herrmann and generalized plane strain
63
nstrm1
number of stresses stored per section point
64
nstrm2
number of stress points stored per integration point (layers for shell elements, cross-section point for beam elements, 1 for continuum elements
65
irpfle
control flag whether this element needs rigid plastic analysis (irpfle = 1) or not (irpfle = 0)
66
jpowlw
control flag for various work hardening models = 1 power law = 2 rate power law = 3 Not Available = 4 Johnson-Cook
67
jhamlt
not used
68
jyada
flag to use Yada grain size model (jyada = 1) or not (jyada = 0)
69
jintel
integration points to store stresses (jintel = intel except for the CENTROID parameter when jintel = 1)
CHAPTER 1 39 Introduction
Main Index
Main Index
70
jvarcon
not used
71
jthpor
pyrolysis model (not available in 2003)
72
iphase
phase number
73
lphase
flag indicating this material has multiple phases
74
igasket
gasket material group number
75
ipreten
cross-section number to which this element belongs
76
ilinel
linear elastic material
77
idgeom
geometry id for this element
78
lmbody
body number of element only valid in stiffness, mass, and recovery
79
ipiezo
= 1 stress based piezoelectric element = 2 strain based piezoelectric element
80
jcompsol
flag indicating element is a composite continuum
81
jshapemem
flag indicating shape memory material
82
intstf
number of integration points for stiffness matrix evaluation
83
jgnstr
flagged to 1 for generalized composite shells
84
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
85
jcuring
flagged to 1 for curing analysis of the element
86
jcuremt
if curing rate is based upon table, then table id
87
jshrink
flagged to 1 for cure shrinkage strain calculation for the element
88
jshnkmt
if shrinkage law is based upon table, then table id
89
ioffset
flag for beam-shell offset: -1 for beams -2 for shells -3 for cbush
90
ioffsum
number in list of offset elements (from 1 to n_elmoff_act)
91
jtopcls
topology class of element
40 Marc Volume D: User Subroutines and Special Routines
92
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
93
jcohesive
interface element
94
ipaddup
interface element, large displacement formulation
95
ipshell
1 pshell formulation 2 pshell formulation for thick shell
96
jnlelast
NLELAST model type (0 to 7)
97
jnlelastsy
1 if nonsymmetric (tension/compression behavior)
98
inlelastcp
1 if constant Poisson ratio 2 if constant Bulk modulus
99
inlelastct
0 conventional 1 limited tension 2 limited compression 3 limited tension and compression
100
jslosh
flagged to 1 for solid shell element (185)
101
jgenrec
0 if generalized composite layer are not recovered 1 if generalized composite layer are recovered
102
nstrm2sv
103
jcwcon
flag to see if the element node numbering is clockwise -1 clockwise 0 before checking 1 normal
104
isolbeam
0 beam section does not use numerical integration (type 98, 52) 1 beam section does use numerical integration (type 98, 52)
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
Main Index
Main Index
UVELOC
CHAPTER 1 41 Introduction
FORCDT
USINC
FLUX
INITPO
NEWSV
NEWPO
UFILM
INITSV
UFOUND
USINKPT
USESTR
This information can be obtained by including the common block BCLABEL in the user subroutine. Then one obtains: LDCASENAME
loadcase name
BCNAME
boundary condition name
Both are character variables of length 32. For example, if a pressure on different parts of the model is different and dependent on the loadcase, and if the boundary condition is applied to a curve, adaptive meshing is used and the element numbers are unknown. Given boundary condition names load 1 and load 2, and loadcases names early and late, one could implement: subroutine forcem(press,th1,th2,nn,n) include '../common/implicit' include '../common/bclabel' common/lpres3/prnorm(3) dimension n(10) c* * * * * * c c
defined non-uniformed distributed force on an element.
c c
press
c
Main Index
Main Index
distributed load increment magnitude if follower force then give total magnitude
c
th1
coordinate
c
th2
coordinate
c
nn
integration point number
c
n(1)
user element number
c
n(2)
parameter identifying the type of load
c
n(3)
is the integration point number
c
n(4)
not used
42 Marc Volume D: User Subroutines and Special Routines
c
n(5)
is the distributed load index - not used if Table
c c
inout format n(6)
=0 if conventional pressure
c
=1 if user returns 2 or 3 components for pressure
c
in global direction
c
n(7)
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 format
c c c
for distributed load in a given direction prnorm
is the direction cosine of the direction of the load
c
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 elseif(ldcasename.eq.'late') 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
Main Index
Main Index
CHAPTER 1 43 Introduction
101
format(/,'*** warning - forcem for element ',i10, *
' integration point',i4,' for loadcase ',a,
*
' boundary condition ',a,' is not coded')
return end
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.
Output: IHAV
LIST ITYP
INUM
0 if set name is not found 1 if set name is found List of entries in set in user numbers. See note below. 0 element set 1 node set 12 element:edge set 13 element:face set 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.
Main Index
Main Index
44 Marc Volume D: User Subroutines and Special Routines
Element Data As of the MSC.Marc 2005 r3 release, the storage of element data like stresses, strains and temperatures has changed. In previous versions, this piece of data was stored in the so-called general memory. The amount of memory allocated per element (stored in the variable nelsto as the number of integer words) was then the same for all elements. This amount was based upon the maximum over all elements of number of integration points, number of layers and similar items. In the new scheme, the elements are internally divided into groups, where the allocation for the elements in each group is the same but it can vary between groups. Now, the allocation is based upon the actual number of integration points and layers etc. and this can lead to substantial savings in memory usage for models using different types of elements. The storage is done outside of the general memory. This is reflected in the memory summary printout in that the element data portion is now in the lower part under "allocated separately". Instead of accessing the data in the array for general memory, vars, it is now accessed in the array varselem. The element loops in Marc are now done as one loop over element groups and then one loop over all elements in the group. This has no implication for user subroutines that are called from within an element loop, except that varselem must be used instead of vars. New element loops must be performed in the new style. We take, as an example, a hypothetical user subroutine to find the largest coordinate of the integration points. These are stored using the pointer icrxpt. In the new scheme this can be done as include include include include include include include
'array4' 'cdominfo' 'dimen' 'elemdata' 'elmcom' 'heat' 'space'
coordmax=-1.0e+20 do igroup=1,nelgroups call setup_elgroups(igroup,numel_group) do iel_g=1,numel_group mm=ielgroup_elnum(iel_g) ityp=ieltype(mm) call setel(mm) do intp=1,jintel call wrat3n(varselem(ielsbn),n,iel_g,igroup,0) lofr=(n-1)*nelstr la1 = icrxpt + (intp-1)*ncrdmx + lofr do i = 1, ncrd coord = varselem(la1)
Main Index
Main Index
CHAPTER 1 45 Introduction
la1 = la1 + 1 if (coord.gt.coordmax) coordmax=coord enddo enddo enddo enddo if (nprocd.gt.0) call domflag(idummy,coordmax,0,1,0,1) write(6,*) 'max coordinate:',coordmax
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). Element Order One of the consequences of the restructured data is that the elements are no longer evaluated in sequential order based upon the user element numbering. Some users would initialize local storage based upon the first element number and perform other operations, such as calculate based upon the last element number. This was not a good idea when using single input DDM in the past and is no longer valid for any analysis in the 2005r3 or subsequent releases. Initialization of data should be performed in the UGBINC or UBGITR user subroutine, and accumulation type operations should be done in the UEDINC user subroutine. Nodal Vectors The storage scheme of most nodal vectors like coordinates, displacements, and reaction forces were changed in the MSC.Marc 2005 version. User subroutines using the old storage scheme need to be modified for the 2005 and subsequent versions. In the old scheme, the vectors were stored in the so-called general
Main Index
Main Index
46 Marc Volume D: User Subroutines and Special Routines
memory in an array called vars (defined in common block space). For instance, to access the nodal coordinates, one would use the variable ixord, which is a pointer in the array vars. The x coordinate of node 1 would be located at vars(ixord), the y coordinate at vars(ixord+1), etc. In the 2005 and subsequent versions, these nodal vectors are allocated separately. The nodal coordinates are stored in the array xord_d available in common block spacevec. The x coordinate of node 1 is now at xord_d(1). It is recommended that the nodvar utility routine be used for quantities available there. However, existing user subroutines may access other quantities. Table 1-1 lists some of the nodal vectors that have been changed. 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
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)
Main Index
Main Index
CHAPTER 1 47 Introduction
iel=ints(ielids+ielint-1)
can be converted to next=inoids_d(nint) iel=ielids_d(ielint)
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
Main Index
Main Index
48 Marc Volume D: User Subroutines and Special Routines
New code: include ’spacevec’ include ’dimen’ do i=1,numnp write(6,*) i,(xord_d((i-1)*ncrd+j),j=1,ncrd) enddo
Main Index
Main Index
Chapter 2 User-defined Loading, Boundary Conditions, and State Variables User Subroutines List
2
User Subroutine
Main Index
Main Index
User-defined Loading, Boundary Conditions, and State Variables User Subroutines List
Page
CREDE .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
CUPFLX
..........................................................
72
DIGEOM .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
FILM . . . . FLOW . . . FLUX . . . FORCDF . FORCDT . FORCEM
......................................................... ......................................................... ......................................................... ......................................................... ......................................................... .........................................................
92 94 66 88 78 61
50 Marc Volume D: User Subroutines and Special Routines
User Subroutine GAPT
...........................................................
INITPL . INITPO INITSV.
.......................................................... .......................................................... ..........................................................
MOTION (2-D) . MOTION (3-D) . NEWPO . NEWSV .
167 168 112 120 123
......................................................... .........................................................
169 113
..................................................... ..................................................... .....................................................
UABLATE . . . . . . . . . . . UABLTNORM. . . . . . . . . UCAV . . . . . . . . . . . . . . UDAMAGE_INDICATOR. UFAH . . . . . . . . . . . . . . UFILM . . . . . . . . . . . . . . UFLUXMEC . . . . . . . . . . UFMEC . . . . . . . . . . . . . UFORMSN . . . . . . . . . . UFOUND . . . . . . . . . . . . UFOUR . . . . . . . . . . . . . UFRIC . . . . . . . . . . . . . . UFRICBBC . . . . . . . . . . UFTHP . . . . . . . . . . . . . UGLAW . . . . . . . . . . . . . UGMEC . . . . . . . . . . . . . UGROWRIGID . . . . . . . . UHTCOE . . . . . . . . . . . . UHTCON . . . . . . . . . . . . UHTNRC . . . . . . . . . . . . UINSTR . . . . . . . . . . . . .
Main Index
103
.................................................... ....................................................
SEPFOR . . . . SEPFORBBC . SEPSTR . . . .
Main Index
Page
............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. .............................................
132 134 136 190 192 171 143 177 98 179 186 104 96 76 127 129 180 182 188 126 138 141 145 74
CHAPTER 2 51 User-defined Loading, Boundary Conditions, and State Variables User Subroutines List
User Subroutine UMDCOE . . . UMDCON . . . UMDNRC . . . UNORST. . . . UOBJFN . . . . UPRFILM . . . UQVECT . . . . UREACB . . . . USDATA . . . . USINC . . . . . USINKPT . . . USSD . . . . . . UTIMESTEP . UTIMP . . . . . UVELOC . . . . UVTCOE . . . . UVTCON. . . . UVTNRC . . . . UWEAR . . . . UWELDFLUX UWELDPATH
Main Index
Main Index
Page
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
52 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 2 User-defined Loading, Boundary Conditions, and State V ariables User
2
Subroutines
Main Index
Main Index
User-defined Loading, Boundary Conditions, and State Variables User Subroutines
54 Marc Volume D: User Subroutines and Special Routines
The user subroutines described in this chapter provide an alternative to the standard input file for providing data in the analysis. Many problems have complex boundary conditions due to their spatial variation (such as wind loads) or due to their temporal variation. These routines provide a powerful mechanism to define this behavior in a simple manner. Table 2-1 summarizes these routines and indicates what parameters or model definition options are required to invoke the user subroutine.
Main Index
Main Index
CHAPTER 2 55 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Table 2-1
User-defined Loading, Boundary Conditions, State Variables User Subroutine Requirements
User Subroutine
Required Parameters or Model Definition Options
Purpose
CREDE
THERMAL LOADS
Definition of state variable including temperature.
CUPFLX
COUPLE DIST FLUXES (flux type 101)
Heat generated due to inelastic behavior in coupled analysis.
DIGEOM
CONTACT (2-D) CONTACT (3-D) Table 3-3, “User Subroutines for Contact Problems”
Definition of rigid surface.
FILM
HEAT or COUPLE FILMS (Model Definition) FILMS (History Definition)
Definition of convective heat transfer coefficient and sink temperature.
FLOW
HEAT CHANNEL
Definition of mass flow rate.
FLUX
DIST FLUXES (Model Definition) DIST FLUXES (History Definition) DIST CURRENT (Joule) DIST MASS (Diffusion) DIST CHARGES DIST CURRENT (Diffusion) DIST SOURCES (Acoustics)
Definition of nonuniform flux input.
FORCDF
FORCDT FIXED DISP or DISP CHANGE
Definition of point load or kinematic boundary condition in a harmonic analysis.
FORCDT
FORCDT FIXED DISP or DISP CHANGE FIXED TEMPERATURE or TEMP CHANGE
Definition of point load or prescribed displacement in stress analysis. Definition of point flux or prescribed temperature in heat transfer analysis.
FORCEM
DIST LOADS (Model Definition)
Definition of distributed load.
GAPT
HEAT CONRAD GAP
Definition of thermal contact gap temperature.
INITPL
INITIAL PLASTIC STRAIN
Definition of initial plastic strain.
Main Index
Main Index
56 Marc Volume D: User Subroutines and Special Routines
Table 2-1
User-defined Loading, Boundary Conditions, State Variables User Subroutine Requirements (continued)
User Subroutine
Required Parameters or Model Definition Options
Purpose
INITPO
PORE INITIAL PORE
Definition of initial pore pressure in a uncoupled soil analysis.
INITSV
INITIAL STATE
Definition of initial values of state variables.
MOTION (2-D)
CONTACT (2-D) Table 3-3, “User Subroutines for Contact Problems” UMOTION MOTION CHANGE (History Definition)
Definition of velocity of rigid surfaces.
MOTION (3-D)
CONTACT (3-D) Table 3-3, “User Subroutines for Contact Problems” UMOTION MOTION CHANGE (History Definition)
Definition of velocity of rigid surfaces.
NEWPO
PORE CHANGE PORE (Model Definition) CHANGE PORE (History Definition)
Change pore pressure in an uncoupled soil analysis.
NEWSV
CHANGE STATE (Model Definition) CHANGE STATE (History Definition)
Change value of the state variable.
SEPFOR
CONTACT (2-D) CONTACT (3-D) Table 3-3, “User Subroutines for Contact Problems”
Definition of force required for separation.
SEPFORBBC
CONTACT (2-D) CONTACT (3-D) CONTACT TABLE
Definition of the separation force for beam-tobeam contact.
SEPSTR
CONTACT (2-D) CONTACT (3-D) Table 3-3, “User Subroutines for Contact Problems”
Definition of stress required for separation.
UABLATE
ABLATION RECEDING SURFACE
Definition of Surface Recession Rate
Main Index
Main Index
CHAPTER 2 57 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Table 2-1
User-defined Loading, Boundary Conditions, State Variables User Subroutine Requirements (continued) Required Parameters or Model Definition Options
User Subroutine
Purpose
UABLTNORM
ABLATION
Definition of direction of recession
UCAV
CAVITY (Parameter) CAVITY (Model Definition) DIST LOADS (model definition and history definition)
Allows definition of the pressure load for internal cavities
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 TABLE
Inputs nonuniform convective coefficients
UFLUXMEC
ABLATION RECEDING SURFACE
Determines the rate of ablation due to mechanical erosion from sources other than particle impact.
UFMEC
ABLATION RECEDING SURFACE
Definition of empirical correction factor for mechanical erosion by particles.
UFORMSN
TYING
Definition of user-defined constraint matrices.
UFOUND
FOUNDATION TABLE
Permits the introduction of nonlinear spring constants and input of nonlinear damping for dynamics or harmonics.
UFOUR
FOURIER
Definition of function giving nonuniform variation about the circumference in Fourier analysis.
Main Index
Main Index
58 Marc Volume D: User Subroutines and Special Routines
Table 2-1
User-defined Loading, Boundary Conditions, State Variables User Subroutine Requirements (continued)
User Subroutine
Required Parameters or Model Definition Options
Purpose
UFRIC
CONTACT (2-D) CONTACT (3-D) Table 3-3, “User Subroutines for Contact Problems” UFRICTION
Definition of friction coefficient.
UFRICBBC
CONTACT (2-D) CONTACT (3-D) UFRICTION
Definition of variable friction coefficients for beam-tobeam 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 RECEDING SURFACE
Determines the empirical correlation G for recession calculation
UGROWRIGID
UMOTION
Changes the size of a rigid body during the analysis
UHTCOE
CONTACT (2-D) CONTACT (3-D) Table 3-3, “User Subroutines for Contact Problems” UHTCOEF
Definition of heat transfer coefficient to environment for coupled contact analysis.
UHTCON
CONTACT (2-D) CONTACT (3-D) Table 3-3, “User Subroutines for Contact Problems” UHTCON
Definition of heat transfer coefficient between bodies in contact in coupled analysis.
UHTNRC
CONTACT (2-D) CONTACT (3-D) COUPLE UHTCON
Definition of thermal near contact film coefficient.
UINSTR
ISTRESS
Definition of initial stress.
Main Index
Main Index
CHAPTER 2 59 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Table 2-1
User-defined Loading, Boundary Conditions, State Variables User Subroutine Requirements (continued) Required Parameters or Model Definition Options
User Subroutine
Purpose
UMDCOE
CONTACT DIFFUSION UHTCOEF
Definition of variable mass diffusion coefficients and sink pressure on free surfaces.
UMDCON
CONTACT DIFFUSION UHTCON
Definition of variable mass diffusion coefficients of surfaces that are in contact with other surfaces.
UMDNRC
UHTCON CONTACT THERMAL CONTACT CONTACT TABLE
Definition of mass diffusion coefficients between surfaces almost in contact.
UNORST
CONTACT (2-D) CONTACT (3-D) Table 3-3, “User Subroutines for Contact Problems” USER
Definition of normal stress for user elements in contact.
UOBJFN
DESIGN OPTIMIZATION DESIGN OBJECTIVE
Allows definition of the 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) CONTACT (3-D)
Definition of reactive boundary coefficients in an Acoustic Harmonic Analysis
USDATA
USDATA
Definition of userdefined constants.
USINC
INITIAL DISP INITIAL VEL INITIAL TEMP
Definition of initial displacement, initial velocity, or temperature.
Main Index
Main Index
60 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 Model Definition Options
User Subroutine
Purpose
USINKPT
FILMS (model definition option)
Changes the sink point temperatures as a function of time.
USSD
DYNAMIC CHANGE RESPONSE SPECTRUM
Definition of spectrum displacement density function.
UTIMESTEP
AUTO STEP
Definition of input for userdefined time step.
UTIMP
SURFACE ENERGY
Definition of thermal effects of particle impact.
UVELOC
HEAT
Definition of convective velocities.
UVTCOE
JOULE CONTACT (2-D) CONTACT (3-D) UHTCOEF
Definition of environment electrical film coefficient.
UVTCON
JOULE CONTACT (2-D) CONTACT (3-D) UHTCOEF
Definition of contact electrical film coefficient.
UVTNRC
JOULE CONTACT (2-D) CONTACT (3-D) UHTCON
Definition of electrical near contact film coefficient.
UWEAR
RECEDING SURFACE
Definition of the rate of mechanical wear on a surface.
UWELDFLUX
HEAT or COUPLE WELD FLUX (Model /History Definition) WELD PATH (Model / History Definition Option)
Definition of distributed welding flux.
UWELDPATH
HEAT or COUPLE WELD PATH (Model / History Definition) WELD FLUX (Model / History Definition)
Definition of weld path to be followed by a distributed welding flux.
Main Index
Main Index
CHAPTER 2 61 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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 FORCEM user subroutine is called during the calculation of the equivalent nodal loads, at each integration point needed to calculate the loads specified in the DIST LOADS option regardless of the use of the ALL POINTS or CENTROID parameters. When not using table driven input option, the use of this user subroutine is flagged by the appropriate load type in the DIST LOADS input option where the type chosen depends on the element type (see Marc Volume B: Element Library). When using table driven input format, directly specify if the user subroutine is invoked on the DIST LOADS option. For three-dimensional magnetostatic analysis, this user subroutine allows surface or body currents to be specified as functions of time, potential, or position. The use of this user subroutine is flagged by the appropriate current type in the DIST CURRENT input option. For two-dimensional magnetostatic analysis, use the FLUX user subroutine. Format The definitions in FORCEM depend on the element dimensionality as follows: For two-dimensional elements: SUBROUTINE FORCEM (P,X1,X2,NN,N) IMPLICIT REAL *8 (A-H, O-Z) COMMON/LPRES3/PRNORM (3) DIMENSION N(10) user coding RETURN END
Main Index
Main Index
62 Marc Volume D: User Subroutines and Special Routines
where: Input: X1
is the first coordinate of the integration point.
X2
is the second coordinate of the integration point.
NN
is the integration point number.
N(1)
is the element number.
N(2)
is the parameter identifying the type of load.
N(3)
is the integration point number.
N(4)
is not used.
N(5)
is the distributed load index -not used if Table input format.
N(6)
= 0 if conventional pressure. = 1 if user returns 2 or 3 components for pressure in global direction.
N(7)
is the internal element number.
N(8)
is not used.
N(9)
is the general CID load flag.
N(10)
is the boundary condition number if Table input format.
Required Output: P
is the magnitude of the distributed load to be defined by the user at the integration point being evaluated.
PRNORM is the direction cosine of the direction of the load with respect to the global system for a distributed load in a given direction.
When using Nastran like CID loads, it is possible to specify the direction of the load though the prnorm array. When using nonuniform volumetric load (IBODY=107), nonuniform force per unit length (IBODY=111) or nonuniform for per unit area (IBODY=113), the direction of the load should be defined in the prnorm array. For three-dimensional elements and shell element types 22, 49, 72, 75, 138, 139, and 140, the required headers are: SUBROUTINE FORCEM (P,X1,X2,NN,N) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION X1(3), X2(3), N(7)
where:
Main Index
Main Index
CHAPTER 2 63 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Input: X1(3)
is the (x,y,z) position of the integration point.
NN
is the integration point number.
N(1)
is the element number.
N(2)
is the parameter identifying the type of load.
N(3)
is not used.
N(4)
is not used.
N(5)
is the distributed load index -not used if Table input format.
N(6)
= 0 if conventional pressure. = 1 if user returns 2 or 3 components for pressure in global direction.
N(7)
is the internal element number.
N(8)
is not used.
N(9)
is the general CID load flag.
N(10)
is the boundary condition number if Table input format.
Required Output: P
is the magnitude of the distributed load at this point to be defined by the user. In cases where a direction is also needed (shell or beam elements).
X2(3)
is the vector describing direction of load.
PRNORM is the direction cosine of the direction of the load with respect to the global system for a distributed load in a given direction. Nontable Driven Input
Main Index
Main Index
Load Control
User Supplies
AUTO LOAD AUTO LOAD with FOLLOW FOR
INCREMENTAL PRESSURE PRESSURE END OF INCREMENT
AUTO STEP AUTO STEP with FOLLOW FOR
INCREMENTAL PRESSURE PRESSURE END OF INCREMENT
AUTO INCREMENT (include common block AUTOIN) AUTO INCREMENT with FOLLOW FOR (include common block AUTOIN)
PRESSURE END OF PERIOD
COMPLEX HARMONIC ANALYSIS (include common block HARMON)
REAL COMPONENT OF PRESSURE (IHPASS =1) IMAGINARY COMPONENT OF PRESSURE (IHPASS = 2)
PRESSURE END OF PERIOD (KPPASS = 1) PRESSURE BEGINING of INCREMENT (KPPASS = 2)
64 Marc Volume D: User Subroutines and Special Routines
Table Driven Input Load Control
User Supplies
AUTO LOAD
PRESSURE END OF INCREMENT
AUTO STEP
PRESSURE END OF INCREMENT
AUTO INCREMENT (include common block AUTOIN)
PRESSURE END OF PERIOD (KPPASS = 1) PRESSURE BEGINING of INCREMENT (KPPASS = 2)
COMPLEX HARMONIC ANALYSIS (include common block HARMON)
REAL COMPONENT OF PRESSURE (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. Note: When FORCEM is used to specify the “incremental pressure” (see above table) in conjunction with a stepping procedure that supports cut-backs, it is necessary that the pressure be specified as a function of time using the variables CPTIM and/or TIMINC available in common block CREEPS. This ensures that correct loads are applied even if the time step is reduced within an increment due to cut-backs.
Examples It is often useful to have the distributed load vary with time in a dynamic analysis. To obtain the current time and increment of time add: include ’creeps’
where: CPTIM
Main Index
Main Index
is the time at the beginning of the increment
CHAPTER 2 65 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
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 beam is given a linearly varying distributed load. MAX P ( X ) = X * ⎛ --------------⎞ ⎝ LEN ⎠
0 ≤ X ≤ LEN
where LEN is the length of the beam and MAX is the load intensity at X = LEN . The resulting user subroutine is as follows: SUBROUTINE FORCEM (P,X1,X2,NN,N) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION N(10) REAL LEN,MAX MAX = LEN = P = X1* MAX/LEN RETURN END
Main Index
Main Index
66 Marc Volume D: User Subroutines and Special Routines
■ FLUX 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 F(1)
is the surface or volumetric flux, to be defined at this integration point in this user subroutine.
F(2)
Derivative of the flux with respect to temperature. This may improve convergence behavior. Not required.
TS(1)
is the estimated temperature at the end of the increment.
TS(2)
is the current values of the area under the volumetric flux versus time curve, that is,
∫o Qdt . This total includes all t
uniform and nonuniform volumetric fluxes.
Main Index
Main Index
TS(3)
is the temperature at the beginning of the increment.
TS(4), TS(5), TS(6)
are the integration point coordinates.
CHAPTER 2 67 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
N(1)
is the element number.
N(2)
is the parameter identifying the type of flux.
N(3)
is the integration point number.
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.
Main Index
Main Index
68 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
TEMFLU(1)
integration point coordinate in local X direction (along Weld Width Direction).
TEMFLU(2)
integration point coordinate in local Y direction (along Weld Depth Direction).
TEMFLU(3)
integration point coordinate in local Z direction (along Weld Path Direction).
TEMFLU(4)
integration point coordinate in global X direction.
TEMFLU(5)
integration point coordinate in global Y direction.
TEMFLU(6)
integration point coordinate in global Z direction.
MIBODY(1)
user element number.
CHAPTER 2 69 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
MIBODY(2)
distributed flux type.
MIBODY(3)
integration point number.
MIBODY(4)
weld flux index.
WELDDIM(1)
weld width.
WELDDIM(2)
weld depth.
WELDDIM(3)
weld forward length.
WELDDIM(4)
weld rear length.
TIME
time at end of increment.
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.
Main Index
Main Index
70 Marc Volume D: User Subroutines and Special Routines
■ 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 Input:
Main Index
Main Index
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.
CHAPTER 2 71 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Output: FINALPOS
weld position vector at end of increment.
WELDVEC
weld path vector at end of increment position.
ARCVEC
arc orientation vector at end of increment position.
This user subroutine is called once at the beginning of each increment or when the time step for the increment is changed due to a cut-back. The position of the weld source at the end of the increment and the corresponding path and orientation vectors are required to be specified by the user. This information is used to construct the local coordinate system at the end of increment position. Note that the specified ARCVEC vector should be perpendicular to the WELDVEC vector. Otherwise, Marc makes the ARCVEC vector perpendicular to the WELDVEC vector. The UWELDPATH subroutine should be used in conjunction with a weld heat source that is either directly specified through the WELD FLUX model definition option or through the UWELDFLUX user subroutine. Note that when this subroutine is used to specify the weld path, the position of the associated weld source should be initialized on the WELD FLUX model definition option, else Marc terminates with exit 20. Also, note that when this subroutine is used to specify the weld path, it is the responsibility of the user to cater to any filler elements that may lie along the path. If the elements are initially deactivated, this can be done by calling the general activation UACTIVE user subroutine at the end of the increment.
Main Index
Main Index
72 Marc Volume D: User Subroutines and Special Routines
■ CUPFLX 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-Joulemechanical analysis is being performed and a DIST FLUXES type 101 is chosen. Format User subroutine CUPFLX is written with the following headers: SUBROUTINE CUPFLX (F,TS,N,TIME,TIMINC,TOTPLE,DIFPLE,DEN, FCMECH) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION TS(1), N(1) user coding RETURN END
where Input:
Main Index
Main Index
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.
CHAPTER 2 73 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
DEN
is the mass density.
FCMECH
is the factor entered through the CONVERT model definition option.
Required Output: F
Main Index
Main Index
is the volumetric flux to be defined by the user.
74 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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.
CHAPTER 2 75 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
TIME
is the total time at beginning of increment.
TIMEINC
is the incremental time.
Required Output: S
Main Index
Main Index
is the stress vector defined by the user.
76 Marc Volume D: User Subroutines and Special Routines
■ 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 Input: N
The number of stations around the circumference for which the function value F is specified. N is to be defined by the user.
NS
The number of the Fourier series.
Required Output: F
The F-array should contain the N values of F (Θ) in sequential order starting at
Θ = 0° and ending with Θ = 360°.
The user specifies the N values of F(Θ) in degrees sequentially from 0 to 360° in positions N + 1 through 2N of the F-array.
Main Index
Main Index
CHAPTER 2 77 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Example For example, suppose the following function is to be expanded in a Fourier series: F(Θ) =
1 -1 0
Θ = 135°, 315° Θ = 45°, 225° elsewhere.
This might be accomplished through the following code for the UFOUR user subroutine which calculates F(Θ) for 25 values of Θ from 0° to 360° by 15°. SUBROUTINE UFOUR (F,N,NS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION F(1) C
10
DO 10 I=1,N F(I)=0 F(I+N) = (I-1)*15 CONTINUE F(4) = -1.0 F(10) = +1.0 F(16) = -1.0 F(22) = +1.0
C RETURN END
The UFOUR user subroutine is called by using the following model definition option: FOURIER 0,0,25,
Main Index
Main Index
78 Marc Volume D: User Subroutines and Special Routines
■ FORCDT 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 LOADS or FIXED DISP options. In static analyses, displacement and load arrays are available and, for dynamics, velocity and acceleration analyses are also given. For nodes without kinematic boundary conditions, the user can define increments of point loads (thus overwriting any point load input at the same nodes in the POINT LOAD option). For nodes with kinematic boundary conditions (that is, listed in the FIXED DISP or DISP CHANGE options), the user can define increments of displacement. 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
Main Index
Main Index
CHAPTER 2 79 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
where U
is the array of total displacements at this node.
V
is the array of total velocities at this node (dynamics only).
A
is the array of total accelerations at this node (dynamics only). non table driven input
Nontable Driven Input: DP
is the array of incremental point loads at this node – can be set by the user at degrees of freedom without kinematic boundary conditions.
DU
is the array of incremental displacements at this node, is the array of total accelerations at this node, or is the array of total velocities, see IACFLG – can be set by the user for degrees of freedom listed as having kinematic boundary conditions.
Table Driven Input: DP
is the array of total force to be applied to the node
DU
is the array of incremental displacements to be applied to the node If IACFLG = 0. is the array of total displacements to be applied to the node at the end of the increment if IACLFG = -1.
DTIME
is the increment of time (only relevant for dynamics or creep).
TIME
is the total time (only relevant for dynamics or creep) at the beginning of the increment.
NDEG
is the number of degrees of freedom per node.
NODE
is the global node number.
UG
is the array of total displacements in the global system.
XORD
is the array of original nodal coordinates.
NCRD
is the number of coordinates per node.
IACFLG
is set to 1 if accelerations are prescribed. is set to 2 if velocities are prescribed in dynamic analysis. is set to -1 if total displacements are applied with table driven input.
INC
is the increment number.
IPASS
= 1 stress portion.
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
Main Index
Main Index
80 Marc Volume D: User Subroutines and Special Routines
CUTIME
is the time at the beginning of the current increment from heat transfer analysis.
DUTIME
is the change in time during current increment from heat transfer analysis.
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 so dp = B(sin ω (t + dt) - sin ω t) Hence, for non table 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
Main Index
Main Index
CHAPTER 2 81 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Heat Transfer Analysis Description Time dependent nodal fluxes or temperature boundary conditions can be input most conveniently through the use of user subroutine FORCDT. For distributed fluxes, the FLUX user subroutine should be used to input the value of the distributed flux as a function of time and position. When not using the table driven input format, the FORCDT user subroutine is flagged by a model definition set, FORCDT, listing the node numbers. Then at each step in the analysis, for each of the nodes in the list, the user subroutine is called. The current, calculated temperature is provided at the nodes. For nodes not specified as having temperature boundary conditions, the user can give the point flux. For those nodes specified with temperature, boundary conditions (in FIXED TEMPERATURE or TEMP CHANGE) sets the temperature. When using the table driven input, one explicitly activates this routine on the POINT FLUX or FIXED TEMPERATURE option. Format User subroutine FORCDT is written with the following headers: SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4, 1 XORD,NCRD,IACFLG,INC,IPASS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION F(NDEG),T(NDEG),XORD(NCRD) user coding RETURN END
where
Main Index
Main Index
X1,X2,X3
are not used.
F
is the array of fluxes at the node – can be re-defined for nodes free of temperature boundary conditions.
T
is the array of temperatures at the node – can be redefined for nodes having temperature boundary conditions.
TIME
is the total time at the end of the current step.
DTIME
is the current time increment.
NDEG
is 1 unless heat transfer shell elements are used.
82 Marc Volume D: User Subroutines and Special Routines
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 user subroutine FORCDT. For distributed current, the FLUX user subroutine should be used to input the value of the distributed current as a function of time and position. When not using the table driven input format, the FORCDT user subroutine is flagged by a FORCDT model definition set, listing the node numbers. Then, at each step in the analysis, for each of the nodes in the list, the user subroutine is called. The calculated voltage is provided at the nodes. For nodes not specified as having voltage boundary conditions, the user can give the point current. For those nodes specified with voltage, boundary conditions (in VOLTAGE or VOLTAGE CHANGE) sets the voltage. When using table driven input format, one explicitly activates this routine on the POINT CURRENT or FIXED VOLTAGE option. Format User subroutine FORCDT is written with the following headers: SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4, 1 XORD,NCRD,IACFLG,INC,IPASS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION F(NDEG),T(NDEG),XORD(NCRD) user coding RETURN END
Main Index
Main Index
CHAPTER 2 83 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
where X1,X2,X3
are not used.
F
is the array of currents at the node – can be re-defined for nodes free of voltage boundary conditions.
T
is the array of voltages at the node – can be redefined for nodes having voltage boundary conditions.
TIME
is the total time at the end of the current step.
DTIME
is the current time increment.
NDEG
is 1 unless heat transfer shell elements are used.
NODE
is the global node number.
X4
is not used.
XORD
is the array of nodal coordinates.
NCRD
is the number of coordinates per node.
IACFLG
is not used.
INC
is the increment number.
IPASS
= 4 electrical pass in Joule heating analysis.
Diffusion Analysis Description Time dependent nodal mass flux or pressure boundary conditions can be input most conveniently through the use of the FORCDT user subroutine. For distributed mass flux, the FLUX user subroutine should be used to input the value of the distributed mass flux as a function of time and position. When not using the table driven input format, the FORCDT user subroutine is flagged by a model definition set, FORCDT, listing the node numbers. Then at each step in the analysis, for each of the nodes in the list, the user subroutine is called. The current, calculated pressure is provided at the nodes. For nodes not specified as having pressure boundary conditions, the user can give the point mass flux. For those nodes specified with pressure, boundary conditions (in FIXED PRESSURE or PRESS CHANGE) sets the pressure.When using the table driven input format, one explicitly activates this routine on the POINT MASS or FIXED PRESSURE option.
Main Index
Main Index
84 Marc Volume D: User Subroutines and Special Routines
Format User subroutine FORCDT is written with the following headers: SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4, 1 XORD,NCRD,IACFLG,INC,IPASS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION F(NDEG),T(NDEG),XORD(NCRD) user coding RETURN END
where X1,X2,X3
are not used.
F
is the array of mass fluxes at the node – can be re-defined for nodes free of pressure boundary conditions.
T
is the array of pressure at the node – can be redefined for nodes having pressure boundary conditions.
TIME
is the total time at the end of the current step.
DTIME
is the current time increment.
NDEG
is 1 unless heat transfer shell elements are used.
NODE
is the global node number.
X4
is not used.
XORD
is the array of nodal coordinates.
NCRD
is the number of coordinates per node.
IACFLG
is not used.
INC
is the increment number.
IPASS
= 5 diffusion pass.
Electrostatic Analysis Description Time dependent nodal charges or potential boundary conditions can be input most conveniently through the use of the FORCDT user subroutine. For distributed charges, the FLUX user subroutine should be used to input the value of the distributed charge as a function of time and position.
Main Index
Main Index
CHAPTER 2 85 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
When not using the table driven input format, the FORCDT user subroutine is flagged by a model definition set, FORCDT, listing the node numbers. Then at each step in the analysis, for each of the nodes in the list, the user subroutine is called. The current, calculated potential is provided at the nodes. For nodes not specified as having potential boundary conditions, the user can give the point charge. For those nodes specified with potential, boundary conditions (in FIXED POTENTIAL or POTENTIAL CHANGE) sets the potential. When using the table driven input, one explicitly activates this routine on the POINT CHARGE or the FIXED POTENTIAL option. Format User subroutine FORCDT is written with the following headers: SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4, 1 XORD,NCRD,IACFLG,INC,IPASS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION F(NDEG),T(NDEG),XORD(NCRD) user coding RETURN END
where
Main Index
Main Index
X1,X2,X3
are not used.
F
is the array of charges at the node – can be re-defined for nodes free of potential boundary conditions.
T
is the array of potential at the node – can be redefined for nodes having potential boundary conditions.
TIME
is the total time at the end of the current step.
DTIME
is the current time increment.
NDEG
is 1 unless heat transfer shell elements are used.
NODE
is the global node number.
X4
is not used.
XORD
is the array of nodal coordinates.
NCRD
is the number of coordinates per node.
IACFLG
is not used.
INC
is the increment number.
IPASS
= 6 for electrostatic pass.
86 Marc Volume D: User Subroutines and Special Routines
Magnetostatic Analysis Description Time dependent nodal current or potential boundary conditions can be input most conveniently through the use of the FORCDT user subroutine. For distributed currents, the FLUX user subroutine should be used to input the value of the distributed current as a function of time and position. When not using the table driven input format, the FORCDT user subroutine is flagged by a model definition set, FORCDT, listing the node numbers. Then at each step in the analysis, for each of the nodes in the list, the user subroutine is called. The calculated potential is provided at the nodes. For nodes not specified as having potential boundary conditions, the user can give the point current. For those nodes specified with potential, boundary conditions (in FIXED POTENTIAL or POTENTIAL CHANGE) sets the potential. When using the table driven input, one explicitly activates this routine on the POINT CURRENT or the FIXED POTENTIAL option. Format User subroutine FORCDT is written with the following headers: SUBROUTINE FORCDT (X1,X2,X3,F,T,TIME,DTIME,NDEG,NODE,X4, 1 XORD,NCRD,IACFLG,INC,IPASS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION F(NDEG),T(NDEG),XORD(NCRD) user coding RETURN END
where
Main Index
Main Index
X1,X2,X3
are not used.
F
is the array of currents at the node – can be re-defined for nodes free of potential boundary conditions.
T
is the array of potentials at the node – can be redefined for nodes having potential boundary conditions.
TIME
is the total time at the end of the current step.
DTIME
is the current time increment.
NDEG
is 1 unless heat transfer shell elements are used.
NODE
is the global node number.
X4
is not used.
CHAPTER 2 87 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
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.
88 Marc Volume D: User Subroutines and Special Routines
■ 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
Main Index
Main Index
CHAPTER 2 89 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
where Input: U
is the array of total displacements at this node.
FREQ
is the excitation frequency.
DTIME
is not used.
NDEG
is the number of degrees of freedom per node.
NODE
is the global node number.
UG
is the array of total displacements in the global system.
XORD
is the array of original nodal coordinates.
NCRD
is the number of coordinates per node.
ICOMPL
is 0 if real analysis; 1 if complex analysis.
INC
is the increment number.
Required Output: FR
is the array of the real components of the harmonic point loads.
FI
is the array of the imaginary components of the harmonic point loads.
DUR
is the array of the real components of the harmonic displacements.
DUI
is the array of the imaginary components of the harmonic displacements.
Piezoelectric Analysis Description Simple nodal load, charge, displacement, or potential excitations can be input on data lines. However, in more general cases, when the load is nonhomogeneous, it is often more convenient to input the excitation through a user subroutine. For distributed loads, this is achieved with the FORCEM user subroutine; for distributed charge, this is achieved with the FLUX user subroutine; for point loads, point charge, displacements, or potential, this is achieved via the FORCDF user subroutine. When not using the table driven input, this user subroutine is flagged by the FORCDT model definition option listing the node numbers for which this user subroutine is called. Then, at each harmonic subincrement of the analysis for each of the nodes on the list, the user subroutine is called. For nodes without kinematic boundary conditions, increments of point loads and increments of point charge can be defined (this overwrites any point load input at the same nodes in the POINT LOAD option or overwriting any point charge in the POINT CHARGE option). For
Main Index
Main Index
90 Marc Volume D: User Subroutines and Special Routines
nodes with kinematic boundary conditions (that is, listed in the FIXED DISP, FIXED POTENTIAL, DISP CHANGE, or FIXED POTENTIAL options), the user can define increments of harmonic displacement and/or potential. When using the table driven input, one explicitly activates this routine on the POINT LOAD, POINT CHARGE, FIXED DISP, or FIXED POTENTIAL option. Format User subroutine FORCDF is written with the following headers: SUBROUTINE FORCDF (U,FR,FI,DUR,DUI,FREQ,DTIME,NDEG,NODE, 1 UG,XORD,NCRD,ICOMPL,INC,INCSUB) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION U(NDEG),FR(NDEG),FI(NDEG),DUR(NDEG),DUI(NDEG),UG(1) 1 XORD(1) user coding RETURN END
where Input: U
is the array of total displacements and potential at this node.
FREQ
is the excitation frequency.
DTIME
is not used.
NDEG
is the number of degrees of freedom per node.
NODE
is the global node number.
UG
is the array of total displacements in the global system.
XORD
is the array of original nodal coordinates.
NCRD
is the number of coordinates per node.
ICOMPL
is 0 if real analysis; 1 if complex analysis.
INC
is the increment number.
Required Output:
Main Index
Main Index
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.
CHAPTER 2 91 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
DUR
is the array of the real components of the harmonic displacements and harmonic potential.
DUI
is the array of the imaginary components of the harmonic displacements and harmonic potential.
The first ndeg-1 elements of the arrays refer to the structural point loads or displacements. The ndeg’th element of the arrays refers to the point charge or harmonic potential.
Main Index
Main Index
92 Marc Volume D: User Subroutines and Special Routines
■ FILM 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: Input:
Main Index
Main Index
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.
CHAPTER 2 93 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
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.
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.
Main Index
Main Index
94 Marc Volume D: User Subroutines and Special Routines
■ FLOW Input of Mass Flow Rate and Inlet Temperature Description In a heat transfer analysis involving fluid channel elements, user subroutine FLOW is available to the user for the modification of mass flow rate, inlet temperature, and film coefficient. Both the inlet temperature and mass flow rate can be dependent on time; the film coefficient can also be a function of streamline distance. Format User subroutine FLOW is written with the following header: SUBROUTINE FLOW (II,IFACE,N1,NBSURF,STOT,RATE,TINLET,SURFJ, +TSURJ,HJ,TFLUID,TIMINC,CPTIME) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION SURFJ(4),TSURJ(4),HJ(4) user coding RETURN END
where: Input: II
is the channel number.
IFACE
is the channel face identification, defining the flow direction.
N1
is the fluid channel element number.
NBSURF
is the number of channel surfaces.
STOT
is the total stream line distance.
SURFJ(I)
is the channel surface area array.
TSURJ(I)
is the channel surface temperature array.
TFLUID
is the fluid element temperature.
TIMINC
is the time increment.
CPTIME
is the current total time.
Required Output: RATE
Main Index
Main Index
is the mass flow rate (redefined by the user in this user subroutine).
CHAPTER 2 95 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
TINLET
is the inlet temperature (redefined by the user in this user subroutine).
HJ(I)
is the film coefficient of the ith surface (redefined by the user in this user subroutine).
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).
Main Index
Main Index
96 Marc Volume D: User Subroutines and Special Routines
■ 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)
foundation stiffness
EFFK(2)
foundation damping (dynamics and/or harmonics)
For Statics or Dynamics EFORC(1) foundation resistance force due to stiffness
Main Index
Main Index
CHAPTER 2 97 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
EFORC(2) foundation resistance force due to damping U(1)
total displacement
U(2)
total velocity
TIME(1)
time at beginning of increment
TIME(2)
incremental time
For Harmonics EFORC(1) real component of foundation resistance force EFORC(2) imaginary component of foundation resistance force
Main Index
Main Index
U(1)
real component of harmonic displacement
U(2)
imaginary component of harmonic displacement
TIME(1)
time
TIME(2)
frequency
N(1)
element number
N(2)
face id (ibody)
N(3)
integration point number
N(4)
boundary condition id
N(5)
boundary condition id
N(6)
internal element id
IHRESP
0 statics or dynamics 1 harmonics
98 Marc Volume D: User Subroutines and Special Routines
■ 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.
Main Index
Main Index
CHAPTER 2 99 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Main Index
Main Index
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 1st coordinate.
TS(5)
is the integration point 2nd coordinate.
TS(6)
is the integration point 3rd 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.
100 Marc Volume D: User Subroutines and Special Routines
■ 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
Main Index
Main Index
M
element number.
NN
integration point number.
ISINK
sink id.
TSINK
temperature of sink point - to be updated by the user.
TIME
time at the end of the increment.
INC
increment number.
XINT
coordinates of surface integration point.
XSINK
coordinates of sink point.
NCRD
number of coordinates.
CHAPTER 2 101 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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 Required Input
Main Index
Main Index
m
is the element number.
nn
is the integration point number.
102 Marc Volume D: User Subroutines and Special Routines
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.
Required Output
Main Index
Main Index
flux
magnitude of thermal flux to be defined.
qv
direction cosine of the flux.
tsource
temperature of source (optional).
absorp
absorption coefficient.
CHAPTER 2 103 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: 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
Main Index
Main Index
is the gap temperature (to be defined the user).
104 Marc Volume D: User Subroutines and Special Routines
■ 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 ⎪ ⎩ etc
⎫ ⎪ ⎬ + { Cn o n } ⎪ ⎭
where: { ua }
⎧ ub ⎪ ⎨ uc ⎪ ⎩ etc
The vector of displacement at node a, referred to as the tied mode. ⎫ ⎪ ⎬ ⎪ ⎭
{ Cn o n }
Vector of displacements at b, c, etc.; these nodes are referred to as the retained nodes. 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.
Main Index
Main Index
CHAPTER 2 105 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
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.
Format The user subroutine supplying the [ S ] matrix must have the following headers: SUBROUTINE UFORMSN(S,NDEG,LONGSM,ITI,NRETN,II,ISTYP CNON,LM,INTDATA,REALDATA,XORD,XORDU, NCRD,IFLAG) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION S(NDEG,LONGSM),ITI(*),CNON(NDEG), $ XORD(NCRD,*),XORDU(NDEG,*),LM(*) DIMENSION INTDATA(*),REALDATA(*) 1 2
user coding RETURN END
where: Input:
Main Index
Main Index
NDEG
is the number of degrees of freedom per node.
LONGSM
is NDEG*number of retained nodes.
ITI( )
iti(1) = tied node id iti(2)-iti(1+nretn) = retained nodes id’s
NRETN
is the number of retained nodes.
II
is the tying number.
ISTYP
is the tying type.
106 Marc Volume D: User Subroutines and Special Routines
INTDATA( )
1increment number 2cycle number 3ipass 1 = stress pass 2= heat pass 3= fluid pass 4=Joule pass 5=diffusion pass 6=electrostatic pass 7=magnetostatic pass 8=electromagnetic pass
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.
Example Suppose a change from a coarse to a fine mesh of two-dimensional isoparametric elements is required. For any node in the fine mesh which does not correspond to a node in the coarse mesh, a constraint is necessary. The displacement at these nodes can be expressed as a linear combination of the displacements of the two corner nodes of the coarse mesh since the displacement is linear between these nodes due to the element formulation.
Main Index
Main Index
CHAPTER 2 107 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
In the coarse mesh:
⎧ ⎫ ⎪ uj ⎪ ⎨ ⎬ = ⎪ vj ⎪ ⎩ ⎭
1–λ 0 0 1–λ
λ 0
0 λ
⎧ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎩
⎫ ui ⎪ ⎪ vi ⎪ ⎬ ul ⎪ ⎪ vl ⎪ ⎭
where: λ = xi j ⁄ xi l
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:
Main Index
Main Index
108 Marc Volume D: User Subroutines and Special Routines
TYING 4, -1,j,2 i,l, -1,k,2 i,l, -1,m,2 l,p, -1,n,2 l,p,
Note that this coarse to fine mesh tying constraint is in Marc as default tying types 31 and 32 for planar elements and as tying type 33 and 34 for three-dimensional brick elements. See Marc Volume A: User Information for further details.
p n xij
m l k j i xil
Figure 2-1
Main Index
Main Index
Coarse to Fine Mesh Example
CHAPTER 2 109 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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
Main Index
Main Index
110 Marc Volume D: User Subroutines and Special Routines
where: Input: is the user element number and must remain unchanged in CREDE. The internal element number is obtained as
M
mint = ielint(m)
NSTRES
is the maximum number of integration points per element, if ALL POINTS was included in the parameters, and is 1 if the CENTROID parameter is used.
NEQST
is the maximum number of layers per element.
NSTATS
is the number of state variables requested by the user in the STATE VARS parameter. (This number equals 1 if only temperature is required).
Required Output: DTDL
is the array of state variable increments or total values (to be defined here by the user).
For meshes with several element types, NEQST and NSTRES take on maximum values, but the DTDL array need only be filled as far as necessary for a particular element type. Example As an example, suppose a linear gradient through the thickness is to be imposed on a shell with NSTATS = 1. The same gradient is imposed throughout the structure. The following coding will suffice: SUBROUTINE CREDE (DTDL,M,NSTRES,NEQST,NSTATS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION DTDL (NSTATS,NEQST,NSTRES) TOUT=500.0 TIN=300.0 T=TIN DT=(TOUT-TIN)/FLOAT(NEQST-1) DO 2 I=1, NEQST DO 1 J=1, NSTRES 1 DTDL (1,I,J)=T 2 T=T+DT RETURN END
Main Index
Main Index
CHAPTER 2 111 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ INITSV 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: 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
Main Index
Main Index
is the state variable number (from columns 1-5 of the second data block of the INITIAL STATE set).
112 Marc Volume D: User Subroutines and Special Routines
Required Output: SV
Main Index
Main Index
is the array of values of this state variable; to be defined here for this element by the user.
CHAPTER 2 113 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: 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
Main Index
Main Index
is the state variable number (from columns 1-5 of the second data block of the CHANGE STATE set [model definition or history definition]).
114 Marc Volume D: User Subroutines and Special Routines
Required Output: is the array of new values of this state variable; to be defined here for this element by the user.
SV
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’:
Main Index
Main Index
cptim
is the total time at the end of the last step.
timinc
is the time increment at the current step.
CHAPTER 2 115 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: Input: OMEG
is the frequency in cycles per time unit.
I
is the degree of freedom.
Required Output: SD
Main Index
Main Index
is the spectral response density for the Ith degree of freedom to be defined by the user.
116 Marc Volume D: User Subroutines and Special Routines
■ 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:
Main Index
Main Index
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).
CHAPTER 2 117 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ USDATA Input of Initial Data Description This user subroutine is a mechanism to allow the user to read data into a userdefined common block. This common block is stored on the restart file, and available in subsequent increments. The common block USDACM must be given the correct length in this user subroutine. This common block can also be used in any other user subroutine. Format User subroutine USDATA is written with the following headers: SUBROUTINE USDATA(KIN,KOU,IC) COMMON/USDACM/MYDATA IMPLICIT REAL *8 (A-H, O-Z) user coding RETURN END
where: Input: KIN
is the unit number for input, usually 5.
IC
is the reader flag. = 1 pre-reader. = 2 real reader.
Required Output: KOU
is unit number for output, usually 6.
Note that the maximum length of USDACM should be defined here. It should agree in length in real *4 words as with that given on the USDATA model definition option.
Main Index
Main Index
118 Marc Volume D: User Subroutines and Special Routines
■ UTIMESTEP 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: Input: TIMESTEP
is the current time step as suggested by the program and which can be modified in this routine.
TIMESTEPOLD
is the current time step before it was modified by the program.
ICALL
is a flag for when the routine is called. = 1 for setting the initial time step during the reader phase. = 2 if this routine is called during an increment = 3 if this routine is called at the beginning of the increment
TIME
time at the start of the current increment
TIMELOADCASE
time period of the current load case
Required Output: TIMESTEP
is the current time step as suggested by the program and which can be modified in this routine.
This routine is called right after the time step has (possibly) been updated by the program at different stages in the analysis depending on the value of ICALL. It is allowed, but in general not recommended, to increase the time step during an increment (ICALL=2). Note that only the variable TIMESTEP should be modified in this routine. Main Index
Main Index
CHAPTER 2 119 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UVELOC 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: Input: COORD
is the array of coordinates at this node.
NCRD
is the number of coordinates.
NODE
is the node number.
Required Output: VELOC
Main Index
Main Index
is the array of nodal velocity components to be defined.
120 Marc Volume D: User Subroutines and Special Routines
■ 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.
Main Index
Main Index
CHAPTER 2 121 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format User subroutine MOTION is written with the following headers: SUBROUTINE MOTION (X,F,V,TIME,DTIME,NSURF,INC) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION X(*),V(*),F(*) user coding RETURN END
where: Input: X(3)
is the array of current die defining coordinates. X(1) = first coordinate of center of rotation. X(2) = second coordinate of center of rotation. X(3) = angle rotated around z-axis.
F(3)
is the array of current surface loads. F(1) = first component of load. F(2) = second component of load. F(3) = moment.
TIME
is the time at which data is requested.
DTIME
is the current time increment.
NSURF
is the surface number for which data is requested.
INC
is the increment number.
Required Output: V(3)
Main Index
Main Index
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.
122 Marc Volume D: User Subroutines and Special Routines
Example Assume that a rigid surface is identified as surface number 1, and is moving in the negative x-direction with a velocity of 1.0. The MOTION user subroutine can be written as follows: SUBROUTINE MOTION(X,F,V,TIME,DTIME,NSURF,INC) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION X(*),V(*),F(*) IF(NSURF.EQ.1) THEN V(1)=-1. V(2)=0. V(3)=0. ENDIF RETURN END
Main Index
Main Index
CHAPTER 2 123 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ MOTION (3-D) 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 user’s return surface velocities for that increment. Imposed displacement increments at nodal points in contact with rigid surfaces are obtained from the velocity multiplied by the time increment. The surface path becomes an explicit forward integration of velocities. Therefore, caution should be taken when there are abrupt changes in surface path direction or abrupt changes in velocity by making time increments as small as necessary. CAUTION:
Please note that if the coordinates of the center of rotation are defined unconditionally in this routine, they will be set to that same value for all increments of the analysis, causing the rigid surface to rotate around a fixed point in space. On the other hand, if the position of the center of rotation is defined only once in increment 0, as in if(inc.eq.0) then x(1)=... etc. endif the center of the rotation is updated internally as motion and deformation take place. Obviously, the results will be different for the two cases.
If, at the start of the analysis, a rigid surface is placed apart from the deformable body, the MOTION user subroutine is also used in the approaching phase. If three-dimensional elements are used, the surfaces have rigid body motions in three dimensions. It is assumed that such motions can be defined by a translation of a point (the center of rotation), plus a rotation about the axis of rotation through that point.
Main Index
Main Index
124 Marc Volume D: User Subroutines and Special Routines
Format User subroutine MOTION is written with the following headers: SUBROUTINE MOTION (X,F,V,TIME,DTIME,NSURF,INC) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION X(*),V(*),F(*) user coding RETURN END
where: Input: X(6)
is the array of current die defining coordinates. X(1) = first coordinate of center of rotation. X(2) = second coordinate of center of rotation. X(3) = third coordinate of center of rotation. Axis for specifying angular velocity: X(4) = first component of direction cosine. X(5) = second component of direction cosine. X(6) = third component of direction cosine.
F(6)
is the array of current surface loads. F(1) = first component of load. F(2) = second component of load. F(3) = third component of load. F(4) = first component of moment. F(5) = second component of moment. F(6) = third component of moment.
TIME
is the time at which data is requested.
DTIME
is the current time increment.
NSURF
is the surface number for which data is requested.
INC
is the increment number.
Required Output: V(4)
Main Index
Main Index
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).
CHAPTER 2 125 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Example Assume that a rigid surface is identified as surface number 2 and is moving in the negative x-direction with a velocity of 1.0. The MOTION user subroutine can be written as follows: SUBROUTINE MOTION(X,F,V,TIME,DTIME,NSURF,INC) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION X(*),V(*),F(*) IF(NSURF.NE.2) THEN V(1)=-1. V(2)=0. V(3)=0. V(4)=0.0 ENDIF RETURN END
Main Index
Main Index
126 Marc Volume D: User Subroutines and Special Routines
■ UGROWRIGID 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
where: Input: MD
is the rigid body number.
TIME
is the time at which data is requested.
Required Output: RELX
is the relative size defined by the user in the x-direction with respect to the original size.
RELY
is the relative size defined by the user in the y-direction with respect to the original size.
RELZ
is the relative size defined by the user in the z-direction with respect to the original size.
Note: (1) RELX, RELY, and RELZ must be equal to one another if a rotation is applied to the rigid body. (2) At time = 0, RELX = RELY = RELZ = 1.0.
Main Index
Main Index
CHAPTER 2 127 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UFRIC 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.
is the friction type based upon the 4th field of the 2nd data block of the UFRICTION option.
IFRIC
Main Index
Main Index
128 Marc Volume D: User Subroutines and Special Routines
Format User subroutine UFRIC is written with the following headers: SUBROUTINE UFRIC (MIBODY,X,FN,VREL,TEMP,YIEL,FRIC,TIME,INC,NSURF) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION X(2),MIBODY(4),VREL(1),TEMP(2) user coding RETURN END
where Input: 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.
FN
is the normal stress/force being applied at that point.
VREL
is the relative sliding velocity at contact point.
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.
Required Output: FRIC
Main Index
Main Index
is the friction coefficient or friction factor to be provided by the user.
CHAPTER 2 129 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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.
Main Index
Main Index
130 Marc Volume D: User Subroutines and Special Routines
Format User subroutine UFRICBBC is written with the following headers: SUBROUTINE UFRICBBC(MIBODY1,DPOS1,X1,TEMP1, MIBODY2,DPOS2,X2,TEMP2, FN,VREL,TIME,TIMINC,INC,FRIC) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION MIBODY1(3),X1(3),MIBODY2(3),X2(3),VREL(2) user coding RETURN END
where Input: Touching point: MIBODY1(1) is the user number of the touching element. MIBODY1(2) is the internal number of the touching element. MIBODY1(3) is the number of the touching body. DPOS1 is the natural coordinate (between 0 and 1) of the touching point on the touching element. X1 are the updated coordinates of the touching point. TEMP1 is the temperature of the touching point. Touched point: MIBODY2(1) is the user number of the touched element. MIBODY2(2) is the internal number of the touched element. MIBODY2(3) is the number of the touched body. DPOS2 is the natural coordinate (between 0 and 1) of the touched point on the touched element. X2 are the updated coordinates of the touched point. TEMP2 is the temperature of the touched point. Other input: FN is the normal force being applied at that point. VREL is the relative sliding velocity of the touching point with respect to the touched point. TIME is the time at the beginning of the increment. TIMINC is the current time increment. INC is the increment number. FRIC is the friction coefficient. Required Output: FRIC
Main Index
Main Index
is the friction coefficient.
CHAPTER 2 131 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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
where: Input: IPATCH
is the current patch number of this entity.
NDIE
is the surface (body) number.
NPATCH
is the total number of patches defining this entity.
Required Output: XYZ
Main Index
Main Index
are the three (x, y, z) coordinates of the four points of the patch to be entered by the user.
132 Marc Volume D: User Subroutines and Special Routines
■ 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. 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. FNORM
Format User subroutine SEPFOR is written with the following headers: SUBROUTINE SEPFOR (FNORM,FTANG,IBODY,NNODE,INC) IMPLICIT REAL *8 (A-H, O-Z) user coding RETURN END
where: Input:
Main Index
Main Index
IBODY
is the current body number the node touched.
NNODE
is the current touched external node number.
INC
is the current increment number.
CHAPTER 2 133 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Output: FNORM
is the normal separation force to be supplied by the user.
FTANG
is the tangential separation force to be supplied by the user.
Example If the user desires the default separation force for surface 2, and does not want any separation of nodes from surface 3, the user subroutine is written as follows:
C C
SUBROUTINE SEPFOR (FNORM,FTANG,IBODY,NNODE,INC) IMPLICIT REAL *8 (A-H, O-Z) IF(IBODY.NE.3)GO TO 999 RESET FNORM TO A VERY LARGE VALUE TO ELIMINATE POSSIBILITY OF SEPARATION FNORM=2.E7
C WRITE(6,101) IBODY,FNORM,NNODE,INC 101 FORMAT(‘THE SEPARATION FORCE OF BODY ‘,15, *HAS BEEN RESET TO BE ‘,E15.5, *FOR NODE ‘,15,’ AT INCREMENT ‘,15) 999 CONTINUE RETURN END
Main Index
Main Index
134 Marc Volume D: User Subroutines and Special Routines
■ SEPFORBBC 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. Format User subroutine SEPFORBBC is written with the following headers: SUBROUTINE SEPFORBBC(MIBODY1,MIBODY2,TIME,TIMINC,INC,FSEP) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION MIBODY1(3),MIBODY2(3) user coding RETURN END
Main Index
Main Index
CHAPTER 2 135 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
where: Input: Touching element: MIBODY1(1)
is the user number of the touching element.
MIBODY1(2)
is the internal number of the touching element.
MIBODY1(3)
is the number of the touching body.
Touched element: MIBODY2(1)
is the user number of the touched element.
MIBODY2(2)
is the internal number of the touched element.
MIBODY2(3)
is the number of the touched body.
Other input: TIME
is the time at the beginning of the increment.
TIMINC
is the current time increment.
INC
is the increment number.
FSEP
is the separation force.
Required Output: FSEP
Main Index
Main Index
is the separation force.
136 Marc Volume D: User Subroutines and Special Routines
■ 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. 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. SNORM
Format User subroutine SEPSTR is written with the following headers: SUBROUTINE SEPSTR (SNORM,STANG,IBODY,NNODE,INC) IMPLICIT REAL *8 (A-H, O-Z) user coding RETURN END
where: Input:
Main Index
Main Index
IBODY
is the current body number the node touched.
NNODE
is the current touched external node number.
INC
is the current increment number.
CHAPTER 2 137 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Output:
Main Index
Main Index
SNORM
is the normal separation stress to be supplied by the user.
STANG
is the tangential separation stress to be supplied by the user.
138 Marc Volume D: User Subroutines and Special Routines
■ 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.
Main Index
Main Index
CHAPTER 2 139 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format User subroutine UHTCOE is written with the following headers: SUBROUTINE UHTCOE(MIBODY,XP,TEMP,IBODY,ICONNO,XORD,XT,DXT, TMPALL,TMPALO,TOTINC,TIMINC,INC,NCRD, NDEGS,NDEGH,NCRDMX,NDEGMX,NBCD,NBCN,TSINK, HTCOEF,IFLAG) IMPLICIT REAL *8(A-H,O-Z) DIMENSION MIBODY(*),XP(*),ICONNO(*),XORD(*),XT(*),DXT(*), + TEMP(*),TMPALL(*),NBCD(*),,TSINK(*),TMPALO(*) + + +
user coding RETURN END
where: Input:
Main Index
Main Index
MIBODY(1)
is the element number where the surface flux is being calculated.
MIBODY(2)
is the side of the element.
MIBODY(3)
is the integration point of said side.
MIBODY(4)
is the internal element number.
XP(NCRD)
are the coordinates of point where calculation is being made; it is updated to end of increment.
TEMP(2)
is the current temperature of said point.
TEMP(4)
is the current voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
ICONNO(*)
are the nodal points that make up the boundary of the deformable surfaces declared in the CONTACT option.
NBCN
is the upper bound to the number of nodes on a flexible surface boundary.
NBCD(*)
is the array of actual number of boundary nodes on flexible surfaces.
XORD(*)
is the array of original nodal point coordinates.
XT(*)
is the array of nodal point displacements.
DXT(*)
is the array of nodal displacement increments.
TMPALL(*)
is the array of nodal temperatures (current estimate at end of increment).
TMPALO(*)
is the array of nodal temperatures (at beginning of increment).
TOTINC
is the current accumulated time.
140 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
is the sink temperature declared in the CONTACT option for this flexible surface.
CHAPTER 2 141 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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
Main Index
Main Index
142 Marc Volume D: User Subroutines and Special Routines
where: Input: MIBODY(1)
is the element where the surface flux is being calculated.
MIBODY(2)
is the side of said element.
MIBODY(3)
is the integration point of said side.
MIBODY(4)
is the internal element number.
XP(NCRD)
is the coordinates of point where calculation is being made; it is updated to end of increment.
TEMP(2)
is the temperature of said pointer.
TEMP(4)
is the voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
IOBODY
is the surface being contacted.
FN
is the contact pressure between contacting surfaces.
TOTINC
is the current accumulated time.
TIMINC
is the time increment.
INC
is the current increment.
NCRD
is the number of coordinates per node.
NDEG
is the number of degrees of freedom per node.
TSINK(2)
is the temperature of surface being contacted.
TSINK(4)
is the voltage of surface being contacted.
TSINK(5)
is the pressure of surface being contacted.
Required Output: HTCOEF
is the heat transfer coefficient between surfaces in contact, such that the heat flux per unit area that leaves the surface is: Q = HTCOEF (TEMP(2) - TSINK(2)).
Main Index
Main Index
CHAPTER 2 143 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: Input:
Main Index
Main Index
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
144 Marc Volume D: User Subroutines and Special Routines
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 stress components
NSHEAR
is the number of shear stress components
DTIME
is the time increment
Required Output:
Main Index
Main Index
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
CHAPTER 2 145 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: q = HD ( T – TD ) + HDN ( T – TD )
HE X
4
4
+ EMS ( T – TD )
d ⎞ ⎛ HDC – ( HDC – HDD ) ------------ ( T – TD ) ⎝ d n e a r⎠
where:
Main Index
Main Index
q
is the heat flux entering the surface.
T
is the surface temperature.
TD
is the interpolated temperature of the body being contacted.
HD
is the heat transfer coefficient between surfaces.
HDN
is the heat transfer coefficient of natural convection between surfaces.
HEX
is the exponent associated with natural convection between surfaces.
EMS
is the emissivity for radiation calculation between surfaces.
HDC
is the upper bound in distance dependent heat transfer coefficient.
HDD
is the lower bound in distance dependent heat transfer coefficient.
d
is the distance between the surfaces.
dn e a r
is the upper limit of the near contact distance.
146 Marc Volume D: User Subroutines and Special Routines
By modifying HD, HDN, HEX, EMS, HDC, and HDD, the user can model varying heat transfer conditions along the boundary, which are dependent of the distance between the contacting surfaces. Format User subroutine UHTNRC is written with the following headers: SUBROUTINE UHTNRC(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC, +
TIMINC,INC,NCRD,NDEG,TSINK,HTCOEF,
+
HTNAT,EXPNAT,EMIS,HDD,HC,D) IMPLICIT REAL*8(A-H, O-Z) DIMENSION MIBODY(4),XP(*),TEMP(*),TSINK(*) RETURN END
where: Input:
Main Index
Main Index
MIBODY(1)
is the element where the surface flux is being calculated.
MIBODY(2)
is the side of said element.
MIBODY(3)
is the integration point of said side.
XP(NCRD)
is the coordinates of point where calculation is being made; it is updated to end of increment.
TEMP(2)
is the temperature of said point.
TEMP(4)
is the voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
IOBODY
is the surface being contacted.
FN
is the contact pressure between contacting surfaces.
TOTINC
is the current accumulated time.
TIMINC
is the time increment.
INC
is the current increment.
NCRD
is the number of coordinates per node.
NDEG
is the number of degrees of freedom per node.
TSINK(2)
is the temperature of surface being contacted.
TSINK(4)
is the voltage of surface being contacted.
TSINK(5)
is the pressure of surface being contacted.
CHAPTER 2 147 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
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)) SIGMA * EMIS * (TEMP(2) ** 4 (HC - (HC - HDD) * d/dnear) *
Main Index
Main Index
+ ** EXPNAT + - TSINK(2) ** 4) + (TEMP(2) - TSINK(2))
148 Marc Volume D: User Subroutines and Special Routines
■ 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.
Main Index
Main Index
CHAPTER 2 149 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format User subroutine UVTCOE is written with the following headers: SUBROUTINE UVTCOE(MIBODY,XP,TEMP,IBODY,ICONNO,XORD,XT,DXT, +
TMPALL,TMPALO,TOTINC,TIMINC,INC,NCRD,
+
NDEGS,NDEGH,NCRDMX,NDEGMX,NBCD,NBCN,TSINK,
+
ETCOEF,IFLAG) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION MIBODY(*),XP(*),ICONNO(*),XORD(*),XT(*),DXT(*),
+
TEMP(*),TMPALL(*),NBCD(*),TSINK(*) user coding RETURN END
where: Input:
Main Index
Main Index
MIBODY(1)
is the element where the surface flux is being calculated.
MIBODY(2)
is the side of said element.
MIBODY(3)
is the integration point of said side.
MIBODY(4)
is the internal element number.
XP(NCRD)
is the coordinates of point where calculation is being made; it is updated to end of increment.
TEMP(2)
is the temperature of said point.
TEMP(4)
is the voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
ICONNO(*)
are the nodal points that make the boundary of deformable surfaces declared in option contact.
NBCN
is the upper bound to the number on nodes on a flexible surface boundary.
NBCD(*)
is the array of actual number of boundary nodes on flexible surfaces.
XORD(*)
is the array of original nodal point coordinates.
XT(*)
is the array of nodal point displacements.
DXT(*)
is the array of nodal displacement increments.
TMPALL(*)
is the array of nodal voltage (current estimate at end of increment).
TMPALO(*)
is the array of nodal voltage (at beginning of increment).
150 Marc Volume D: User Subroutines and Special Routines
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.
Main Index
Main Index
CHAPTER 2 151 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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
Main Index
Main Index
152 Marc Volume D: User Subroutines and Special Routines
where: Input: MIBODY(1)
is the element where the surface flux is being calculated.
MIBODY(2)
is the side of said element.
MIBODY(3)
is the integration point of said side.
XP(NCRD)
are the coordinates of point where calculation is being made; it is updated to end of increment.
TEMP(2)
is the temperature of said point.
TEMP(4)
is the voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
IOBODY
is the surface being contacted.
FN
is the contact pressure between contacting surfaces.
TOTINC
is the current accumulated time.
TIMINC
is the time increment.
INC
is the current increment.
NCRD
is the number of coordinates per node.
NDEG
is the number of degrees of freedom per node.
TSINK(2)
is the temperature of surface being contacted.
TSINK(4)
is the voltage of surface being contacted.
TSINK(5)
is the pressure of surface being contacted.
ETCOEF
is the electrical transfer coefficient between surfaces in contact, such that the electrical flux per unit area that leaves the surface is
TSINK(2)
is the temperature of surface being contacted.
TSINK(4)
is the voltage of surface being contacted.
TSINK(5)
is the pressure of surface being contacted.
Required Output: ETCOEF
is the electrical transfer coefficient between surfaces in contact, such that the electrical flux per unit area that leaves the surface is: Q = ETCOEF (TEMP(4) - TSINK(4))
Main Index
Main Index
CHAPTER 2 153 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: d q = ET ( V – VD ) + ⎛ ETC – ( ETC – EDD ) -------------⎞ ( V – VD ) ⎝ d n e a r⎠
where: q
is the electrical flux entering the surface.
V
is the surface voltage.
VD
is the interpolated voltage of the body being contacted.
ET
is the electrical transfer coefficient between surfaces.
ETC
is the upper bound in distance dependent electrical transfer coefficient.
EDD
is the lower bound in distance dependent electrical transfer coefficient.
d
is the distance between the surfaces.
dn e a r
is the upper limit of the near contact distance.
By modifying ET, ETC and EDD, the user can model varying electrical transfer conditions along the boundary, which are dependent of the distance between the contacting surfaces.
Main Index
Main Index
154 Marc Volume D: User Subroutines and Special Routines
Format User subroutine UVTNRC is written with the following headers: SUBROUTINE UVTNRC(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC, +
TIMINC,INC,NCRD,NDEG,TEMPO,ETCOEF,ETDD,ETC,D) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION MIBODY(4),XP(*),TEMP(*),TEMPO(*) RETURN END
where: Input: MIBODY(1) is the element where the surface flux is being calculated. MIBODY(2) is the side of said element. MIBODY(3) is the integration point of said side.
Main Index
Main Index
XP(NCRD)
is the coordinates of point where calculation is being made; it is updated to end of increment.
TEMP(2)
is the temperature of said point.
TEMP(4)
is the voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
IOBODY
is the surface being contacted.
FN
is the contact pressure between contacting surfaces.
TOTINC
is the current accumulated time.
TIMINC
is the time increment.
INC
is the current increment.
NCRD
is the number of coordinates per node.
NDEG
is the number of degrees of freedom per node.
TEMPO(2)
is the temperature of surface being contacted.
TEMPO(4)
is the voltage of surface being contacted.
TEMPO(5)
is the pressure of surface being contacted.
D
is the distance between the surfaces.
CHAPTER 2 155 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Required Output:
ETCOEF
is the electrical transfer coefficient between surfaces in contact.
ETDD
is the lower bound of the distance dependent electrical transfer coefficient.
ETC
is the upper bound of the distance dependent electrical transfer coefficient, such that the electrical flux per unit area that leaves the surface is Q = ETCOEF (TEMP(4) - TEMPO(4)) + (ETC - (ETC - ETDD) * d/dnear) * (TEMP(4) TEMPO(4))
Main Index
Main Index
156 Marc Volume D: User Subroutines and Special Routines
■ 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(*)
Main Index
Main Index
CHAPTER 2 157 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
user coding RETURN END
where: MIBODY(1)
is the element where the surface flux is being calculated.
MIBODY(2)
is the side of said element.
MIBODY(3)
is the integration point of said side.
MIBODY(4)
is the internal element number.
XP(NCRD)
are the coordinates of point where calculation is being made, updated to end of increment.
TEMP(2)
is the temperature of said point.
TEMP(4)
is the voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
NF(NBCN,1) are the nodal points that make the boundary of deformable surfaces declared in the CONTACT option.
Main Index
Main Index
NBCN
is the upper bound to the number of nodes on a flexible surface boundary.
NBCD(1)
is the array of actual number of boundary nodes on flexible surfaces.
XORD(1)
is the array of original nodal point coordinates.
XT(1)
is the array of nodal point displacements.
DXT(1)
is the array of nodal displacement increments.
PRSALL(1)
is the array of nodal pressure (current estimate at end of increment).
PRSALO(1)
is the array of nodal pressure (at beginning of increment).
TOTINC
is the current accumulated time.
TIMINC
is the time increment.
INC
is the increment number.
NCRD
is the number of coordinates per node of this element.
NDEGS
is the number of degrees of freedom per node for structural (stress) part of the analysis.
NDEGH
is the number of heat transfer degrees of freedom.
NCRDMX
is the maximum number of coordinate per node in this model.
NDEGMX
is the maximum number of structural degrees of freedom per node in this model.
TSINK(2)
is the sink temperature declared in contact option for this flexible surface.
158 Marc Volume D: User Subroutines and Special Routines
TSINK(4)
is the sink voltage declared in contact option for this flexible surface.
TSINK(5)
is the sink pressure declared in contact option for this flexible surface.
IFLAG
=0 PRCOEF is a heat transfer coefficient =1 PRCOEF is a flux.
PRCOEF
is the mass diffusion coefficient between surface and environment, such that the mass flux per unit area that leaves the surface is: Q = PRCOEF (TEMP(5) - TSINK(5))
or the mass flux per unit area that leaves the surface. PRCOEF is to be defined here.
Main Index
Main Index
CHAPTER 2 159 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UMDCON 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 P PD PC
is the mass flux entering the surface. is the surface pressure. is an interpolated pressure of the body being contacted is the film coefficient.
By modifying HPD, the user can model varying heat transfer conditions along the contact regions. Format User subroutine UMDCON is written with the following headers: SUBROUTINE UMDCON(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC,TIMINC, +INC,NCRD,NDEG,TSINK,PC) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION MIBODY(4),XP(1),TEMP(*),TSINK(*) user coding RETURN END
Main Index
Main Index
160 Marc Volume D: User Subroutines and Special Routines
where: MIBODY(1)
is the element where the surface flux is being calculated.
MIBODY(2)
is the side of said element.
MIBODY(3)
is the integration point of said side.
MIBODY(4)
is the internal element number.
XP(NCRD)
are the coordinates of point where calculation is being made, updated to end of increment.
TEMP(2)
is the temperature of said point.
TEMP(4)
is the voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
IOBODY
is the surface being contacted.
FN
is the contact pressure between contacting surfaces.
TOTINC
is the current accumulated time.
TIMINC
is the time increment.
INC
is the increment number.
NCRD
is the number of coordinates per node.
NDEG
is the number of degrees of freedom per node.
TSINK(2)
is the temperature of surface being contacted.
TSINK(4)
is the voltage of surface being contacted.
TSINK(5)
is the pressure of surface being contacted.
PC
is the heat transfer coefficient between surface in contact, such that the heat flux per unit area that leaves the surface is: Q = PC (P-PD)
Main Index
Main Index
CHAPTER 2 161 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UMDNRC 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.
is the distance at which bodies are considered to be near one another, defined by user in the CONTACT TABLE option. DQNEAR
Main Index
Main Index
162 Marc Volume D: User Subroutines and Special Routines
Format User subroutine UMDNRC is written with the following headers: SUBROUTINE UMDNRC(MIBODY,XP,TEMP,IBODY,IOBODY,FN,TOTINC, * TIMINC,INC,NCRD,NDEG,TEMPO,PRCOEF,PRDD,PRC,DN) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION MIBODY(4),XP(*),TEMP(*),TEMPO(*) user coding RETURN END
where: Input: MIBODY(1) is the element where the surface flux is being calculated. MIBODY(2) is the side of said element. MIBODY(3) is the integration point of said side. TEMP(2)
is the temperature of said point.
TEMP(4)
is the voltage of said point.
TEMP(5)
is the pressure of said point.
IBODY
is the flexible surface to which point belongs.
IOBODY
is the surface being contacted.
FN
is the contact pressure between contacting surfaces.
TOTINC
is the current accumulated time.
TIMINC
is the time increment.
INC
is the current increment.
NCRD
is the number of coordinates per node.
NDEG
is the number of degrees of freedom per node.
TEMPO(2)
is the temperature of surface being contacted.
TEMPO(4)
is the voltage of surface being contacted.
TEMPO(5)
is the pressure of surface being contacted.
DN
is the distance to the contact surface.
Required Output:
Main Index
Main Index
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
CHAPTER 2 163 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UNORST Definition of Normal Stress, Flow Stress and Temperature at Contact Node Description With this user subroutine, The user can define the normal stress at each node in contact instead of using the extrapolated value from the integration points. It is only called for user-defined elements and is used in the calculation of Coulomb friction for contact analysis. The magnitude of the user-defined normal stress must be in the local system of the patch to which the nodal point is in contact with. Format User subroutine UNORST is written with the following headers: +
SUBROUTINE UNORST(STRINT,USTR,TRANS,NODE,IBODY,KCUS, NDIE,NODCLS,LMM,NOD,M,N,TIMINC,NDIM,NDEG,NSTRMX, NNODE,INTEL) IMPLICIT REAL *8 (A-H, O-Z)
C DIMENSION STRINT(8,INTEL),USTR(NDIM,1) DIMENSION LMM(1),NODCLS(1),TRANS(3,3),KCUS(2) user coding C C RETURN END
where: Input: STRINT (1-NSTRMX,INTEL) are the stresses at all integration points. STRINT (NSTRMX+1,INTEL) is the temperature at all integration points. STRINT (NSTRMX+2,INTEL) is the flow stress at all integration points.
Main Index
Main Index
USTR (2,NODE)
is the current sliding velocity in the first local direction.
USTR(NSTRMX+1, NNODE)
is the temperature at node.
USTR(NSTRMX+2, NNODE)
is the flow stress at node.
164 Marc Volume D: User Subroutines and Special Routines
USTR(NSTRMX+3, NNODE)
is the previous sliding velocity 1.
USTR(NSTRMX+4, NNODE)
is the previous sliding velocity 2.
USTR (2,NODE)
is the current sliding velocity in the first local direction.
USTR (3,NODE)
(in 3-D contact) current sliding velocity in the second local direction.
TRANS
local transformation matrix at the node.
For 3-D contact: TRANS(1-3,1)
three components of local x-direction.
TRANS(1-3,2)
three components of local y-direction.
TRANS(1-3,3)
three components of local z-direction.
For 2-D contact:
Main Index
Main Index
TRANS(1,1) and TRANS(2,2)
is the directional cosine.
TRANS(1,2)
-sine, TRANS(2,1) is the directional cosine.
TRANS(3,3)
= 1.
NODE
is the current local node number belonging to the element face (it is neither a Marc internal node number nor an external user node number).
IBODY
the element side or face number that the node belongs to.
KCUS(1)
is your layer number (always 1 for continuum elements).
KCUS(2)
is the internal layer number (always 1 for continuum element).
NDIE
is the die number that the current node touches.
NODCLS
is the node array to indicate if the nodes on the IBODY are currently in contact. Zero value indicates no contact and nonzero value is the die number it currently touches.
CHAPTER 2 165 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
LMM
is the connectivity array for current element side or face (local node number). for 2-D contact it contains IBODY and IBODY+1 for 3-D contact it stores 1,2,3,4, for 3-D shell element: IBODY=1 it stores 1,2,3,4, and 9,10,11,12 if 20-node element. IBODY=2 it stores 6,5,8,7, and 13,14,15,16 if 20-node element. IBODY=3 it stores 2,1,5,6, and 9,17,13,18 if 20-node element. IBODY=4 it stores 3,2,6,7, and 10,18,14,19 if 20-node element. IBODY=5 it stores 4,3,7,8, and 11,19,15,20 if 20-node element. IBODY=6 it stores 1,4,8,5, and 12,20,16,17 if 20-node element.
NOD
is the external user node number.
M
is the element number.
N
is the elsto buffer number.
TIMINC
is the time increment.
NDIM
is the NSTRMX+4 for 3-D contact.
NDIM
is the NSTRMX+3 for 2-D contact.
NDEG
is the number of degrees of freedom per node.
NSTRMX
is the maximum number of stress components.
NNODE
is the maximum number of nodes per element.
INTEL
is the number of integration points at which stresses are stored.
Required Output:
Main Index
Main Index
USTR (NSTRMX1,NODE)
is the normal stress at current node.
USTR (NSTRMX+1,NODE)
is the temperature at current node.
USTR (NSTRMX+2,NODE)
is the flow stress at current node.
166 Marc Volume D: User Subroutines and Special Routines
Example +
SUBROUTINE UNORST(STRINT,USTR,TRANS,NODE,IBODY,KCUS, NDIE,NODCLS,LMM,NOD,M,N,TIMINC,NDIM,NDEG,NSTRMX,NNODE, INTEL) INCLUDE ’../COMMON/IMPLICIT DIMENSION STRNOD(NDIM,NNODE),STRINT(8,INTEL),USTR(NDIM,1) DIMENSION LMM(1),NODCLS(1),TRANS(3,3),KCUS(2) RETURN END
Main Index
Main Index
CHAPTER 2 167 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ INITPL 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: Input: LAYERS
INTPTS M
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. is the number of integration points in this element. It is 1 if the CENTROID parameter is used. is the element number.
Required Output: SV
Main Index
Main Index
is the array of equivalent plastic strains, to be defined here for this element by the user.
168 Marc Volume D: User Subroutines and Special Routines
■ 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: Input: INTPTS
is the number of integration points associated with this element.
M
is the user’s element number.
Required Output: POREP
Main Index
Main Index
is the array of pore pressures to be defined for this element.
CHAPTER 2 169 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: Input: INTPTS
is the number of integration points associated with this element.
M
is the user’s element number.
Required Output: POREP
Main Index
Main Index
is the array of pore pressures to be defined for this element.
170 Marc Volume D: User Subroutines and Special Routines
■ 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
where: Input: FREQC
is the frequency in cycles per time.
IBODYT
is the number of the acoustic body.
IBODYR
is the number of the boundary body.
Required Output:
Main Index
Main Index
OXK1
= 1./k1 where k1 is the coefficient of reactive boundary.
OC1
= 1./c1 where c1 is the coefficient reactive boundary. 1 1 iω ------------- = ----- + ------ , c1 k1 Z(ω)
Note that the complex admittance
1 ------------Z(ω)
is defined as
frequency in radians per time and
Z(ω)
the complex impedance.
with
ω
the
CHAPTER 2 171 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: Input:
Main Index
Main Index
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.
172 Marc Volume D: User Subroutines and Special Routines
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.
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:
Main Index
Main Index
CMASS
is the current gas mass (for post processing only).
CTEMP
is the current gas temperature (for post processing only).
CHAPTER 2 173 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: Input: DVVECT
is the array of current values of design variables.
Required Output:
Main Index
Main Index
OBJFN
is the objective function.
GRADOF
is the gradient vector of the objective function with respect to the design variables.
174 Marc Volume D: User Subroutines and Special Routines
Example SUBROUTINE UOBJFN(OBJFN,DVVECT,GRADOF) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION DVVECT(*),GRADOF(*) C OBJFN=2.5D00*DVVECT(1)+0.3D00*DVVECT(2)/DVVECT(3) GRADOF(1)=2.5D00 GRADOF(2)=0.3D00/DVVECT(3) GRADOF(3)=-0.3D00*DVVECT(2)/DVVECT(3)**2 C RETURN END
Main Index
Main Index
CHAPTER 2 175 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UPRFILM 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: Input:
Main Index
Main Index
TS(1)
estimated surface pressure at the end of increment.
TS(2)
surface pressure at the beginning of increment.
TS(3)
not used.
TS(4)
integration point 1st coordinate.
TS(5)
integration point 2nd coordinate.
TS(6)
integration point 3rd coordinate.
176 Marc Volume D: User Subroutines and Special Routines
TS(7)
first component of direction cosine of surface normal.
TS(8)
second component of direction cosine of surface normal.
TS(9)
third component of direction cosine of surface normal.
N(1)
element number.
N(2)
ibody number.
N(3)
integration point number.
N(4)
boundary condition id.
N(5)
boundary condition id.
N(6)
not used.
N(7)
internal element number.
TIME
time.
INC
increment number.
Required Output:
Main Index
Main Index
UPFILM
pressure film coefficient.
PA
Ambient pressure.
CHAPTER 2 177 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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. T
The flux is calculated as q = α H ⋅ f c ⎛⎝ H r e c – H e ; S⎞⎠ , where: αH
is the heat transfer coefficient.
fc
is the correction factor, entered here.
Hr e c
is the specific recovery of the external flow.
He ;
TS
is the specific enthalpy of the external flow, calculated for the frozen chemical composition existing at the edge of the boundary layer, but evaluated at the surface temperature T s f e
Format User subroutine UFAH is written with the following headers: SUBROUTINE UFAH(M,NN,ISFENID,INC,NCRD,COORD,TEMP,DTEMP, * TIME,DTIME,LINRIZE,KUPSTRM,ALPHAH0,ALPHAM0,BPRIMEC, * TRANSH,RHOCURI,FAHN,FAHN1) IMPLICIT REAL*8 (A-H,0-Z) user coding RETURN END
where: Input:
Main Index
Main Index
M
is the element ID.
NN
is the integration point number.
ISFENID
is the surface energy ID.
INC
is the increment number
178 Marc Volume D: User Subroutines and Special Routines
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. 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 alphaH (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 alphaH - at beginning of increment
Required Output: FAHN1
Main Index
Main Index
is the correction factor of alphaH - at end of increment
CHAPTER 2 179 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ 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: Input: M NN IREG ISFENID INC NCRD COORD TEMP DTEMP TIME DTIME
is the element ID. is the integration point number. is the receding surface input ID. is the surface energy ID. is the increment number. is the number of coordinates. is the integration point coordinates. is the temperature at beginning of increment. is the increment of temperature. is the time at the beginning of the increment. is the increment of time.
Required Output: FLUXMEC is the rate of recession due to mechanical erosion
Main Index
Main Index
180 Marc Volume D: User Subroutines and Special Routines
■ UFTHP 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 t h, p ⋅ Σ G t h, p, j ( V p, j , D p, j , α p, t ) ⋅ m· p, j ⋅ ΔH r, p, j f t h, 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 t h, p, j = G t h, 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 ( [ Jkg – 1 ] ) . f t h, p = f t h, 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.
Main Index
Main Index
CHAPTER 2 181 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
Format User subroutine UFTHP is written with the following headers: SUBROUTINE UFTHP(M,NN,ISFENID,INC,NCRD,COORD,TEMP,DTEMP, * TIME,DTIME,TEMP1,TEMP2,FTHP) IMPLICIT REAL*8 (A-H,O-Z) user coding RETURN END
where: Input: M
is the element ID.
NN
is the integration point number.
ISFENID is the surface energy ID. INC
is the increment number.
NCRD
is the number of coordinates.
COORD
is the integration point coordinates.
TEMP
is the temperature at beginning of increment.
DTEMP
is the increment of temperature.
TIME
is the time at the beginning of the increment.
DTIME
is the increment of time.
TEMP1
is the first temperature for empirical correction for thermochemical ablation by impacting particles.
TEMP2
is the second temperature for empirical correction for thermochemical ablation by impacting particles.
Required Output: FTHP
Main Index
Main Index
is the correction factor for thermochemical ablation by impacting particles.
182 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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
CHAPTER 2 183 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
TANGLP
is the angle of impact of liquid particles
Required Output: TGLP
Main Index
Main Index
correlation factor between momentum of particles and flux
184 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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.
CHAPTER 2 185 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
MDOTLP
is the rate of change of mass of liquid particles.
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:
Main Index
Main Index
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.
186 Marc Volume D: User Subroutines and Special Routines
■ 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: 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.
Main Index
Main Index
INC
is the increment number.
NCRD
is the number of coordinates.
CHAPTER 2 187 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
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 model A.
TEMP2
is the second temperature for empirical model A.
Required Output: FMEC
Main Index
Main Index
is the factor correction for erosion by impacting particles.
188 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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.
CHAPTER 2 189 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
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. ANGLP
is the angle of impact of liquid particles.
IDANGLP
is the table ID for angle of impact of liquid particles.
Required Output: TGMEC
Main Index
Main Index
is the correlation factor between momentum of particles and flux.
190 Marc Volume D: User Subroutines and Special Routines
■ 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 Input: If recession calculated at surface integration points, see the ABLATION parameter M
is the element number.
N
is the elsto number.
NN
is the surface integration point number.
If recession calculated at surface nodal points, see the ABLATION parameter M
is the internal node number.
N
is the user node number.
NN
is not used = 0.
IREG
is the receding surface input ID.
INC
is the increment number.
TEMP
is the temperature at the beginning of the increment.
DTEMP
is the incremental temperature.
AMDOTP
is the mass flow rate if pyrolysis calculation.
ARCL(1) is the arc length.
Main Index
Main Index
CHAPTER 2 191 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
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.
NCRD
is the number of coordinates.
RHOCURI is the effective material density. Required Output: RECRATE is the recession rate.
Main Index
Main Index
192 Marc Volume D: User Subroutines and Special Routines
■ 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 Input: N
is the user node number.
NCRD
is the number of directions (2 or 3).
Required Output: UNORM
Main Index
Main Index
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.
CHAPTER 2 193 User-defined Loading, Boundary Conditions, and State Variables User Subroutines
■ UWEAR Define the Rate of Mechanical Wear on a Surface Description This user subroutine is used to control the amount of mechanical wear that occurs at a surface as an alternative to the Archard model. The wear may be used as an indicator to determine the failure of the part or may be applied to the nodal coordinates of the surface nodes. This capability is activated through the RECEDING SURFACE option. Format User subroutine UWEAR is written with the following header: SUBROUTINE UWEAR(WRND,N,NUSER,IREG,MATS,INC, *
TIME,TIMINC,COORD,I2OR3,DIRCOS,COFORND,FRFORND,
*
COSTRS,FRSTRS,IDIERE,WEARCF,TEMPI,RELVELND,ET,YD,
*
COEF) INTEGER N,NUSER,IREG,MATS,INC,I2OR3,IDIERE REAL*8 WRND,TIME,TIMINC,COORD,DIRCOS,COFORND,
*
FRFORND,COSTRS,FRSTRS,WEARCF,TEMPI,RELVELND,
*
ET,YD,COEF DIMENSION DIRCOS(I2OR3) user coding RETURN END
where Input:
Main Index
Main Index
N
is the internal node id.
NUSER
is the user node id.
IREG
is the recession id.
MATS
is the material id.
INC
is the increment number.
TIME
is the time at begining of increment.
194 Marc Volume D: User Subroutines and Special Routines
TIMINC
is the incremental time.
COORD
is the coordinate position of the node.
I2OR3
is 2 or 3 based upon dimension.
DIRCOS
is the direction cosine of the surface at this point.
COFORND
is the contact force.
FRFORND
is the friction force.
COSTRS
is the contact stress.
FRSTRS
is the friction stress.
IDIERE
is the body number to which this node belongs.
WEARCF
is the wear coefficient including any table effects.
TEMPI
is the temperature.
RELVELND
is the relative velocity at the node.
ET
is the Young's modulus.
YD
is the yield stress including temperature effects;note this is not current flow stress, no plasticity is included.
COEF
is the coefficient of friction.
Required Output: WRND
Main Index
Main Index
is the rate of wear (wear divided by time).
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines List
3
User Subroutine
Main Index
Page
ANELAS . ANEXP . . ANKOND ANPLAS .
......................................................... ......................................................... ......................................................... .........................................................
CRPLAW.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
GAPU . . . GENSTR .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
HOOKLW HYPELA2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
ORIENT
Main Index
User-defined Anisotropy and Constitutive Relations User Subroutines List
205 230 232 221
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
196 Marc Volume D: User Subroutines and Special Routines
User Subroutine TENSOF
.........................................................
UACOUS . . . . . . . . . . . UARRBO . . . . . . . . . . . UBEAM . . . . . . . . . . . . UCOHESIVE . . . . . . . . UCOKSL . . . . . . . . . . . UCOMPL . . . . . . . . . . . UCRACK . . . . . . . . . . . UCRPLW (Viscoplastic) UCURE . . . . . . . . . . . . UDAMAG . . . . . . . . . . . UELASTOMER . . . . . . UELDAM . . . . . . . . . . . UENERG . . . . . . . . . . . UEPS . . . . . . . . . . . . . UFAIL . . . . . . . . . . . . . UFINITE . . . . . . . . . . . UGASKET . . . . . . . . . . UGENT . . . . . . . . . . . . UGRAIN . . . . . . . . . . . UMOONY . . . . . . . . . . UMU . . . . . . . . . . . . . . UNEWTN . . . . . . . . . . . UOGDEN . . . . . . . . . . . UPERM . . . . . . . . . . . . UPHI . . . . . . . . . . . . . . UPOWDR . . . . . . . . . . UPROGFAIL . . . . . . . . UPYROLEFF . . . . . . . . UPYROLSL . . . . . . . . . URPFLO . . . . . . . . . . . USELEM . . . . . . . . . . . USHRET . . . . . . . . . . . USHRINKAGE . . . . . . . USIGMA . . . . . . . . . . . USPCHT . . . . . . . . . . .
Main Index
Main Index
Page
.............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. .............................................. ..............................................
263 323 320 301 304 328 308 261 244 240 273 294 283 279 234 223 291 312 321 271 278 235 317 281 277 306 275 225 332 326 318 313 265 242 237 238
CHAPTER 3 197 User-defined Anisotropy and Constitutive Relations User Subroutines List
User Subroutine USPCHTAB . USPRNG . . USSUBS . . . UVOID . . . . UVOIDN . . . UVOIDRT . . UWATERSL VSWELL . WKSLP .
Main Index
Main Index
Page
....................................................... ....................................................... ....................................................... ....................................................... ....................................................... ....................................................... .......................................................
335 257 324 266 267 269 330
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
198 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 3 User-defined Anisotropy and Constitutive Relations User Subroutines
3
Main Index
Main Index
User-defined Anisotropy and Constitutive Relations User Subroutines
200 Marc Volume D: User Subroutines and Special Routines
This chapter describes the user subroutines available to allow you to provide material data to standard Marc constitutive relations, or for the user to create his own model. The routines in this chapter cover the spectrum of anisotropic elasticity and plasticity, creep, plasticity, rate independent nonlinear elasticity, cracking, electrical, and magnetic materials among others. These routines are, in general, called for each integration point for each element they have been invoked. This provides a powerful method to provide nonhomogeneous, nonlinear material behavior. Table 3-1 summarizes these routines and indicates what parameters or model definition options are required to invoke the user subroutine.
Main Index
Main Index
CHAPTER 3 201 User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-1
User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
User Subroutine
Required Parameters or Model Definition Options
Purpose
ANELAS
ORTHOTROPIC or ANISOTROPIC
Definition of factors to scale elastic stress strain law.
ANEXP
ORTHOTROPIC or ANISOTROPIC
Definition of thermal strain increment.
ANKOND
ORTHOTROPIC or ANISOTROPIC
Definition of thermal conductivity or electrical resistance in Joule heating.
ANPLAS
ORTHOTROPIC or ANISOTROPIC
Definition of parameters for Hill yield criteria
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 ANISOTROPIC
Definition of elastic stress-strain or compliance relation.
HYPELA2
HYPOELASTIC
Definition of nonlinear stress-strain relationship.
ORIENT
ORIENTATION
Definition of preferred material orientation for orthotropic or anisotropic behavior.
TENSOF
ISOTROPIC CRACK DATA
Definition of tension softening modulus.
UACOUS
ACOUSTIC CONTACT (2-D) CONTACT (3-D)
Definition of material properties for an acoustic medium.
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, 188, 190 or 192.
UCOKSL
PYROLYSIS THERMO-PORE
Definition of mass fraction of carbon in pyrolysis gas
UCOMPL
HARMONIC
Definition of stress-strain rate relationship for harmonic analysis.
UCRACK
ISOTROPIC CRACK DATA
Definition of ultimate stress for cracking analysis.
UCRPLW
CREEP
Definition of complex relationships for the factors in the power law expression for the creep strain rate.
Main Index
Main Index
202 Marc Volume D: User Subroutines and Special Routines
Table 3-1
User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
User Subroutine
Required Parameters or Model Definition Options
Purpose
UCURE
CURING CURE RATE
Definition of the cure kinetics models and calculation of the degree of cure.
UDAMAG
DAMAGE
Definition of the Kachanov damage factor to be applied to the material properties
UELASTOMER LARGE STRAIN FOAM or MOONEY or ARRUDBOYCE or GENT or OGDEN
Allows definition of the user’s own hyperelastic models.
UELDAM
OGDEN DAMAGE
Definition of damage parameters for Ogden rubber model.
UENERG
MOONEY
Definition of strain energy function.
UEPS
ELECTRO or EL-MA ORTHOTROPIC
Definition of anisotropic electrical permittivity.
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 EL-MA ORTHOTROPIC
Definition of anisotropic magnetic permeability.
UNEWTN
R-P FLOW or FLUID
Definition of material viscosity.
UOGDEN
OGDEN
Definition of Ogden material parameters.
UPERM
PORE
Definition of soil permeability.
Main Index
Main Index
CHAPTER 3 203 User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-1
User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
User Subroutine
Required Parameters or Model Definition Options
Purpose
UPHI
HARMONIC MOONEY PHI-COEFFICIENTS
Definition of phi coefficients for rubber-viscoelastic harmonic analysis.
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 CRACK DATA
Definition of shear retention factor for elements that have cracks.
USHRINKAGE
CURING CURE RATE CURE SHRINKAGE
Definition of 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)
USIGMA
EL-MA
Definition of anisotropic electrical conductivity.
USPCHT
HEAT or COUPLE or FLUID
Definition of specific heat.
USPCHTAB
THERMO-PORE
Definition of specific heat for simplified pyrolysis model.
USPRNG
SPRINGS or FOUNDATION
Definition of nonlinear spring or foundation stiffness.
USSUBS
SUPER SUPERINPUT
Definition of superelements not generated by Marc.
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 INITIAL VOID RATIO INITIAL POROSITY
Definition of the Initial Void Ratio or Initial Porosity
VSWELL
CREEP
Definition of volumetric swelling.
Main Index
Main Index
204 Marc Volume D: User Subroutines and Special Routines
Table 3-1
User-defined Anisotropy and Constitutive Relations User Subroutine Requirements
User Subroutine WKSLP
Main Index
Main Index
Required Parameters or Model Definition Options ISOTROPIC or ORTHOTROPIC or ANISOTROPIC WORK HARD
Purpose Definition of work hardening or strain hardening data.
CHAPTER 3 205 User-defined Anisotropy and Constitutive Relations User Subroutines
■ ANELAS Elastic Anisotropy Description This user subroutine allows the user to define the anisotropic elastic law. In the most generally allowed case, the isothermal stress-strain law in the preferred orientation is: ⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩
⎫ σ 11 ⎪ ⎪ σ 22 ⎪ ⎪ σ 33 ⎪ ⎬ = τ 12 ⎪ ⎪ τ 23 ⎪ ⎪ τ 31 ⎪ ⎭
r 11 D 11 r 12 D 12 r 13 D 13
0
0
0
r 22 D 22 r 23 D 23
0
0
0
r 33 D 33
0
0
0
r 44 D 44 0
0
Symmetric
r 55 D 55 0 r 66 D 66
⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩
⎫ ε 11 ⎪ ⎪ ε 22 ⎪ ⎪ ε 33 ⎪ ⎬ γ 12 ⎪ ⎪ γ 23 ⎪ ⎪ γ 31 ⎪ ⎭
The arrangement of the {σ},{ε} vectors is defined for each element type in Marc Volume B: Element Library. Dij are the incremental elastic stress-strain relation calculated by Marc based on material data given through input data. The rij are supplied by the user in the ANELAS user subroutine. It is often easier to directly specify the stress-strain for compliance relationship in the HOOKLW user subroutine. This routine is only available for the additive elastic-plastic formulation or small strain incompressible elasticity. It is not available for the FeFp formulation.
Main Index
Main Index
206 Marc Volume D: User Subroutines and Special Routines
Format User subroutine ANELAS is written with the following headers: SUBROUTINE ANELAS (N,NN,KCUS,R,IRDIM,NDI,NSHEAR,MATUS,DT, +DTDL,D,RPROPS,IPROPS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION R (IRDIM,IRDIM),DT(1),DTDL(1),D(IRDIM,IRDIM), +N(2),RPROPS(1),IPROPS(1),MATUS(2),KCUS(2) user coding RETURN END
where: Input: N(1)
is your element number.
N(2)
is the internal element number.
NN
is integration point number.
KCUS(1)
is your layer number (always 1 for continuum elements).
KCUS(2)
is the internal layer number (always 1 for continuum element).
IRDIM
is the dimension of the R array for the current element.
NDI
is the number of direct components.
NSHEAR
is the number of shear components.
MATUS(1)
is the user material id.
MATUS(2)
is the internal material id.
DT
is the array of state variables.
DTDL
is the array of increments of state variables.
D
is the stress-strain law as calculated by Marc using input data. To modify this matrix directly, use user subroutine HOOKLW instead of ANELAS.
RPROPS
is the array of real properties, see introduction.
IPROPS
is the array of integer properties, see introduction.
Required Output: R
Main Index
Main Index
is the r to be defined by you; the number of allowable r being given in Table 3-2.
CHAPTER 3 207 User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-2
Allowable Anisotropy
Library Element Number
Main Index
Main Index
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
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
208 Marc Volume D: User Subroutines and Special Routines
Table 3-2
Library Element Number
Main Index
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
24
Any in θ1 - θ2 surface
3
2
1
25
None
1
1
1
26
Orthogonal in x-y plane
3
2
1
27
Orthogonal in x-y plane
4
3
1
28
Orthogonal in x-y plane
4
3
1
29
Orthogonal in x-y plane
4
3
1
30
Any in surface
3
2
1
31
Not available
—
—
—
32
Orthogonal in x-y plane
4
3
1
33
Orthogonal in z-r plane
4
3
2
34
Orthogonal in x-y plane
4
3
1
35
Orthogonal in (x,y,z) space
6
3
3
Use the ANKOND user subroutine to supply anisotropic conductivity
—
—
—
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
36, 37, 38, 39, 40, 41, 42, 43, 44
Main Index
Allowable Anisotropy (continued)
CHAPTER 3 209 User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-2
Library Element Number
Main Index
Main Index
Allowable Anisotropy (continued)
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
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
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
210 Marc Volume D: User Subroutines and Special Routines
Table 3-2
Library Element Number
Main Index
Main Index
Allowable Anisotropy (continued)
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
75
Orthogonal in V1 - V2
5
2
3
76
None
1
1
1
77
None
1
1
0
78
None
1
1
1
79
None
1
1
0
80
Orthogonal in x-y plane
4
3
1
81
Orthogonal in x-y plane
4
3
1
82
Orthogonal in z-r plane
4
3
1
83
Orthogonal in z-r plane
4
3
1
84
Orthogonal in (x,y,z) space
6
3
3
85
Use the ANKOND user subroutine to supply anisotropic conductivity
—
—
—
86
Use the ANKOND user subroutine to supply anisotropic conductivity
—
—
—
87
Use the ANKOND user subroutine to supply anisotropic conductivity
—
—
—
88
Use the ANKOND user subroutine to supply anisotropic conductivity
—
—
—
89
None
1
2
1
90
None
1
2
3
91
Orthogonal in x-y plane
4
3
2
92
Orthogonal in z-r plane
4
3
1
93
Orthogonal in x-y plane
4
3
1
CHAPTER 3 211 User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-2
Library Element Number
Main Index
Main Index
Allowable Anisotropy (continued)
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
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
—
—
—
212 Marc Volume D: User Subroutines and Special Routines
Table 3-2
Library Element Number
Main Index
Main Index
Allowable Anisotropy (continued)
Allowable Transformations to Preferred Operation
Size of R. Matrix (IRDIM) for Number Number of Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
110
Use the UMU user subroutine
—
—
—
111
Use the UEPS, UMU, USIGMA user subroutines
—
—
—
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
CHAPTER 3 213 User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-2
Library Element Number
Main Index
Main Index
Allowable Anisotropy (continued)
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
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
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
214 Marc Volume D: User Subroutines and Special Routines
Table 3-2
Library Element Number
Main Index
Main Index
Allowable Anisotropy (continued)
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
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
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
—
—
—
CHAPTER 3 215 User-defined Anisotropy and Constitutive Relations User Subroutines
Table 3-2
Library Element Number
Main Index
Main Index
Allowable Anisotropy (continued)
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for of Direct IRDIM=1 No Shear Stresses Stresses Anisotropy (NDI) Possible (NSHEAR)
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
216 Marc Volume D: User Subroutines and Special Routines
Table 3-2
Library Element Number
Allowable Anisotropy (continued)
Allowable Transformations to Preferred Operation
Size of R. Matrix Number Number of (IRDIM) for Shear of Direct IRDIM=1 No Stresses Stresses Anisotropy (NSHEAR) (NDI) Possible
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
—
—
—
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
—
—
—
All parameters except the R array are defined by Marc. R must be defined by the user in this user subroutine.
Main Index
Main Index
CHAPTER 3 217 User-defined Anisotropy and Constitutive Relations User Subroutines
Note that the R and D matrices have the dimension appropriate for the number of stress components associated with the particular element (see Table 3-2). Thus, for example, in elements 3 or 18, the R matrix would be of size 3 by 3, and the stress strain law would take the form: ⎧ ⎪ σ1 ⎪ ⎨ σ2 ⎪ ⎪ σ 12 ⎩
⎫ ⎪ ⎪ ⎬ = ⎪ ⎪ ⎭
r 11 D 11 r 12 D 12 0 r 22 D 22 0
Symmetric
r 33 D 33
⎧ ⎪ ε 11 ⎪ ⎨ ε 22 ⎪ ⎪ γ 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: ⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩
⎫ ε 11 ⎪ ⎪ ε 22 ⎪ ⎪ ε 33 ⎪ ⎬ = γ 12 ⎪ ⎪ γ 23 ⎪ ⎪ γ 31 ⎪ ⎭
R 11 R 12 R 13
0
0
0
R 22 R 23
0
0
0
R 33
0
0
0
R 44
0
0
R 55
0 R 66
⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩
⎫ σ 11 ⎪ ⎪ σ 22 ⎪ ⎪ σ 33 ⎪ ⎬ τ 12 ⎪ ⎪ τ 23 ⎪ ⎪ τ 31 ⎪ ⎭
Note: This user subroutine should not be used if you desire that the material constants should be design variables. Use the ORTHOTROPIC option instead.
Main Index
Main Index
218 Marc Volume D: User Subroutines and Special Routines
■ HOOKLW 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 ⎪ ⎪ σ 22 ⎪ ⎪ σ 33 ⎪ ⎬ = τ 12 ⎪ ⎪ τ 23 ⎪ ⎪ τ 31 ⎪ ⎭
B11 B21 B31 B41 B51 B61
B12 B22 B32 B42 B52 B62
B13 B23 B33 B43 B53 B63
B14 B24 B34 B44 B54 B64
B15 B25 B35 B45 B55 B65
B16 B26 B36 B46 B56 B66
⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩
⎫ ε 11 ⎪ ⎪ ε 22 ⎪ ⎪ ε 33 ⎪ ⎬ γ 12 ⎪ ⎪ γ 23 ⎪ ⎪ γ 31 ⎪ ⎭
The arrangement of {s}, {ε} vectors are defined for each element type in Marc Volume B: Element Library. This routine is only available for the additive elastic-plastic formulation or small strain incompressible elasticity. It is not available for the FeFp formulation.
Main Index
Main Index
CHAPTER 3 219 User-defined Anisotropy and Constitutive Relations User Subroutines
Format User subroutine HOOKLW is written with the following headers: SUBROUTINE HOOKLW(M,NN,KCUS,B,NGENS,DT,DTDL,E,PR,NDI, +NSHEAR,IMOD,RPROPS,IPROPS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION B(NGENS,NGENS),DT(1),DTDL(1),RPROPS(1),IPROPS(1), +M(2),KCUS(2) user coding RETURN END
where: Input: M(1)
is the user element number.
M(2)
is the internal element number.
NN
is the integration point number.
KCUS(1)
is your layer number (always 1 for continuum elements).
KCUS(2)
is the internal layer number (always 1 for continuum element).
NGENS
is the number of stresses and strain components.
DT
is the state variables at the beginning of the increment (temperature first).
DTDL
is the increment of state variables.
E
is the Young’s modulus including temperature effects.
PR
is the Poisson’s ratio including temperature effects.
NDI
number of direct components of stress.
NSHEAR
number of shear components of stress.
RPROPS
array of real properties; see Chapter 1 Introduction.
IPROPS
array of integer properties; see Chapter 1 Introduction.
Required Output:
Main Index
Main Index
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.
220 Marc Volume D: User Subroutines and Special Routines
Note that for temperature dependent properties, this user subroutine is called twice for each integration point. The first time to evaluate the stress-strain law at the beginning of the increment; the second time at the end of the increment. Note: This user subroutine should not be used if the user desires that the material constants should be design variables. Use the ORTHOTROPIC option instead.
Main Index
Main Index
CHAPTER 3 221 User-defined Anisotropy and Constitutive Relations User Subroutines
■ ANPLAS Anisotropic Yield Surface and Creep Potential Description The anisotropic yield function and stress potential are assumed as: 2
2
2
a 1 ( σ y – σ z ) + a 2 ( σ z – σ x ) + a 3 ( σ x – σ y ) + 3a 4 τ y2z + 3a 6 τ x2y = 2σ
2
(R. Hill - Mathematical Theory of Plasticity, Oxford, 1950) where: σ is the equivalent tensile yield stress for isotropic behavior: σ = σ ( ε P, T ) σ +σ +σ
x y z and, for Mohr-Coulomb behavior: σ = σ ( J 1 ) ; 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 YRDIR ( 2 ) YRDIR ( 3 ) YRDIR ( 2 ) 2 1 1 1 a 2 = ------------------------------- + ------------------------------- – ------------------------------YRDIR ( 3 ) 2 YRDIR ( 1 ) 2 YRDIR ( 2 ) 2 1 1 a 3 = ------------------------------- + ------------------------------- – ------------------------------YRDIR ( 1 ) 2 YRDIR ( 2 ) 2 YRDIR ( 3 ) 2 2 a 4 = --------------------------------YRSHR ( 3 ) 2 2 a 5 = --------------------------------YRSHR ( 2 ) 2 2 a 6 = --------------------------------YRSHR ( 1 ) 2
Main Index
Main Index
222 Marc Volume D: User Subroutines and Special Routines
Note that YRDIR and YRSHR should be given in the order appropriate for the element (see Library Element description). On the output, the von Mises intensity is not affected by these material parameters. Format User subroutine ANPLAS is written with the following headers: SUBROUTINE ANPLAS(N,NN,KCUS,NDI,NSHEAR,MATUS,YRDIR,YRSHR) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION YRDIR (1),YRSHR(1),N(2),MATUS(2),KCUS(2) user coding RETURN END
where: Input: N(1)
is your element number.
N(2)
is the internal element number.
NN
is the integration point number.
KCUS(1)
is your layer number (always 1 for continuum elements).
KCUS(2)
is the internal layer number (always 1 for continuum element).
NDI
is the number of direct stresses.
NSHEAR
is the number of shear stresses.
MATUS(1)
is the user material id.
MATUS(2)
is the internal material id
Required Output: YRDIR
is the array of tensile yield ratios to be defined here.
YRSHR
is the array of shear yield ratios to be defined here.
All parameters except YRDIR and YRSHR are defined by Marc. YRDIR and YRSHR are defined by the user in this user subroutine.
Main Index
Main Index
CHAPTER 3 223 User-defined Anisotropy and Constitutive Relations User Subroutines
■ UFAIL 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. Format User subroutine UFAIL is written with the following headers: SUBROUTINE UFAIL (N,NN,KCUS,MATUS, 1 STRESS,STRAIN,NDI,NSHEAR,FAILCR) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION STRESS(1),STRAIN(1),N(2),MATUS(2),KCUS(2),FAILCR(2) user coding RETURN END
where: Input:
Main Index
Main Index
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.
224 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
CHAPTER 3 225 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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. Format User subroutine UPROGFAIL is written with the following header lines: & &
SUBROUTINE UPROGFAIL(NELEM,NINT,KCUS,MATUS,STRESS,STRAIN, ICRIT,FI,REDFAC0,REDFAC,IDEACT,DT,DTDL, TIME,TIMEINC) IMPLICIT REAL*8 (A-H, O-Z) REAL*8 FI,REDFAC0,REDFAC,TIME,TIMEINC INTEGER KCUS, MATUS, N, NELEM, NINT, ICRIT,IDEACT REAL*8 STRAIN, STRESS,DT,DTDL DIMENSION STRESS(*),STRAIN(*),N(2),MATUS(2),KCUS(2) DIMENSION FI(*),REDFAC0(6),REDFAC(6),DT(*),DTDL(*) USER CODING RETURN END
where: Input:
Main Index
Main Index
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
226 Marc Volume D: User Subroutines and Special Routines
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
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
E 11
Main Index
Main Index
orig
= redfac ( 1 ) × E 11
CHAPTER 3 227 User-defined Anisotropy and Constitutive Relations User Subroutines
new
= redfac ( 2 ) × E 22
new
= redfac ( 3 ) × E 33
new
= redfac ( 4 ) × G 12
new
= redfac ( 5 ) × G 23
new
= redfac ( 6 ) × G 31
E 22 E 33
G 12 G 23 G 31
orig
orig
orig
orig
orig
The Poisson’s ratios are scaled the same way as the corresponding shear modulus. For an isotropic material, the Young’s modulus is scaled with the smallest of the components of redfac and the shear modulus is calculated using the updated Young’s modulus and the Poisson’s ratio. The case of general anisotropy is not supported.
Main Index
Main Index
228 Marc Volume D: User Subroutines and Special Routines
■ ORIENT 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. Format User subroutine ORIENT is written with the following headers: SUBROUTINE ORIENT (N,NN,KCUS,G) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION G(3,3),N(2),KCUS(2) user coding RETURN END
where: Input: N(1) is the user element number. N(2) is the internal element number. NN is the integration point number. KCUS(1) is your layer number (always 1 for continuum elements). KCUS(2) is the internal layer number (always 1 for continuum element). Required Output: G is the transformation matrix to be defined here.
Main Index
Main Index
CHAPTER 3 229 User-defined Anisotropy and Constitutive Relations User Subroutines
All parameters except G are passed in by Marc – the user must supply the G matrix. G is the transformation to the preferred orientation from the usual Marc orientation: ⎧ ⎪ v' 1 ⎪ ⎨ v' 2 ⎪ ⎪ v' 3 ⎩
⎫ ⎪ ⎪ ⎬ = ⎪ ⎪ ⎭
⎧ G 11 G 12 G 13 ⎪ v 1 ⎪ G 21 G 22 G 23 ⎨ v 2 ⎪ G 31 G 32 G 33 ⎪ v 3 ⎩
⎫ ⎪ ⎪ ⎬ ⎪ ⎪ ⎭
where: v
is the vector in the Marc system.
v'
is the vector in the preferred system.
For curvilinear systems (for example, element types 4, 8, and 24), G is defined by G(I,J) = g ij . For planar transformations, G(3,I) = G(I,3) = 0; G(3,3) = 1.0; I = 1,2 must be given. Note: This user subroutine should not be used if the user desires that the material orientation be a design variable. Use the COMPOSITE option instead.
Main Index
Main Index
230 Marc Volume D: User Subroutines and Special Routines
■ ANEXP 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 Δε itjh ( Δε t h i
j
for doubly curved shell elements 4, 8, and 24) in the user subroutine. Any components of the incremental thermal strain vector not defined in the user subroutine assume their default program calculated values. The ANEXP user subroutine is called for all elements at all integration points if the temperature is nonzero for all material models. If the HYPELA2 user subroutine is used, enter 1 to activate ANEXP in the second field of the third data block of the HYPOELASTIC model definition option. Format User subroutine ANEXP is written with the following headers: SUBROUTINE ANEXP (N,NN,KCUS,T,TINC,COED,NDI,NSHEAR,EQEXP) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION EQEXP(1),TINC(1),T(1),COED(NDI),N(2),KCUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
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).
CHAPTER 3 231 User-defined Anisotropy and Constitutive Relations User Subroutines
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 defined by the user 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.
Main Index
Main Index
232 Marc Volume D: User Subroutines and Special Routines
■ 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
where: Input: CANISO
are the anisotropic conductivities kij (T) established by the user via data blocks.
N
is the element number.
NN
is the integration point number.
KCUS(1)
is your layer number (always 1 for continuum elements).
KCUS(2)
is the internal layer number (always 1 for continuum element).
MATUS(1) is the user material identifier. MATUS(2) is the internal material identifier.
Main Index
Main Index
ID
∂T 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.
CHAPTER 3 233 User-defined Anisotropy and Constitutive Relations User Subroutines
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 i j -------∂x j This is to be re-defined as necessary by the user. This matrix is passed in as set-up for anisotropic conductivity. If the user does not re-define it, it remains anisotropic according to kij (T) given on the ISOTROPIC, ORTHOTROPIC, and TEMPERATURE EFFECTS or TABLE options.
Main Index
Main Index
234 Marc Volume D: User Subroutines and Special Routines
■ 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
where: Input: M(1)
is the user element number.
M(2)
is the internal element number.
NN
is the integration point number.
MATUS(1) is the user material identifier. MATUS(2) is the internal material identifier. ID
is the size of the matrix.
Required Output: EPS
Main Index
Main Index
is the permittivity matrix, [ε] (D = [ε]E). This is to be re-defined as necessary by the user. This matrix is passed in as set-up for anisotropic permittivity. If the user does not redefine it, it remains as given through the ISOTROPIC or ORTHOTROPIC options.
CHAPTER 3 235 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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 + Br where: B
is the magnetic induction.
H
is the magnetic field intensity.
μ
is the permeability.
Br
is the remanence. Note: 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
where: Input:
Main Index
Main Index
M(1)
is your element number.
M(2)
is the internal element number.
NN
is the integration point number.
236 Marc Volume D: User Subroutines and Special Routines
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
1 is the reluctivity matrix --μ
⎛ H = --1- ( B – B )⎞ . r ⎠ ⎝ μ
This is to be re-defined 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.
Main Index
Main Index
CHAPTER 3 237 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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
where: Input: M(1) M(2) NN MATUS(1) MATUS(2) CPTIM DTIME ID
is the user element number. is the internal element number. is the integration point number. is the user material identifier. is the internal material identifier. is the transient time at the beginning of the increment; in a harmonic analysis, it is the frequency. is the increment of time. is the size of the matrix.
Required Output:
SIGMA
Main Index
Main Index
is the electric conductivity matrix, [σ] (J = [σ]E). This is to be re-defined as necessary by the user. This matrix is passed in as set-up for anisotropic conductivity. If the user does not re-define it, it remains as given through the ISOTROPIC or ORTHOTROPIC options.
238 Marc Volume D: User Subroutines and Special Routines
■ 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
where: Input:
Main Index
Main Index
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.
CHAPTER 3 239 User-defined Anisotropy and Constitutive Relations User Subroutines
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
Main Index
Main Index
is the specific heat per unit mass. This is to be defined by the user.
240 Marc Volume D: User Subroutines and Special Routines
■ 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-thermalmechanical coupled analysis of resin or composite that has resin inside. For details of the usage of cure rate, refer to the CURING parameter and the CURE RATE model definition option. Format User subroutine UCURE is written with the following headers: SUBROUTINE UCURE(M,N,NN,KCUS,MATUS,DT,AK,DENSITY,VOLUMI, *CUREDAT,TEMPBEG,TEMPEND,DELTIME,TIME,CURERATE) INCLUDE '../COMMON/IMPLICIT' INCLUDE '../COMMON/MRCPARM' DIMENSION CUREDAT(*),MATUS(2),KCUS(2) user coding RETURN END
where: Input: M N NN KCUS(1) KCUS(2) MATUS(1) MATUS(2) DT AK DENSITY
Main Index
Main Index
is the element number. is the elsto number. is the integration point number. is your layer number (always 1 for continuum elements). is the internal layer number (always 1 for continuum element). is the user material identifier. is the internal material identifier. is the degree of cure at the beginning of the increment. is the degree of cure at the end of the increment. is the density of the material at the initial point.
CHAPTER 3 241 User-defined Anisotropy and Constitutive Relations User Subroutines
VOLUMI
CUREDAT TEMPBEG TEMPEND TIME DELTIME
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. is the material data. curedat (9) is the total reaction heat of the cure. is the temperature at the beginning of the increment. is the temperature at the end of the increment. is the time at the beginning of the increment. is the incremental time.
Required Output: AK CUREDAT(9) CURERATE VOLUMI
is the degree of cure at the end of the increment. is the total resin reaction heat of curing. is the cure rate. 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 you): UNVGAS = 8.134 (J/mol/K) with SI-m unit (N, m, S, C); UNVGAS = 8314. (J/mol/K) with SI-mm unit (N, mm, S, C); UNVGAS = 1.986 (Btu/lbMol/R) with US (British) unit (lbf, inch, S, F) UNVGAS is already defined by Marc and saved in common block mrcparm. You do not need to define UNVGAS.
Main Index
Main Index
242 Marc Volume D: User Subroutines and Special Routines
■ USHRINKAGE 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
where: Input: M N NN KCUS(1) KCUS(2) MATUS(1) MATUS(2) AK
Main Index
Main Index
is the element number. is the elsto number. is the integration point number. is your layer number (always 1 for continuum elements). is the internal layer number (always 1 for continuum element). is the user material identifier. is the internal material identifier. is the degree of cure at the end of the increment.
CHAPTER 3 243 User-defined Anisotropy and Constitutive Relations User Subroutines
AKCBEG TEMPBEG TEMPEND TIME DELTIME
is the degree of cure shrinkage at the beginning of the increment. is the temperature at the beginning of the increment. is the temperature at the end of the increment. is the time at the beginning of the increment. is the incremental time.
Required Output: VLMSTR AKCDEG AKINC SHRKDAT(1) SHRKDAT(5-10)
Main Index
Main Index
is the volume shrinkage strain increment. is the degree of cure shrinkage at the end of the increment. is the increment of the degree of cure of shrinkage for the current increment. is the maximum volumetric shrinkage. 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
244 Marc Volume D: User Subroutines and Special Routines
■ 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
C
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) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION MDUM(*),MATUS(2),KCUS(2) user coding RETURN END
where: Input: CPTIM TIMINC EQCP DT DTDL MDUM(1) MDUM(2) NN KCUS(1)
Main Index
Main Index
time at the beginning of the increment. time Increment. creep strain at the beginning of the increment. temperature at the beginning of the increment. incremental temperature. user element number. internal element number. integration point number. is your layer number (always 1 for continuum elements).
CHAPTER 3 245 User-defined Anisotropy and Constitutive Relations User Subroutines
KCUS(2) MAT
is the internal layer number (always 1 for continuum element). material number.
Required Output: CPA CFT CFE CFTI CFSTRE
Main Index
Main Index
is the creep constant. is the temperature factor. is the creep strain factor. is the time factor. is the stress exponent.
246 Marc Volume D: User Subroutines and Special Routines
■ 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:
Main Index
Main Index
ε· 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.
CHAPTER 3 247 User-defined Anisotropy and Constitutive Relations User Subroutines
Format User subroutine CRPLAW is written with the following headers: SUBROUTINE CRPLAW(EQCP,EQCPNC,STR,CRPE,T,DT,TIMINC,CPTIM,M, +NN,KCUS,MATUS,NDI,NSHEAR) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION T(3),DT(1),STR(1),CRPE(1),MATUS(2),KCUS(2) user coding RETURN END
where: Input: EQCP
Passed in as total equivalent creep strain. 1⁄2 2 ε c = Σ ⎛ --- Δε c i j Δε c i j⎞ ⎝3 ⎠
or, for ORNL Constitutive Theory, equivalent total creep strain, 1⁄2 2 ε c = ⎛ --- ΣΔε c i j ΣΔε c i j⎞ ⎝3 ⎠
STR CRPE
T(1) T(2) T(3) DT(1) DT(2),DT(3) TIMINC CPTIM M NN KCUS(1) KCUS(2)
Main Index
Main Index
to be re-defined as equivalent primary creep strain increment. is the stress array. 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. is the current total equivalent (J2) stress. is the current total hydrostatic stress. is the current total swelling strain (from the VSWELL user subroutine). is the current total temperature. are the additional state variables read in the CREDE user subroutine. is the current time increment. is the current total time. is the current element number. is the integration point number. is your layer number (always 1 for continuum elements). is the internal layer number (always 1 for continuum element).
248 Marc Volume D: User Subroutines and Special Routines
is the user material id. is the internal material identifier. is the number of direct components of strain. is the number of shear components of strain.
MATUS(1) MATUS(2) NDI NSHEAR Required Output:
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.
EQCPNC
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:
C
C
1 2 C
Main Index
Main Index
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) DEFINE A AND B A = CONSTANT1 B = CONSTANT2 OBTAIN SINH (T/B) S = T(1) IF (S.EQ.0.) GO TO 1 SINHT = .5*(EXP(S/B)-EXP(-S/B)) GO TO 2 SINHT = 0. CONTINUE NON DEFINE EQCPNC EQCPNC = TIMINC*A*SINHT RETURN END
CHAPTER 3 249 User-defined Anisotropy and Constitutive Relations User Subroutines
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 Newton’s 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) C + EPSILON DOT SUB M C THE FOLLOWING DEFINITION APPLIES TO THE FUNCTION CODED BELOW C A IS LN(A) C B IS ALPHA*SIGMA C E IS N
Main Index
Main Index
250 Marc Volume D: User Subroutines and Special Routines
C C IS Q C C IS T C EPSILON SUB T, T, SUB T AND EPSILON SUB M DOT ARE GIVEN BY A CURVE C FUN + A*SINH TO N OF ALPHA SIGMA TIMES E TO Q/T EXP C IHARD=0 USES STRAIN HARDENING C STRAIN NOW DIMENSIONAL C TEMPERATURE IN FAHRENHEIT C STRESS IN PSI C TIME IN HOURS FTN(A,B,C,D,E)=EXP(A)*(.5*(EXP(B)-EXP(B))**)E*EXP(C/D)) IHARD=0 IHARD=1 EQCPNC=0 IF(T(1).LT.25.)GO TO 1 TRANK=DT(1)+459.67 ET=FTN(2.76,1.976E-3*T(1),-1,03E4,TRANK,.08778) TT=FTN(-21.38,.09546E-3*T(1),4.54E4,TRANK,-2.31) EDOT=FTN(57.2,.02345E-3*T(1),-9.98E4,TRANK,6.933) C THE FOLLOWING IS A NEWTON METHOD TO EXPRESS T IN TERMS OF KNOWN C QUANTITIES. INITIAL GUESS IS T= (F SUB C- ET) / E DOT M IF(IHARD.EQ.1) GO TO 10 TIME=CPTIM GO TO 2 10 CONTINUE TIME=(100.*EQCP-ET)/EDOT FT=ET/TT IF(EQCP.EQ.0.) GO TO 4 2 EFT=EXP (-TIME/TT) FT=FT*EFT/TT 4 ST=EDOT EQCPNC=(FT+ST)*TININC*0.01 1 RETURN END
Main Index
Main Index
CHAPTER 3 251 User-defined Anisotropy and Constitutive Relations User Subroutines
■ VSWELL 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
where: Input: SIG(1)
is the uniaxial equivalent of J2 stress.
SIG(2)
is the hydrostatic stress.
SIG(3)
is the current total swelling strain (accumulated from this user subroutine). 1 DV 3 V
Note: This is a uniaxial component; that is, --- ---------
Main Index
Main Index
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.
252 Marc Volume D: User Subroutines and Special Routines
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 recycling due to nonconvergence, the number of times the user subroutine is called in each increment is not fixed. Example The following is a typical irradiation swelling formulation: b b ⎛ DV ⎞ = c ( q ⋅ t ) a exp ⎛ b + -----1- + -----2-⎞ -------0 ⎝ V⎠ ⎝ T 1 T 2⎠
where: a, b0, b1, b2, c are numerical constants, q is flux, t is time and T is temperature. Differentiating with respect to time, b1 b2 d DV ----- ⎛⎝ ---------⎞⎠ = acq a t a – 1 exp ⎛⎝ b 0 + -----1- + -----2-⎞⎠ dt V T T
Main Index
Main Index
CHAPTER 3 253 User-defined Anisotropy and Constitutive Relations User Subroutines
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.
Main Index
Main Index
254 Marc Volume D: User Subroutines and Special Routines
■ 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
where: Input:
Main Index
Main Index
M
is the current user element number.
NN
is the integration point number.
KCUS(1)
is your layer number (always 1 for continuum elements).
CHAPTER 3 255 User-defined Anisotropy and Constitutive Relations User Subroutines
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 dε ρ =
2 p p --- dε i j dε i j 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 i j S i j 2
1 S i j = σ i j – --- δ i j σ k k 3 STRYT
is the current yield stress σ . dσ dε P
dσ dε
Note: --------- is not the slope of the tensile stress-strain curve, which is ------- with:
dε = dε e + dε p
The time increment, Δt, is given by variable TIMINC in common block CREEPS. The user must take care to provide rate of change of stress with respect to plastic strain, not total strain. The second term in the SLOPE expression allows the user to include strain-rate effect if desired. The user must define SLOPE and STRYT in this user subroutine. EBARP, DT, and IFIRST should not be changed.
Main Index
Main Index
256 Marc Volume D: User Subroutines and Special Routines
Note: If the UPDATE or LARGE STRAIN parameter is used, the stresses are Cauchy (true) stress and the strains are logarithmic strains.
Example Let us assume that yield surface can be expressed as: σy = A ( 1 + εp ) n
then, ∂σ y --------- = nA ( 1 + ε p ) n – 1 ∂ε p
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
Main Index
Main Index
CHAPTER 3 257 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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 userdefined spring stiffness to the current tabular stiffness and the spring force. The value of the spring/dashpot constant, total time, and the element or spring number are made available to the user subroutine. For harmonic analysis, the spring/dashpot constants can be a function of the frequency. The USPRNG user subroutine is accessible whenever either the SPRINGS or the FOUNDATION option is used. USPRNG can also be used for defining spring stiffnesses in thermal analysis (regular heat transfer analysis or thermal part of a thermo-mechanical coupled analysis), and in Joule heating analysis. Format User subroutine USPRNG is written with the following headers: SUBROUTINE USPRNG(RATK,F,DATAK,U,TIME,N,NN,NSPRNG) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION RATK(*),DATAK(*),U(*),TIME(*),N(*),F(*),NSPRNG(*) user coding RETURN END
where:
Main Index
Main Index
258 Marc Volume D: User Subroutines and Special Routines
Input: DATAK(1)
is the data value of spring constant (or foundation stiffness) as defined by the user in SPRINGS/FOUNDATION options data input. For previously defined nonlinear springs, it is the current nonlinear data value calculated from input tables. This is input to the program. (a) For springs: DATAK(1) = mechanical stiffness (b) For thermal links: DATAK(1) = thermal conduction (c) For electrical links: DATAK(1) = electrical conduction
DATAK(2)
is the data value of the damping constant as defined by you in the SPRINGS option data input. For previously defined nonlinear dashpots, it is the current nonlinear data value calculated from input tables. It is only used for transient mechanical analysis. This is input to the program.
For Elastic Foundation (Only Static Contribution): U(1)
For elastic foundation: U(1) = Un. (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):
Main Index
Main Index
U(1)
U ( 1 ) = U 2 – U 1 static predeformation
U(2)
not used
U(3)
U ( 3 ) = U 2 – U 1 real part of harmonic deformation.
U(4)
U ( 4 ) = U 2 – U 1 imaginary part of harmonic deformation
TIME(1)
is the total time (for dynamic or creep analysis).
CHAPTER 3 259 User-defined Anisotropy and Constitutive Relations User Subroutines
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). = 1mechanical analysis or stress part of coupled analysis (only for springs) = 2heat transfer analysis or thermal part of coupled analysis (only for springs) = 4electrical analysis (only for springs) is the spring ID given on the SPRINGS model definition option.
NSPRNG(2)
NSPRING(3)
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
Main Index
Main Index
260 Marc Volume D: User Subroutines and Special Routines
physically consistent forces, care should be exercised on defining node 1 and node 2 correctly. For true direction springs, U(1), U(2), U(3), and U(4) are positive if the spring is in tension and negative if the spring is in compression. During a heat transfer run or electrical run (NSPRNG(2) = 2 or 4), springs simply act as links. Only the user-input conduction DATAK(1) comes into the routine and the user needs to return the modified ratio RATK(1). The dashpot is not active. The spring force F the gradient across the spring, U, is not needed and does not need to be defined.
Main Index
Main Index
CHAPTER 3 261 User-defined Anisotropy and Constitutive Relations User Subroutines
■ UCRACK 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
where: Input:
Main Index
Main Index
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.
262 Marc Volume D: User Subroutines and Special Routines
Required Output: SCRACK
is the user-defined ultimate cracking stress.
ESOFT
is the user-defined strain softening moduli.
ECRUSH
is the user-defined strain at which crushing occurs.
Let us assume that the ultimate stress looks like σ C R = A ( 1 – e–R T )
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
Main Index
Main Index
CHAPTER 3 263 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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)
where: Input: GFP
is the change in stress due to incremental crack growth.
DEP
is the current strain increment.
ECP
is the crack strain at end of increment.
SCRACK
is the critical cracking stress given in input.
SOSTR
is the current cracking stress based on previous softening.
ETSNEW
is the current value of temperature dependent Young’s modulus.
ESOFT
is the tension softening modulus given in input.
XH
is the characteristic element length.
SPECLN
is the test specimen length.
Required Output:
Main Index
Main Index
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.
264 Marc Volume D: User Subroutines and Special Routines
Note that the definition of the stiffness D does not need to be exact. The correct definition of the stiffness only determines the speed of the convergence. In fact, in the above user subroutine, a large negative value of the stiffness term should never be used as this would result in convergence problems. The stress definition, however, must be exact; otherwise, the wrong solution is obtained.
Main Index
Main Index
CHAPTER 3 265 User-defined Anisotropy and Constitutive Relations User Subroutines
■ USHRET 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
where: Input: ECRA1
is the crack strain in the first crack direction.
ECRA2
is the crack strain in the second crack direction.
ECRA12
is the shear strain over the crack.
Required Output: FACTOR
Main Index
Main Index
is a user-defined shear retention factor to be defined here.
266 Marc Volume D: User Subroutines and Special Routines
■ 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: 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
Main Index
Main Index
is the initial void fraction to be defined here.
CHAPTER 3 267 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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 2 F = -------- + 2q 1 f cosh ⎛ -----------------⎞ – [ 1 + ( q 1 f ) ] = 0 ⎝ ⎠ 2 2σ σm 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
where: Input:
Main Index
Main Index
M(1)
is the user element number.
M(2)
is the internal element number.
268 Marc Volume D: User Subroutines and Special Routines
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: · · σk k · f = Aσ + B --------3 · where σ is the von Mises equivalent stress rate, and σ· k k is the hydrostatic stress rate.
Main Index
Main Index
CHAPTER 3 269 User-defined Anisotropy and Constitutive Relations User Subroutines
■ UVOIDRT 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 Input:
Main Index
Main Index
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.
270 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
CPTIM
time at the beginning of the increment.
TIMINC
time increment.
VALUE
if iflag = 1 define void ratio. if iflag = 2 define porosity.
IFLAG
1 or 2.
CHAPTER 3 271 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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
where: Input:
Main Index
Main Index
M
is the element number
N
is the elsto number
NN
is the integration point number
KCUS(1)
is your layer number (always 1 for continuum elements).
KCUS(2)
is the internal layer number (always 1 for continuum element).
MATUS(1)
is the user material identifier.
MATUS(2)
is the internal material identifier.
EPLAS
is the equivalent plastic strain
ERATE
is the equivalent plastic strain rate
DT
is the state variables at beginning of increment
DTDL
is the incremental state variables
272 Marc Volume D: User Subroutines and Special Routines
GRNDAT
is the material data, GRNDAT (1) is the initial grain size
TIME
is the time - beginning of increment
DELTIME
is the incremental time
IGNMOD
is the input mode for different model (-1 for user-defined)
Required Output: GRNSIZ
Main Index
Main Index
is the current grain size
CHAPTER 3 273 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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
where: Input:
Main Index
Main Index
M
is the user element number.
N
is the internal element number.
NN
is the integration point number.
274 Marc Volume D: User Subroutines and Special Routines
KCUS(1)
is your layer number (always 1 for continuum elements).
KCUS(2)
is the internal layer number (always 1 for continuum element).
MATUS(1)
is the user material identifier.
MATUS(2)
is the internal material identifier.
EPLAS
is the equivalent plastic strain.
ERATE
is the equivalent plastic strain rate.
DT
is the state variables at beginning of increment.
DTDL
is the 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
Main Index
Main Index
is the current damage factor.
CHAPTER 3 275 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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: 1 3 P2 1 ⁄ 2 F = --- ⎛ --- S i j S i j + ------⎞ – σy γ ⎝2 β 2⎠
where: γ and β are material parameters to be entered here. S
is the deviatoric stress.
P
is the hydrostatic stress.
σy
is the equivalent tensile stress.
The equivalent inelastic strain rate, ε· , is defined as: 1 F · ε = --- ⎛ ------⎞ μ ⎝ σ y⎠
where: μ
Main Index
Main Index
is the viscosity.
276 Marc Volume D: User Subroutines and Special Routines
Format User subroutine UPOWDR is written with the following headers: SUBROUTINE UPOWDR(E,G,POISS,GAMMA,BETA,VISC,SIGY,AMB,COMPF, +REDENS,DT,DTDL,DET,IHEAT,IHCPS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION POWDAT(32) user coding RETURN END
where: Input: E
is the Young’s moduli.
G
is the shear moduli.
POISS
is the Poisson’s ratio.
REDENS
is the relative density.
DT
is the array of state variables, temperature first.
DTDT
is the array of increment of state variables.
DET
is the determinant which gives the change in volume.
IHEAT
is the indicates if this is the heat transfer calculation in a coupled analysis. = 0 stress pass. = 1 heat pass.
Required Output: GAMMA
is the parameter γ in the yield function.
BETA
is the parameter β in the yield function.
VISC
is the viscosity μ.
SIGY
is the temperature-dependent equivalent tensile stress σy
AMB
is the conductivity in a coupled analysis.
COMPF
is the specific heat in a coupled analysis.
In the stress pass, you should define E, G, POISS, GAMMA, VISC, and SIGY. In the heat transfer pass, the user should define AMB and COMPF. The values of E, G, POISS, GAMMA, BETA, VISC, AMB, COMPF upon entrance are the values calculated by Marc based upon user input.
Main Index
Main Index
CHAPTER 3 277 User-defined Anisotropy and Constitutive Relations User Subroutines
■ UPERM Definition of Permeability Description In a diffusion or soil analysis, it might be necessary to define the permeability as a function of the porosity or other variables. This user subroutine allows the user to enter a general nonlinear relationship. It is called during any coupled diffusion analysis or fluid-soil analysis. Format User subroutine UPERM is written with the following headers: SUBROUTINE UPERM(PERMEA,M,NN,DT,POROP,POROS,X, +K,STRESS,NGENS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION PERMEA(K,K),X(1),STRESS (*) user coding RETURN END
where: Input: M
is the element number.
NN
is the integration point number.
DT
is the temperature.
POREP
is the pore pressure.
POROS
is the porosity.
X
is the array of integration point coordinates.
K
is the dimension of the permeability matrix
STRESS
is the effective stress matrix. (in a soil analysis. In a pure diffusion analysis, stress is not used.)
NGENS
is the number of stress components.
Required Output: PERMEA
Main Index
Main Index
is the permeability matrix.
278 Marc Volume D: User Subroutines and Special Routines
■ UMOONY Mooney-Rivlin Material Description This user subroutine allows the user to redefine the constants used in the strain energy function. This data is normally entered through the MOONEY model definition option. The form of the strain energy function is: W = C 10 ( I 1 – 3 ) + C 01 ( I 2 – 3 ) + C 11 ( I 1 – 3 ) ( I 2 – 3 ) + C 20 ( I 1 – 3 ) 2 + C 30 ( I 1 – 3 ) 3
Format User subroutine UMOONY is written with the following headers: SUBROUTINE UMOONY(C10,C01,C11,C20,C30,T,N,NN,MATUS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION N(2),MATUS(2) user coding RETURN END
where: Input: T
is the temperature.
N(1)
is your element number.
N(2)
is the internal element number.
NN
is the integration point number.
MATUS(1)
is the user material identifier.
MATUS(2)
is the internal material identifier.
Required Output: C10,C01,C11,C20,C30
Main Index
Main Index
are the values used in the strain energy function to be defined by the user.
CHAPTER 3 279 User-defined Anisotropy and Constitutive Relations User Subroutines
■ UENERG Strain Energy Function Description This user subroutine allows the user to define his own elastic strain energy function for incompressible materials. Normally, the five constant second-order model is entered using the MOONEY model definition option. This option must still be used to invoke this user subroutine. This user subroutine can be used when either the total Lagrange or updated Lagrange procedure is used. The five material parameters, C10, C01, C11, C20, and C30 must be correctly defined with the MOONEY option for energy calculation. Format User subroutine UENERG is written with the following headers: $
SUBROUTINE UENERG(W,W1,W2,W11,W12,W22,WI1,WI2, C10,C01,C11,C20,C30,N,NN) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION N(2) user coding RETURN END
where: Input: WI1
is I 1 – 3 , with I 1 the first deviatoric invariant of the right Cauchy-Green deformation tensor.
WI2
is I 2 – 3 , with I 2 the second deviatoric invariant of the right Cauchy-Green deformation tensor.
Main Index
Main Index
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.
280 Marc Volume D: User Subroutines and Special Routines
Required Output: W
is the strain energy density.
W1
is ∂W ⁄ ∂I 1 .
W2
is ∂W ⁄ ∂I 2 .
W11
is ∂ 2 W ⁄ ∂I .
W12
is ∂ 2 W ⁄ ∂I 1 ∂I 2 .
W22
is ∂ 2 W ⁄ ∂I .
2 1
2
2
Main Index
Main Index
CHAPTER 3 281 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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
∑
W =
i = 1
μi α α α ----- ( λ 1 i + λ 2 i + λ 3 i – 3 ) + 4.5K ( J 1 / 3 – 1 ) 2 αi
Format User subroutine UOGDEN is written with the following headers: SUBROUTINE UOGDEN(MATUS,NSER,M,NN,KCUS,INC,CPTIM,TIMINC, +XMTDAT,BULK,DT,DTDT) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION XMTDAT(2,NSER),M(2),DT(1),DTDL(1),MATUS(2),KCUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
MATUS(1)
is the user material identifier.
MATUS(2)
is the internal material identifier.
NSER
is the number of terms in the series.
282 Marc Volume D: User Subroutines and Special Routines
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:
Main Index
Main Index
XMTDAT(1,i)
is the value of μi.
XMTDAT(2,i)
is the value of αi.
BULK
is the bulk modulus.
CHAPTER 3 283 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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: 2 3
SUBROUTINE UELDAM(M,N,NN,KCUS,INC,LOVL,MATUS,TIMINC,CPTIM, TOTEN,DEVEN,TOTEND,TOTENV,SURFC,SURFD,DT, DTDL,DAMD,DDAMD) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION DT(1),DTDL(1),MATUS(2),KCUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
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.
284 Marc Volume D: User Subroutines and Special Routines
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:
Main Index
Main Index
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.
CHAPTER 3 285 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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, 2 NDI,NSHEAR,DISP,DISPT,COORD,FFN,FROTN,STRECHN,EIGVN,FFN1, 3 FROTN1,STRECHN1,EIGVN1,NCRD,ITEL,NDEG,NDM,NNODE, 4 JTYPE,LCLASS,IFR,IFU) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION E(1),DE(1),T(1),DT(1),G(1),D(NGENS,NGENS),S(1) DIMENSION N(2),COORD(NCRD,NNODE),DISP(NDEG,NNODE), 2 DISPT(NDEG,NNODE),FFN(ITEL,ITEL),FROTN(ITEL,ITEL) 3 STRECHN(ITEL),EIGVN(ITEL,ITEL),FFN1(ITEL,ITEL) 4 FROTN1(ITEL,ITEL),STRECHN1(ITEL),EIGVN1(ITEL,ITEL) DIMENSION MATUS(2),KCUS(2),LCLASS(2) user coding RETURN END
where: Input: E DE
Main Index
Main Index
is the total elastic mechanical strain. is the increment of mechanical strain.
286 Marc Volume D: User Subroutines and Special Routines
T DT NGENS N NN KCUS(1) KCUS(2) MATUS(1) MATUS(2) NDI NSHEAR DISP DISPT COORD NCRD NDEG ITEL NNODE JTYPE LCLASS(1) LCLASS(2)
IFR IFU
is the state variables (comes in at t = n; must be updated to have state variables at t = n +1). is the increment of state variables. is the size of the stress-strain law. is the element number. is the integration point number. is your layer number (always 1 for continuum elements). is the internal layer number (always 1 for continuum element). is the user material identifier. is the internal material identifier. is the number of direct components. is the number of shear components. is the incremental displacements. is the displacements at t = n (at assembly lovl = 4) and the displacements at t = n +1 (at stress recovery lovl = 6). is the coordinates. Is the number of coordinates. is the number of degrees of freedom. is the dimension of F and R; 2 for plane-stress and 3 for the rest of the cases. is the number of nodes per element. is the element type. is the element class. is 0 for displacement element. is 1 for lower-order Herrmann element. is 2 for higher-order Herrmann element. is set to 1 if R has been calculated. is set to 1 if STRECH has been calculated.
At t = n (or the beginning of the increment): FFN FROTN STRECHN EIGVN (I,J)
is the deformation gradient. is the rotation tensor. is the square of principal stretch ratios, lambda (i). I principal direction components for J eigenvalues.
At t = n +1 (or the current time step): FFN1 FROTN1 STRECHN1 EIGVN1(I,J)
Main Index
Main Index
is the deformation gradient. is the rotation tensor. is the square of principal stretch ratios, lambda (i). is the I principal direction components for J eigenvalues.
CHAPTER 3 287 User-defined Anisotropy and Constitutive Relations User Subroutines
Required Output: D G S
is the stress strain law to be formed. is the change in stress due to temperature effects. 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 PiolaKirchhott 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 rigidbody motion before HYPELA2 is called; so, the stress integration for the co-rotational part is performed in HYPELA2 based on rotation neutralized values. The user is required to pass back the updated rotation neutralized stress based on the co-rotational system. The shell thickness is only updated with the LARGE STRAIN parameter. Strains E ( ) and DE( ), which are passed to HYPELA2, are the elastic mechanical strain and
the increment of mechanical strain, respectively. Here, mechanical strain is defined by “total strain – thermal strain”. Note that for the first iteration (NCYCLE = 0) during assembly (LOVL = 4), DE is an estimate of the strain change. The variables NCYCLE and LOVL can be obtained from common block CONCOM. The total strain etotl(*) can be obtained using: include’array2’ include ’heat’ include ’ngenel’ include ’space’ dinension etotl(6) 1a4=ietota+lofr+(nn-1)*ngenel-1 do i=1,ngenel etotl(i)=varselem(1a4+i) enddo
Main Index
Main Index
288 Marc Volume D: User Subroutines and Special Routines
Coordinate System Continuum (3-D-Solid, plane strain, axisymmetric and 2-D plane stress) elements use the global Cartesian coordinate system for the base vectors of stress and strain components. Also, membranes, shells and beams usually use the local Cartesian systems defined in Marc Volume B: Element Library (please check this volume for the element used). However, if the LARGE STRAIN parameter is used, strain and stress components are rotated to account of rigid-body motion before HYPELA2 is called. So, local Cartesian coordinate system is used based on rotationneutralized 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. State Variables If there are any state variables (other than temperature) in the problem, the user can use the array T( ) to update and return these state variables. The increments of the state variables should be calculated and returned as the array DT ( ). T( ) and DT( ) have the size of NSTATS if NSTATS is the number of state variables defined in the PARAMETERS model definition option in the input file. T(1) and DT(1) are reserved for the temperature and the temperature increment, respectively, and calculated by Marc. You must not change the values of T(1) and DT(1) even in isothermal problems with state variables. All variables T(2) to T(NSTATS) and DT(2) to
Main Index
Main Index
CHAPTER 3 289 User-defined Anisotropy and Constitutive Relations User Subroutines
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. DT(NSTATS)
Tangent Stiffness The user also needs to provide the tangent stiffness D based on the updated stress. ∂ ( Δσ i ) D i j = ----------------∂ ( Δε 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. 3
Thermal Stress Problems
UserFor thermal stress problems, the user needs to calculate and return the change in defined stress G i due to temperature dependent material properties. Anisotro θ θ py and G i = ( D n + 1 – D n ) i j ( Δε ) j Constitut ive where θ n and θ n + 1 are the temperatures at time t = n and t = n + 1, respectively Relation and ( Δε ) j is strain increment which is passed to HYPELA2. s User Subrouti nes Deformation Gradient (F), Rotation Tensor (R) and Stretch Tensor (U)
HYP ELA2
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 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
Main Index
Main Index
290 Marc Volume D: User Subroutines and Special Routines
DO J=1,3 DO K=1,3 UN1 (I,J) = UN1 (I,J)+DSQRT (STRETCH1(K)*EIGVN1(I,K)*EIGVN1(J,K)) ENDDO ENDDO ENDDO
In this case, STRECHN1 stores the value of the squares of the stretches, and EIGVN1(I,J) stores the I-th eigenvector component corresponding to the J-th eigenvalue of C, where C is the right Cauchy-Green Tensor at t = n + 1 . For shells and beams, kinematic variables are not available. The total strain etotl(*) can be obtained using: include’array2’ include ’heat’ include ’ngenel’ include ’space’ dinension etotl(6) 1a4=ietota+lofr+(nn-1)*ngenel-1 do i=1,ngenel etotl(i)=varselem(1a4+i) enddo
Main Index
Main Index
CHAPTER 3 291 User-defined Anisotropy and Constitutive Relations User Subroutines
■ UFINITE 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, 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) 1
user coding RETURN END
where Input:
Main Index
Main Index
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.
292 Marc Volume D: User Subroutines and Special Routines
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. If there are any state variables in the problem, you can use the array DT() to update and return these state variables. The increments of the state variables must be calculated and returned as the array DTDL(). DT() and DTDL() are the size NSTATS where NSTATS is the number of state variables and is set in the PARAMETERS option in the input file. It must be remembered that DT(1) and DTDL(1) are reserved for the temperature and the temperature increment, respectively and are supplied to you by Marc. The user must not change the values of DT(1) and DTDL(1) even in isothermal problems. All variables DT(2) to DT(NSTATS) and DTDL(2) to DTDL(NSTATS) are accessible to the user.
Main Index
Main Index
CHAPTER 3 293 User-defined Anisotropy and Constitutive Relations User Subroutines
The framework used in this user subroutine is based on principal stretches of the trial left Cauchy-Green tensor. For more details, please refer to the work of Simo and coworkers. The rate of convergence of the global residual in this approach is critically dependent on the accuracy of the consistent tangent and the accuracy of the stress update procedure.
Main Index
Main Index
294 Marc Volume D: User Subroutines and Special Routines
■ UELASTOMER Generalized Strain Energy Function 3
User-defined Anisotropy and Constitutive Relations User Subroutines
Description This user subroutine allows definition of the user’s own hyperelastic models. The subroutine is activated by one of the following model definition options: FOAM, MOONEY, ARRUDBOYCE, GENT, and OGDEN. The UELASTOMER user subroutine must be used with the LARGE STRAIN,2 parameter. Foam Models
For compressible foam materials, four types of strain energy functions can be defined using the UELASTOMER user subroutine, depending on the iflag entered in the 4th field of the 3rd data block of the FOAM model definition option: 1. iflag = 1, Invariant-based model W = W ( I 1, I 2, I 3 )
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 d e v ( I 1, I 2 ) + U ( J )
4. iflag = 4, Principal-stretch-based model with volumetric and deviatoric split W = W d e v ( λ 1, λ 2, λ 3 ) + U ( J ) I 1 , I 2 , and I 3 ( λ 1 , λ 2 , and λ 3 ) are strain invariants (principal stretches), and I 1 I2 ( λ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
deformation gradient.
Main Index
Main Index
is the determinant of the
and
CHAPTER 3 295 User-defined Anisotropy and Constitutive Relations User Subroutines
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 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 d e v ( 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 d e v ( λ 1, λ 2, λ 3 ) Note: If iflag=5 or iflag=6, only the deviatoric part of the energy function is defined via the user subroutine UELASTOMER. The volumetric part is calculated internally by Marc. For this purpose, the bulk modulus MUST be defined with either MOONEY, or ARRUDBOYCE, or GENT, or OGDEN model definition option.
Main Index
Main Index
296 Marc Volume D: User Subroutines and Special Routines
In case of the direct definition of material properties through input deck, if no bulk modulus is given, the default bulk modulus is calculated as 5000 times initial shear modulus. However, if UELASTOMER is used, the initial shear modulus is not explicitly available and the bulk modulus must be directly defined.
7. iflag=7, Volumetric part of the strain energy (applicable to both, invarinent as well as principal stretch-based, models) W = U( J ))
Compared to the foam models (iflag from 1 to 4), working only for compressible materials, the rubber-like model (iflag equal to 5 or 6) can be used for both compressible and incompressible materials. The foam and rubber models (when using FEATURE,3402 parameter with iflag=7) allow the user to define a general nonlinear volumetric energy function. Format User subroutine UELASTOMER is written with the following headers: subroutine (iflag,m,nn,matus,be,x1,x2,x3,detft, $
enerd,w1,w2,w3,w11,w22,w33,w12,w23,w31,
$
dudj,du2dj,dt,dtdl,iarray,array)
c c user defined, generalized strain energy function c implemented in the framework of updated Lagrange c implicit real*8 (a-h,o-z) dimension m(2),be(6),dt(*),dtdl(*),iarray(*),array(*) dimension matus(2) c return end
where:
Main Index
Main Index
CHAPTER 3 297 User-defined Anisotropy and Constitutive Relations User Subroutines
Input: iflag
Activated by FOAM model definition option: = 1 energy function in terms of invariants = 2 energy function in terms of principal stretches = 3 energy function in terms of invariants with deviatoric split = 4 energy function in terms of principal stretches with deviatoric split Activated by MOONEY, or ARRUDBOYCE, or GENT model definition option: = 5 energy function in terms of invariants deviatoric part only. The bulk modulus MUST be defined with either MOONEY, ARRUDBOYCE, or GENT model definition option (except when using FEATURE,3402 where the bulk modulus must be defined as =-1; in which case, the routine is called twice with iflag=6 and 7.) Activated by OGDEN model definition option = 6 energy function in terms of principal stretches deviatoric part only. The bulk modulus MUST be defined with OGDEN model definition option = 7 energy function in terms of volumetric ratio only. This is possible with FEATURE,3402 and the bulk modulus must be defined as -1
Main Index
Main Index
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 if iflag if iflag if iflag if iflag if iflag
detft
determinate of deformation gradient
dt
array of state variables (temperature at first) at t n
dtdl
incremental state variables
iarray
not used
= = = = = =
1: 2: 3: 4: 5: 6:
invariants of be principal stretches deviatoric part of invariants of be deviatoric principal stretches deviatoric part of invariants of be deviatoric principal stretches
298 Marc Volume D: User Subroutines and Special Routines
array
not used
Required Output: enerd
energy density at t n + 1 Foam iflag = 1
iflag = 2
iflag = 3
iflag = 4
iflag = 5
iflag = 6
iflag = 7
W1
∂W --------∂I 1
∂W --------∂λ 1
∂W --------∂I 1
∂W --------∂λ 1
∂W --------∂I 1
∂W --------∂λ 1
N/A
W2
∂W --------∂I 2
∂W --------∂λ 2
∂W --------∂I 2
∂W --------∂λ 2
∂W --------∂I 2
∂W --------∂λ 2
N/A
W3
∂W --------∂I 3
∂W --------∂λ 3
∂W --------∂λ 3
N/A
∂W --------∂λ 3
N/A
N/A
W11
∂2W ----------2 ∂I 1
∂2W ----------2 ∂λ 1
∂2 W ----------2 ∂I 1
∂2W ----------2 ∂λ 1
∂2 W ----------2 ∂I 1
∂2W ----------2 ∂λ 1
N/A
W22
∂2W ----------2 ∂I 2
∂2W ----------2 ∂λ 2
∂2 W ----------2 ∂I 2
∂2W ----------2 ∂λ 2
∂2 W ----------2 ∂I 2
∂2W ----------2 ∂λ 2
N/A
W33
∂2W ----------2 ∂I 3
∂2W ----------2 ∂λ 3
∂2W ----------2 ∂λ 3
N/A
∂2W ----------2 ∂λ 3
N/A
N/A
W12
∂2W ---------------∂I 1 ∂I 2
∂2W ------------------∂λ 1 ∂λ 2
∂2 W ---------------∂I 1 ∂I 2
∂2W ------------------∂λ 1 ∂λ 2
∂2 W ---------------∂I 1 ∂I 2
∂2W ------------------∂λ 1 ∂λ 2
N/A
W23
∂2W ---------------∂I 2 ∂I 3
∂2W ------------------∂λ 2 ∂λ 3
∂2W ------------------∂λ 2 ∂λ 3
N/A
∂2W ------------------∂λ 2 ∂λ 3
N/A
N/A
∂2W ---------------∂I 3 ∂I 1
∂2W ------------------∂λ 3 ∂λ 1
∂2W ------------------∂λ 3 ∂λ 1
N/A
∂2W ------------------∂λ 3 ∂λ 1
N/A
N/A
N/A
N/A
∂U ------∂J
∂U ------∂J
N/A
N/A
∂W --------∂J
N/A
N/A
∂2 U ---------2∂J
∂2U ---------2∂J
N/A
N/A
∂2 W ----------∂J 2
W31
dudj du2dj
Main Index
Main Index
Rubber
CHAPTER 3 299 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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
where: Input:
Main Index
Main Index
ETOTA
is the total strain array.
DE
is the increment of strain array.
HT
is the shell thickness.
S
is the stress array.
T
are the state variables (temperature).
DT
are the increments of state variables.
ER
is the real strain array during harmonic sub-increment.
300 Marc Volume D: User Subroutines and Special Routines
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): 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):
Main Index
Main Index
Components
Description
1, 2, and 3 4, 5, and 6 7
are membrane strains are curvatures (correspond to 1, 2, and 3) is an inplane rotation term related to drilling degrees of freedom (only elements 138 and 139 have component 7)
CHAPTER 3 301 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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 crosssection data are design variables. Use the ISOTROPIC and GEOMETRY option instead.
Format User subroutine UBEAM is written with the following headers. SUBROUTINE UBEAM(D,FCRP,DF,DFI,ETOT,DE,DEI,S,SI,GS,GSI, +TEMP,DTEMP,NGENS,N,NN,MATUS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSIOND(NGENS,NGENS),DF(1),S(1),GS(NGENS),DE(NGENS), +TEMP(1),DTEMP(1),FCRP(1),ETOT(1),DFI(1),DEI(NGENS),SI(1), GSI(1),MATUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
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.
302 Marc Volume D: User Subroutines and Special Routines
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.
DTEMP
are the increments of state variables.
NGENS
is the number of generalized stress.
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:
Main Index
Main Index
ETOT(1)
Axial strain
ETOT(2)
Local γxy shear
ETOT(3)
Local γyz shear
CHAPTER 3 303 User-defined Anisotropy and Constitutive Relations User Subroutines
Main Index
Main Index
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
304 Marc Volume D: User Subroutines and Special Routines
■ 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
Main Index
Main Index
CHAPTER 3 305 User-defined Anisotropy and Constitutive Relations User Subroutines
where: Required Input: ETOT
is the accumulated total relative displacements at beginning of increment
E
is the current incremental relative displacements
S
is the accumulated stress at beginning of increment
NGENS
is the number of stress components
DT
is the state variables
DTDL
is the incremental state variables
NCYCLE
is the current cycle number
MDUM(1)
is the user element number
MDUM(2)
is the internal element number
NN
is the integration point number
KCUS(1)
is the user layer number
KCUS(2)
is the internal layer number
MATUS(1)
is the user material identifier
MATUS(2)
is the internal material identifier
COHPROP
is the cohesive material properties defined via the COHESIVE model definition option
Required Output: D
is the matrix defining the relation between the stresses and the relative displacements
SEND
is the total stress at end of increment
Optional Output:
Main Index
Main Index
RELOP(1)
is the equivalent relative opening displacement
RELOP(2)
is the damage parameter
306 Marc Volume D: User Subroutines and Special Routines
■ 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
where: Input: ELCG
is the left Cauchy-Green strain vector.
FREQ
is the excitation frequency in radians/ time unit.
WI1,WI2
are the first and second invariants of ELCG.
C10,C01,C11,C20,C30
are the five material parameters of the Mooney formulation.
NDI
is the number of direct strain components.
NSHEAR
is the number of shear strain components.
IFLAG = 1:
The sine PHI functions should be defined.
IFLAG = 2:
The cosine PHI functions should be defined.
DERIVS
is the array which contains the variables W, W1, W2, W11, W12, W21, and W22.
Required Output: FI0,FI1,FI2,FI11,FI1 are the seven PHI functions which should be defined in this 2,FI21,FI22 user subroutine by the user.
Main Index
Main Index
CHAPTER 3 307 User-defined Anisotropy and Constitutive Relations User Subroutines
where: W
is the strain energy density.
W1
is ∂W ⁄ ∂I 1 .
W2
is ∂W ⁄ ∂I 2 .
W11
2
2
is ∂ W ⁄ ∂I . 1
W12 W21 W22
Main Index
Main Index
is ∂ 2 W ⁄ ∂I 1 ∂I 2 . 2
is ∂ W ⁄ ∂I 2 ∂I 1 . 2
2
is ∂ W ⁄ ∂I 2 .
308 Marc Volume D: User Subroutines and Special Routines
■ 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,NDEG,NCRD,NDI, NSHEAR) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION C(NGENS,NGENS),B(NGENS,NGENS),ETOT(1), 2 EELAS(1),EPLAS(1),T(1),XINTP(NCRD),COORD(NCRD,1), 2 DISPT(NDEG,1),N(2),KCUS(2) C C C
USER SUBROUTINE TO INPUT A COMPLEX STRESS STRAIN LAW FOR HARMONIC ANALYSIS C IS IMAGINARY PART B IS REAL PART user coding RETURN END
where: Input:
Main Index
Main Index
ETOT
are the total strains.
EELAS
are the total elastic strains.
EPLAS
are the plastic strains.
S
are the stresses.
CHAPTER 3 309 User-defined Anisotropy and Constitutive Relations User Subroutines
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 user’s 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.
Required Output:
Main Index
Main Index
C
is the imaginary damping part of the stress-strain law.
B
is the real elastic part of the stress-strain law.
310 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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.
CHAPTER 3 311 User-defined Anisotropy and Constitutive Relations User Subroutines
TOL2
is the tolerance on gap force which allows the gap to remain closed even if small negative force.
TOL3
is the tolerance on frictional force. Default is 0.
M(1)
is your element number.
M(2)
is the internal element number.
MSUB
is the subelement number (only for Marc element type 97).
INC
is the current increment number.
NCR
is the dimension of the gap. 2 for 2-D problems. 3 for 3-D problems.
FN
is the current gap force.
Required Output: DIR
is the array of direction cosines of the current gap direction. This can be modified by the user.
DIST
is the current closure distance (distance that the nodes must travel to obtain closure), which is to be defined by the user.
FF
is the frictional force limit, to be specified by the user.
In two dimensional problems, DIR, X1, and X4 have two components; otherwise, DIR, X1, and X4 have three components.
Main Index
Main Index
312 Marc Volume D: User Subroutines and Special Routines
■ UGASKET 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
where: Input: MDUM(1)
is the element id.
MDUM(2)
is the internal element storage number.
NN
is the integration point number.
XINTP
is the array with integration point coordinates.
NCRD
is the number of coordinates.
NGASK
is the gasket material number.
Required Output: GASGAP
Main Index
Main Index
is the initial gap distance (to be defined).
CHAPTER 3 313 User-defined Anisotropy and Constitutive Relations User Subroutines
■ USELEM User-defined Element Description This user subroutine allows the user to calculate his own finite element stiffness or mass matrix. This can also be used as interface with other numerical techniques. In general, in the finite element calculation, several matrices are required; hence, for a particular element, this user subroutine is called a multiple number of times. The calls and the user’s requirements are defined as follows: IFLAG=1
Return the equivalent nodal loads (F) given distributed surface or body loads. If the ELASTIC, FOLLOW FOR parameters or the AUTO STEP, AUTO TIME, AUTO INCREMENT options are used, these are total loads or else incremental loads. In a heat transfer analysis, this is the total flux vector.
IFLAG=2
Return the element tangent stiffness matrix (K). For an elastic analysis, this is the usual stiffness. For a heat transfer matrix analysis, this is the conductivity matrix. Also calculate the total internal forces (R). This is not necessary in a linear elastic analysis if the LOAD COR parameter has been turned off.
IFLAG=3
Return the mass matrix (M) for a dynamic analysis or specific heat matrix for a heat transfer problem.
IFLAG=4
Calculate the incremental strains (DE), generalized stresses (GSIGS) and the internal force (R). For a linear elastic solution, if only displacements are required, the user does not need to return any values. In a heat transfer analysis, the thermal gradient and the heat fluxes (both stored via SIGXX) and the internal flux vector (R) need to be calculated.
IFLAG=5
Output element results if so desired.
To use this option, the USER parameter must be included to define the size of the element stiffness matrix and other critical dimensions and the element type given on the connectivity must be a negative number.
Main Index
Main Index
314 Marc Volume D: User Subroutines and Special Routines
Format User subroutine USELEM calls for the following headers: * * *
SUBROUTINE USELEM(M,XK,XM,NNODE,NDEG,F,R, JTYPE,DISPT,DISP,NDI,NSHEAR,IPASS,NSTATS,NGENEL, INTEL,COORD,NCRD,IFLAG,IDSS,T,DT,ETOTA,GSIGS,DE, GEOM,JGEOM,SIGXX,NSTRMU) 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,*) DIMENSION F(NDEG,*),R(NDEG,*),SIGXX(NSTRMU,*),GEOM(*), JGEOM(*) user coding RETURN END
where: Input:
Main Index
Main Index
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.
CHAPTER 3 315 User-defined Anisotropy and Constitutive Relations User Subroutines
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.
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.
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:
Main Index
Main Index
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.
316 Marc Volume D: User Subroutines and Special Routines
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.
Main Index
Main Index
CHAPTER 3 317 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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
where: Input: N(1)
is the user’s element number.
N(2)
is the internal element number.
NN
is the integration point number.
E
are the components of the strain rate.
NGENS
is the number of components.
DT
is the temperature at the beginning of the increment.
DTDL
is the increment of temperature.
Required Output: V
is the viscosity to be defined here.
Note: If Herrmann elements are used, the last component of E represents a rate of change of volumetric strain.
Main Index
Main Index
318 Marc Volume D: User Subroutines and Special Routines
■ URPFLO Rigid-Plastic Flow Description This user subroutine allows the user to define the current yield stress as a function of the equivalent strain rate, equivalent strain, temperature, and user-defined state variables. This user subroutine is used in conjunction with the transient R-P FLOW parameter. Format User subroutine URPFLO is written with the following headers: SUBROUTINE URPFLO(MDUM,NN,KCUS,MATUS,INC,NDI,NGENS,NCRD, +NSTAT,CPTIM,TIMINC,EBAR,ERATE,DT,DTDL,STATS,DSTATS, +COORD,YD) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION MDUM(2),STATS(NSTAT),DSTATS(NSTAT),COORD(NCRD) DIMENSION MATUS(2),KCUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
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.
CHAPTER 3 319 User-defined Anisotropy and Constitutive Relations User Subroutines
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.
ERATE
equivalent strain rate.
COORD
integration point coordinates.
Required Output:
Main Index
Main Index
YD
equivalent stress; if not calculated here, Marc finds the value of yd from the input data.
DSTATS
incremental state variables (excluding temperature).
320 Marc Volume D: User Subroutines and Special Routines
■ 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 1 1 11 19 519 W = n k θ --- ( I 1 – 3 ) + ---------- ⎛ I – 9⎞ + ------------------2- ⎛ I – 27⎞ + ------------------3- ⎛ I – 81⎞ + ------------------------4- ⎛ I – 243⎞ + … ⎠ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ 2 20 N ⎝ 1 1050 N 1 7000 N 1 673750 N 1
Format User subroutine UARRBO is written with the following headers: SUBROUTINE UARRBO(A1,A2,T,N,NN,MATUS) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION N(2),MATUS(2) user coding RETURN END
where: Input: T
is the temperature.
N(1)
is your element number.
N(2)
is the internal element number.
NN
is the integration point number.
MATUS(1)
is the user material identifier.
MATUS(2)
is the internal material identifier.
Required Output:
Main Index
Main Index
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.
CHAPTER 3 321 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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: ⎛ I1 – 3 ⎞ E W = – --- ( I m – 3 ) log ⎜ 1 – ---------------⎟ 6 I m – 3⎠ ⎝
Format User subroutine UGENT is written with the following headers: SUBROUTINE UGENT(E,AI,T,N,NN,MATUS,BUKLM) IMPLICIT REAL *8 (A-H,O-Z) DIMENSION N(2),MATUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
T
is the temperature.
N(1)
is the user’s element number.
N(2)
is the internal element number.
NN
is the integration point number.
MATUS(1)
is the user’s material identifier.
MATUS(2)
is the internal material identifier.
322 Marc Volume D: User Subroutines and Special Routines
Required Output:
Main Index
Main Index
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
CHAPTER 3 323 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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
where: Input: MDUM(1)
is the user’s element number.
MDUM(2)
is the Marc element storage number.
FREQC
is the frequency in cycles per time.
Required Output:
Main Index
Main Index
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.
324 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
NLEV
is the superelement level = 1.
NSS
is the superelement number.
CHAPTER 3 325 User-defined Anisotropy and Constitutive Relations User Subroutines
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.
NDEG
is the number of degrees of freedom per node in the superelement.
LIM( )
is the node id’s 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( )
Main Index
Main Index
is the stiffness, mass, damping matrix of the superelement.
326 Marc Volume D: User Subroutines and Special Routines
■ 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 D’Arcy law model is used. Format User subroutine UPYROLSL is written with the following headers: SUBROUTINE UPYROLSL(IREG,ISTL,MATE,IEND,NCRD,XSIP,CPTIM, * DELTIM,ND,ARRPRY,PHIJN,PHIJN1,XSIPN,TEMPE,DRODT) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION ARRPY(6,ND),PHIJN(ND),PHIJN1(ND) user coding RETURN END
where: Input:
Main Index
Main Index
IREG
is the region ID (Streamline model). is the element number (D’Arcy flow).
ISTL
is the streamline ID (Streamline flow). is the integration point number (D’Arcy flow).
MATE
is the material ID.
IEND
is the flag indicating if end SIP on streamline: = -1 first point (interior) = 0 point along streamline = +1 last point (exterior) = 0 for D’Arcy flow
NCRD
is the number of coordinates.
XSID
is the coordinate of streamline integration point, or conventional integration point for D’Arcy flow.
CPTIM
is the time at beginning of increment.
CHAPTER 3 327 User-defined Anisotropy and Constitutive Relations User Subroutines
DELTIM
is the increment in time.
ARRPRY
is the coefficients.
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:
Main Index
Main Index
DRODT
is the time gradient of solid density due to pyrolysis.
PHJN1
is φ j at end of the increment.
328 Marc Volume D: User Subroutines and Special Routines
■ 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 D’Arcy law model is used. Format User subroutine UCOKSL is written with the following headers: SUBROUTINE UCOKSL(IREG,ISTL,MATE,IEND,NCRD,XXSIP,CPTIM, * DELTIM,AKCGN,AKCGN1,XSICN,NC,ARRCOK,PRESSURE,TEMPE) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION ARRCOK(4,NC),XXSIP(NCRD) C USER RETURNS AKCGN1 user coding RETURN END
where: Input:
Main Index
Main Index
IREG
is the region ID (Streamline model). is the element number (D’Arcy flow).
ISTL
is the streamline id (Streamline flow). is the integration point number (D’Arcy flow).
MATE
is the material ID.
IEND
is the flag indicating if end SIP on streamline: = -1 first point (interior) = 0 point along streamline = +1 last point (exterior) = 0 for D’Arcy flow
NCRD
number of coordinates.
CHAPTER 3 329 User-defined Anisotropy and Constitutive Relations User Subroutines
XXSIP
is the coordinate of streamline integration point or conventional integration point for D’Arcy flow.
CPTIM
is the time at beginning of increment.
DELTIM
is the increment in time.
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
Main Index
Main Index
330 Marc Volume D: User Subroutines and Special Routines
■ 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 D’Arcy law is used, and the water drying state is less than 0.98. Format User subroutine UWATERSL is written with the following headers: SUBROUTINE UCOKSL(IREG,ISTL,MATE,IEND,NCRD,XSIP,CPTIM, * DELTIM,ARRWVP,PHIWN,RHOL0,TEMPE,DRODT) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION ARRWVP(4),XSIP(NCRD) user coding RETURN END
where: Input:
Main Index
Main Index
IREG
is the region ID (Streamline model). is the element number (D’Arcy flow).
ISTL
is the streamline ID (Streamline flow). is the integration point number (D’Arcy flow).
MATE
is the material ID.
IEND
is the flag indicating if end SIP on streamline: = -1 first point (interior) = 0 point along streamline = +1 last point (exterior) = 0 for D’Arcy flow
NCRD
is the number of coordinates.
CHAPTER 3 331 User-defined Anisotropy and Constitutive Relations User Subroutines
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. 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.
Main Index
Main Index
332 Marc Volume D: User Subroutines and Special Routines
■ 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 UPYROLSL is written with the following headers: SUBROUTINE UPYROLEFF(M,N,NN,KC,IFLAG,INEED,MATE,IP,IC,IW, * XDP,XDC,PHIW,CONDEFF,ECONDVR,ECONDC,ECONDCK,ECONDL,RHO,RHON, * DT,TEE,CPTIM,DELTIM) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION CONDEFF(*),ECONDVR(*),ECONDC(*),ECONDCK(*) user coding RETURN END
where: Input:
Main Index
Main Index
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.
CHAPTER 3 333 User-defined Anisotropy and Constitutive Relations User Subroutines
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
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 ρ :
Main Index
Main Index
1
virgin material
2
charred material
334 Marc Volume D: User Subroutines and Special Routines
3
not used
4
not used
5
not used
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.
Main Index
Main Index
CHAPTER 3 335 User-defined Anisotropy and Constitutive Relations User Subroutines
■ 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
where: Input:
Main Index
Main Index
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
336 Marc Volume D: User Subroutines and Special Routines
TPYRBEG
temperature when pyrolysis begins
TCOMBEND
temperature when combustion ends
Required Output SPHEAT
Main Index
Main Index
specific heat on input set to standard value from input cards
CHAPTER 3 337 User-defined Anisotropy and Constitutive Relations User Subroutines
References 1. Simo, J. C. and Taylor, R. L., “Quasi incompressible finite elasticity in principal stretches. Continuum basis and numerical algorithms”, Comp. Meth. App. Mech. Engrg., 85, pp. 273-310, 1991. 2. Simo, J. C., “Algorithms for static and dynamic multiplicative plasticity that preserve the classical return mapping schemes of the infinitesimal theory”, Comp. Meth. App. Mech. Engrg., 99, pp. 61-112, 1992.
Main Index
Main Index
338 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 4 Viscoplasticity and Generalized Plasticity User Subroutines List
4
User Subroutine ASSOC .
NASSOC .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Main Index
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
ZERO .
Main Index
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
UCRPLW (Viscoplastic) UVSCPL . . . . . . . . . . . YIEL .
Page
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
CRPLAW (Viscoplastic)
SINCER
Viscoplasticity and Generalized Plasticity User Subroutines List
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
340 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 4 Viscoplasticity and Generalized Plasticity User Subroutines
4
Main Index
Main Index
Viscoplasticity and Generalized Plasticity User Subroutines
342 Marc Volume D: User Subroutines and Special Routines
The user subroutines in this chapter are used to describe viscoplastic materials or a user-defined general plasticity model. There are two numeric procedures for viscoplasticity: implicit and explicit. This is activated on the CREEP parameter. The implicit method is preferred. The generalized plasticity allows the user to develop a yield surface, equivalent stress, and flow rate that is different from one provided by Marc. Table 4-1 summarizes these routines and indicates what parameters or model definition options are required to invoke the user subroutine. Table 4-1
Viscoplasticity and Generalized Plasticity User Subroutine Requirements
User Subroutine
Required Parameters or 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 ISOTROPIC – VISCO-PLASTIC
Definition of inelastic strain rate for implicit viscoplastic model.
YIEL
ISOTROPIC, ORTHOTROPIC or ANISOTROPIC
Definition of yield stress.
ZERO
ISOTROPIC, ORTHOTROPIC or ANISOTROPIC
Definition of equivalent stress.
Main Index
Main Index
CHAPTER 4 343 Viscoplasticity and Generalized Plasticity User Subroutines
■ 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, 1 THMSTI,EELAS,S,SINC,GF,EPL,AVGINE,EQCRP,EQCPNC,YD,YD1, 2 VSCPAR,DT,DTDL,CPTIM,TIMINC,XINTP,NGENS,M,NN,KCUS,MATUS, 3 NDI,NSHEAR,NCRD,IANISO,NSTATS,INC,NCYCLE,LOVL,NVSPLM) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION POISS(3,2),YOUNG(3,2),B(NGENS,NGENS), 1 USTRRT(NGENS),ETOT(NGENS),E(NGENS),THMSTI(NGENS), 2 EELAS(NGENS),S(NGENS),SINC(NGENS),GF(NGENS),EPL(NGENS), 3 AVGINE(NGENS),DT(NSTATS),DTDL(NSTATS),XINTP(NCRD), SHEAR(3,2),VSCPAR(NVSPLM),MATUS(2),KCUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
YOUNG
is the Young’s modulus.
POISS
is the Poisson’s modulus.
SHEAR
is the shear modulus.
B
is the tangent elastic matrix.
ETOT
is the accumulated total strain at beginning of increment.
E
is the current strain increment.
344 Marc Volume D: User Subroutines and Special Routines
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.
DT
is the state variables at beginning of increment.
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.
Required Output:
Main Index
Main Index
USTRRT
is the inelastic strain rate.
SINC
is the stress increment.
CHAPTER 4 345 Viscoplasticity and Generalized Plasticity User Subroutines
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.
Main Index
Main Index
346 Marc Volume D: User Subroutines and Special Routines
■ 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: C
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) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION MDUM(*),MATUS(2), KCUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
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).
CHAPTER 4 347 Viscoplasticity and Generalized Plasticity User Subroutines
MATUS(1)
user material identifier.
MATUS(2)
internal material identifier.
Required Output
Main Index
Main Index
CPA
creep constant
CFT
temperature factor
CFE
creep strain factor
CFTI
time factor
CFSTRE
stress exponent
348 Marc Volume D: User Subroutines and Special Routines
■ 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).
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:
Main Index
Main Index
σ
is the current total equivalent stress.
σy
is the current equivalent yield stress including workhardening, temperature effects and Mohr-Coulomb terms.
CHAPTER 4 349 Viscoplasticity and Generalized Plasticity User Subroutines
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 y o where σ y o is the equivalent stress at first yield.
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
Main Index
Main Index
350 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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.
CHAPTER 4 351 Viscoplasticity and Generalized Plasticity User Subroutines
Required Output: SINC
∂σ is the dimensionless flow directions ------- . The current values in this subroutine ∂σ are associated with the yield criterion used. The user are free to vary the flow rule in NASSOC by changing SINC.
It is often useful to have the information regarding the yield surface. This can be obtained from common block VISCPL yd, yd1, yd2, yd21, ydzer
where: YD
is the equivalent stress at first yield.
YD1
is the equivalent yield stress including current work hardening and temperature effects.
YD2
is the equivalent stress for ORNL tenth cycle yield.
YD21
is the equivalent stress including current work hardening and temperature effects for ORNL tenth cycle yield.
YDZER
is the equivalent yield stress including Mohr-Coulomb terms (defaults to YD1).
Example The following example calculates a nonassociated flow rule for a Mohr-Coulomb problem. The default flow rule is the one associated with the von Mises yield criterion. SUBROUTINE NASSOC(EQCPNC,STOT,SINC,E, + AMOHR,NGENS,NDI,T,TZERO) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION STOT(1),SINC(1),E(1),T(1) NSHEAR=NGENS-NDI DO 1 I=1,NDI 1 SINC(I)=0.5*3.0*(STOT(1)-T(2)) TR=1./TZERO DO 2 I=1,NDI 2 SINC(I)=SINC(I)*TR RETURN END
Main Index
Main Index
352 Marc Volume D: User Subroutines and Special Routines
■ ZERO Calculation of Equivalent Stress Description The ZERO user subroutine is used to calculate the equivalent yield stress based on the current total stresses. The ZERO user subroutine in Marc applies the von Mises yield criterion as a default. The user can substitute another yield criterion by writing a new ZERO user subroutine. Mohr-Coulomb models specified in the ISOTROPIC option should not be used when ZERO user subroutine is used because of the danger of taking into account the effects of hydrostatic pressure twice. Format User subroutine ZERO is written with the following headers: *
REAL*8 FUNCTION ZERO(NDI,NSHEAR,T,IORT,IANISO,YRDIR,YRSHR, AMM,AO) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION T(1),YRDIR(3),YRSHR(3),AMM(3) user coding RETURN END
where: Input: NDI NSHEAR T(I) IORT IANISO YRDIR YRSHR AMM AO
is the number of direct components of stress. is the number of shear components of stress. is the Ith component of stress. is the flag indicating if curvilinear coordinates are used. This is 1 for element types 4, 8, and 24. is the flag indicating if anisotropy is used. are the components for Hill’s anisotropic plasticity. are the shear components for Hill’s anisotropic plasticity. is the metric if curvilinear coordinates are used. is the metric scale factor if curvilinear coordinates are used.
Required Output: ZERO
Main Index
Main Index
is the equivalent yield stress.
CHAPTER 4 353 Viscoplasticity and Generalized Plasticity User Subroutines
■ 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: Input: M NN KCUS(1) KCUS(2) YIELD IFIRST
DT EPLAS
ERATE MATS JPROPS
is the element numbers. is the integration point number. is your layer number (always 1 for continuum elements). is the internal layer number (always 1 for continuum element). is the yield stress entered as data in the ISOTROPIC option. =1 Calculate yield stress. =2 Calculate 10th cycle yield stress (ORNL only). =3 Calculate 100th cycle yield stress (ORNL only). is the current temperature is the total equivalent plastic strain. Note that this is implied by the yield criterion used in the ZERO user subroutine (or the Mohr-Coulomb yield criterion, if that is used). is the equivalent plastic strain rate. Not available for viscoplasticity. is the material id. is the table id associated with the yield.
Required Output: YIEL
Main Index
Main Index
is the current magnitude of the yield stress.
354 Marc Volume D: User Subroutines and Special Routines
■ 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: 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 equivalent stress T.
Main Index
Main Index
∂σ ------- ⋅ σ ∂σ
to be defined by the user, where σ is the
CHAPTER 4 355 Viscoplasticity and Generalized Plasticity User Subroutines
■ 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: 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
Main Index
Main Index
is the fraction of stress increment beyond the yield stress to be defined the user.
356 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 5 Viscoelasticity User Subroutines List
5
User Subroutine
Main Index
Main Index
Viscoelasticity User Subroutines List
Page
CRPVIS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
HOOKVI
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
TRSFAC
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
358 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 5 Viscoelasticity User Subroutines
5
Main Index
Main Index
Viscoelasticity User Subroutines
360 Marc Volume D: User Subroutines and Special Routines
This chapter describes user subroutines used for viscoelastic analysis. There are two procedures available. The explicit procedure uses the CRPVIS user subroutine to describe a generalized Kelvin model. The implicit procedure uses a hereditary integral approach and is the preferred choice. Table 5-1 summarizes these routines and indicates what parameters or model definition options are required to invoke the user subroutine. Table 5-1
Viscoplasticity User Subroutines Requirements
User Subroutine
Required Parameters or 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 VISCELORTH or VISCELMOON or VISCELOGDEN and SHIFT FUNCTION
Definition of shift function for thermo-rheologically simple material.
Main Index
Main Index
CHAPTER 5 361 Viscoelasticity User Subroutines
■ 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 strain ε iKj , governed by d ----- ε iKj = A i j k l S k l – B i j k l ε kKl dt
where: [A] and [B]
are defined by the user in the user subroutine described below,
si j
σk k are the deviatoric stress components s i j = σ i j – δ i j --------3
and the total strain is: ε i j = ε iej + ε ipj + ε icj + ε iKj + ε itjh where:
Main Index
Main Index
ε itjh
are the thermal strain components.
ε iej
are the elastic strain components (instantaneous response).
ε ipj
are the plastic strain components.
ε icj
are the creep strains defined via CRPLAW and VSWELL user subroutines and using the CREEP option.
ε iKj
are the Kelvin model strain components as defined above.
362 Marc Volume D: User Subroutines and Special Routines
Format User subroutine CRPVIS is written with the following headers: SUBROUTINE CRPVIS(CRPR,TSIG,SINC,AE,BE,NGENS, 1 DT,DTDL,N,NN,KCUS,MATUS,NDI,NSHEAR,TIME,TIMINC) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION CRPR(1),TSIG(1),SINC(1),AE(NGENS,NGENS), 1 BE(NGENS,NGENS),DT(1),DTDL(1),N(2),MATUS(2),KCUS(2) user coding RETURN END
where: Input: CRPR TSIG(1)
Main Index
Main Index
are the Kelvin creep strain components. 1⁄2 3 is the second invariant of the deviatoric stress = ⎛ --- s i j s i j⎞ . ⎝2 ⎠
TSIG(2)
1 is the hydrostatic stress = --- σ k k . 3
SINC
are the deviatoric stress components ( s i j ) .
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 user’s 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’s 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.
CHAPTER 5 363 Viscoelasticity User Subroutines
Required Output:
AE
is the matrix A i j k l above, to be defined here by the user.
BE
is the matrix B i j k l 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 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) = dt
A α β γ δ S γ δ - B α β γ δ ε γd Kα,β etc. = 1,2
with two shear components stored, ε 1 2 , then ε 2 1 .
Main Index
Main Index
364 Marc Volume D: User Subroutines and Special Routines
■ 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: Δε ( x, t ) =
(t + Δt)
∫t
10 B [ T ( x, t
1)]
dt 1
where the shift factor, B, is a function of the spatially and time dependent temperature, T(x, t). A five-point Simpson’s rule is used to numerically integrate this expression. In this subroutine, the user is expected to define the shift function, φ, which is the logarithm of the shift factor: that is, [ φ ( x, t ) ] = – Log 10 { B [ T ( x, t ) ] }
The user subroutine is called five times at each point. These points can be the centroids of the elements or each integrating point if the ALL POINTS parameter has been invoked.
Main Index
Main Index
CHAPTER 5 365 Viscoelasticity User Subroutines
Format User subroutine TRSFAC is written with the following headers: SUBROUTINE TRSFAC(SHFTLG,MATV,NSHFT,N,NN,KCUS,DT,DTDL,TGLASS, *CPTIM,HXITOT,TIMINC,TINT) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION DT(1),DTDL(1),N(2),KCUS(2) user coding RETURN END
where: The following parameters are passed into this user subroutine and must not be redefined: Input:
Main Index
Main Index
MATV
is the viscoelastic material group identifier or number associated with the point, x, currently being considered.
NSHFT
is the negative number associated with the particular user-defined shift function for the viscoelastic material group, MATV. This number was specified in the first field of the second data line in the SHIFT FUNCTION model definition option.
N(1)
is the user’s element number.
N(2)
is the internal element number.
NN
is the current integrating point number (or centroidal point if the ALL POINTS parameter is not used).
KCUS(1)
is your layer number (always 1 for continuum elements).
KCUS(2)
is the internal layer number (always 1 for continuum element).
DT
is the total temperature at this point corresponding to the beginning of the current increment.
DTDL
is the current incremental change in temperature for this point.
TGLASS
is the reference or glassy transition temperature used in defining the shift function.
CPTIM
is the total creep or viscoelastic time up to the beginning of this increment.
HXITOT
is the total pseudo- or reduced-time at this point, corresponding to the beginning of the increment.
TIMINC
is the increment of real time.
366 Marc Volume D: User Subroutines and Special Routines
TINT
is a linearly interpolated value of the total temperature at one of the five integrating stations between the beginning and end of the increment. This is the variable which should be used in computing the value of the shift function.
Required Output:
SHFTLG
Main Index
Main Index
is the logarithm of the shift factor, φ, which must be defined by the user.
CHAPTER 5 367 Viscoelasticity User Subroutines
■ 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: Input: M(1) M(2) NN KCUS(1) KCUS(2) ITERM DT DTDL E PR G
is the user’s element number. is the internal element number. is the integration point number. is your layer number (always 1 for continuum elements). is the internal layer number (always 1 for continuum element). is the viscoelastic series number. is the current temperature. is the current increment in temperature. is vector of time dependent Young’s moduli input in the VISCELORTH option. is the vector of time dependent Poisson’s ratios input in the VISCELORTH option. is the vector of time dependent shear moduli given in the VISCELORTH option.
Required Output:
B
Main Index
Main Index
is the user-defined 6 x 6 matrix of viscoelastic time dependent constants for this element and series number.
368 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 6 Geometry Modifications User Subroutines List
6
Geometry Modifications User Subroutines List
User Subroutine MAP2D .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
REBAR .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
UACTIVE . . . . . . UACTUAT . . . . . . UADAP . . . . . . . . UADAP2 . . . . . . . UADAPBOX . . . . UCOORD . . . . . . UCRACK_PARIS . UCRACKGROW . UFCONN . . . . . . UFRORD . . . . . . UFXORD . . . . . . . UMAKNET . . . . . UPNOD . . . . . . . .
Main Index
Main Index
Page
................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ...................................................
387 408 394 399 400 393 403 395 375 390 374 380 385
370 Marc Volume D: User Subroutines and Special Routines
User Subroutine URCONN . . . . . USHELL . . . . . USIZEOUTL. . . USPLIT . . . . . . USPLIT_MESH UTHICK . . . . . . UTRANS . . . . .
Main Index
Main Index
.................................................... .................................................... .................................................... .................................................... .................................................... .................................................... ....................................................
Page 391 406 378 392 397 407 405
Chapter 6 Geometry Modifications User Subroutines
6
Main Index
Main Index
Geometry Modifications User Subroutines
372 Marc Volume D: User Subroutines and Special Routines
The user subroutines described in this section are provided to allow the user to define the initial geometry of the finite element mesh, or to change the mesh due to rezoning or rigid plastic analyses. Often these user subroutines are used to customize already existing meshes. The UTRANS user subroutine is a powerful way to provide transformations to the degrees of freedom of a node. Table 6-1 summarizes these routines and indicates what parameters or model definition options are required to invoke the user subroutine. Table 6-1
Geometry Modifications User Subroutines Requirements
User Subroutine
Required Parameters or Model Definition Options
Purpose
MAP2D
MESH2D MAPPER
Define the coordinates of key boundary nodes for mesh generation.
REBAR
ELEMENTS (rebar element types)
Define the orientation and effective thickness of the elements.
UACTIVE
Activate or deactivate elements.
UACTUAT
GEOMETRY
Define the length of the actuator element.
UADAP
ADAPTIVE (parameter) ADAPTIVE (model definition option)
Define a user-defined error criterion for adaptive meshing.
UADAP2
ADAPTIVE (parameter) ADAPTIVE (model definition option)
Define unrefinement for adaptive meshing.
UADAPBOX
ADAPTIVE (parameter) ADAPTIVE (model definition option)
User-defined region for local adaptive meshing.
UCOORD
ADAPTIVE (parameter) ADAPTIVE (model definition option)
Describe of the location of newly created nodes.
UCRACK_PARIS VCCT
Defines the increment of crack growth.
UFCONN
UFCONN
Modifies the connectivity of an element.
UCRACKGROW
VCCT
Allows definition of the crack growth direction and crack growth increment.
UFRORD
REZONING REZONE UFRORD
Modify the coordinates of a node during rezoning.
UFXORD
UFXORD
Modify the initial nodal coordinates.
UMAKNET
ADAPT GLOBAL
User-defined standalone mesher
Main Index
Main Index
CHAPTER 6 373 Geometry Modifications User Subroutines
Table 6-1
Geometry Modifications User Subroutines Requirements (continued)
User Subroutine
Required Parameters or Model Definition Options
Purpose
UPNOD
R-P FLOW
Update the nodal coordinates in a rigid plastic analysis using the Eulerian procedure.
URCONN
UFCONN
Modify the connectivity of an element during rezoning.
USHELL
GEOMETRY
Define the integration point thickness for shell elements.
USIZEOUTL
ADAPT GLOBAL
Define refinement boxes with different element edge length on the 2-D outlines for remeshing.
USPLIT
ADAPT GLOBAL
Define where to split a continuous deformable body into two separate parts.
USPLIT_MESH
ADAPT GLOBAL
Define edges, nodes, or faces to split up a mesh.
UTHICK
NODAL THICKNESS
Define the initial thickness at the nodes for shell elements.
UTRANS
UTRANFORM
Define a transformation to be applied to the degrees of freedom at a node.
Main Index
Main Index
374 Marc Volume D: User Subroutines and Special Routines
■ UFXORD 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: Input: NCRD
is the number of coordinates per node.
N
is the node number.
Required Output: XORD
is the array of coordinates in the Nth node and is passed in containing coordinates previously generated at the Nth node by COORDINATES, FXORD or UFXORD options.
This user subroutine is most commonly used with shell or beam elements (for example, elements 4, 8, 13, 15) where the full coordinate set is usually generated on the basis of reduced set of coordinates. See, for example, the description of the FXORD option in Marc Volume A: User Information. The user can also use this routine to generate special coordinate systems (for example, cylindrical or spherical) or to convert from special coordinate systems to a rectangular system.
Main Index
Main Index
CHAPTER 6 375 Geometry Modifications User Subroutines
■ UFCONN 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: 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
Main Index
Main Index
376 Marc Volume D: User Subroutines and Special Routines
this routine. Note there is no checking to determine if ITYPE has been defined on the SIZING or ELEMENTS parameter, or if node numbers are in the range 1 ≤ N ≤ NUMNP .
Main Index
Main Index
CHAPTER 6 377 Geometry Modifications User Subroutines
■ MAP2D 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: Input: NNO
is the number of boundary nodes.
Required Output: X and Y
Main Index
Main Index
are the user-defined coordinates of the boundary nodes.
378 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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.
CHAPTER 6 379 Geometry Modifications User Subroutines
XZY
is the outline point coordinates.
NUMOUT
is the number of the outline points.
Required Output: ESIZE
Main Index
Main Index
is the edge length array on the outline.
380 Marc Volume D: User Subroutines and Special Routines
■ 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 subroutines are user_extru2d.f and user_extru3d.f, respectively.
user
Format SUBROUTINE UMAKNET(IDO,IFLAG,NCRDMX,NDEGMX,NUMNP,NUMEL,NDEG, & NCRD,IEL_TYPE,NNODMX,NUMELMX,NELTEAB, & XORD,DISP,IELCON,IELTAB,FILENAME) INCLUDE '../COMMON/IMPLICIT' DIMENSION xord(ncrdmx,*),disp(ndegmx,*),ieltab(neltab,*) DIMENSION ielcon(nnodmx,*) IFLAG=1 user coding RETURN END
where: Input:
Main Index
Main Index
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.
CHAPTER 6 381 Geometry Modifications User Subroutines
numnp
is the total number of nodes.
numel
is the total number of elements.
numelmx
is the maximum number of elements.
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.
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 Fixed Free
Data Type
Entry
1st data block
1-10
A
Enter the word "extended".
A
Enter the words "connectivity change".
I
Enter 0.
1-10
I
Enter element number.
11-20
I
Enter 11.
2nd data block
1-20 3rd data block
1-10 4th data block
Main Index
Main Index
382 Marc Volume D: User Subroutines and Special Routines
Format Fixed Free
Data Type
Entry
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.
A
Enter the words "coordinate change".
I
Enter 0.
5th data block
1-20 6th data block
1-10
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".
A
Enter the word "usdata".
9th data block
1-10
Main Index
Main Index
CHAPTER 6 383 Geometry Modifications User Subroutines
feb file format - fixed format Format Format Fixed Free
Data Type
Entry
1st data block
1-10
A
Enter the word "extended".
A
Enter the words “connectivity change”.
I
Enter 0.
2nd data block
1-10 3rd data block
1-10
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.
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.
A
Enter the words "coordinate change".
I
Enter 0.
5th data block
1-20 6th data block
1-10
Repeat the 7th data block for each node.
Main Index
Main Index
384 Marc Volume D: User Subroutines and Special Routines
Format Fixed Free
Data Type
Entry
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.
A
Enter the words "end option".
8th data block
1-10
Main Index
Main Index
CHAPTER 6 385 Geometry Modifications User Subroutines
■ 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: 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
Main Index
Main Index
is the array of coordinates at this node, to be redefined in this routine as required.
386 Marc Volume D: User Subroutines and Special Routines
Example A typical user subroutine UPNOD for use with higher order elements would be:
5
Main Index
Main Index
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 CONTINUE RETURN END
CHAPTER 6 387 Geometry Modifications User Subroutines
■ 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. Format User subroutine UACTIVE is written with the following headers: SUBROUTINE UACTIVE(M,N,MODE,IRSTSTR,IRSTSTN,INC,TIME,TIMINC) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION MODE(3) user coding RETURN END
where: Input: M(1)
is the element number.
M(2)
is the master element number in an adaptive analysis.
N
is the internal elsto number.
NN
is the internal element number.
INC
is the increment number.
TIME
is the time at the beginning of the increment.
TIMINC
is the incremental time.
Required Output: MODE(1)
-1 -11 2
Main Index
Main Index
deactivate element and remove element from post file. deactivate element and keep element on post file leave in current status.
388 Marc Volume D: User Subroutines and Special Routines
MODE(2) MODE(3)
Main Index
Main Index
1
activate element and add element to post file
11
activate element and keep status on post file.
1
only activate/deactivate mechanical part in coupled
2
only activate/deactivate at the thermal part in coupled
0
activation/deactivation at the end of increment
1
activation/deactivation at the beginning of increment
IRSTSTR
set to 1 to reset stresses to zero.
IRSTSTN
set to 1 to reset strains to zero.
CHAPTER 6 389 Geometry Modifications User Subroutines
■ 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: 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.
Note: Three entries are to be defined in A in all cases.
Main Index
Main Index
390 Marc Volume D: User Subroutines and Special Routines
■ 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: 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
Main Index
Main Index
is the coordinates of node N which should be generated or modified in this user subroutine.
CHAPTER 6 391 Geometry Modifications User Subroutines
■ 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: 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 .
Main Index
Main Index
392 Marc Volume D: User Subroutines and Special Routines
■ 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: Input: IDIERE
is the body number.
Required Output:
Main Index
Main Index
IFLAG=1
a body is split by checking the thickness or distance of any pair of the opposite segments.
SPLIT0
the distance value at which the body will be split.
CHAPTER 6 393 Geometry Modifications User Subroutines
■ 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) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION XORD(NCRD,1),LM(1) user coding RETURN END
where: Input: NCRD
is the number of coordinates per node.
INOD
is the node number of new node.
LM(I)
is the nodes on which INOD is depending.
NNOD
is the number of nodes on which INOD is depending. = 2 middle of edge between LM(1) and LM(2). = 3 center of triangle LM(1), LM(2), LM(3). = 4 center of plane LM(1), LM(2), LM(3), LM(4). = 4 center of tetrahedral 4 LM(1), LM(2), LM(3), LM(4). = 8 center of brick LM(1), LM(2), LM(3), LM(4), LM(5), LM(6), LM(7), LM(8).
Required Output: XORD(J,I)
is the current coordinate j of node i.
Update XORD(J,INOD) if desired.
Main Index
Main Index
394 Marc Volume D: User Subroutines and Special Routines
■ 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: Input: MM
is the user’s element number.
XORD
is the original coordinates.
DSXT
is the total displacements.
NCRDMX
is the maximum number of coordinates per node.
NDEGMX
is the maximum number of degrees of freedom per node.
LM
is the node numbers of this element.
NNODE
is the number of nodes per element.
Required Output: USERCR
Main Index
Main Index
is the user error criteria to be defined here.
CHAPTER 6 395 Geometry Modifications User Subroutines
■ 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:
Main Index
Main Index
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.
396 Marc Volume D: User Subroutines and Special Routines
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.
Required Output:
Main Index
Main Index
DIR
is the estimated crack growth direction.
GROWINC
is the crack growth increment.
CHAPTER 6 397 Geometry Modifications User Subroutines
■ 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: Input: ICALL
Main Index
Main Index
=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.
398 Marc Volume D: User Subroutines and Special Routines
NLIST
is the number of nodes specified in list. If nlist = 0, all nodes in the specified edges or faces are used.
IEDGELIST
is the list of edges given as node pairs where the mesh should be split.
NEDGELIST
is the number of edges given in iedgelist.
IFACELIST
is the list of faces where the mesh should be split. For triangular faces, set the fourth face node to zero. For higher order, elements only specify the corner nodes of the face.
NFACELIST
is the number of faces given in ifacelist.
INC
is the current increment number.
TIME
is the current solution time at the start of increment INC.
TIMEINC
is the current time increment.
Required Output NODELIST
Main Index
Main Index
is the array of nodes defining where the mesh is to be split.
CHAPTER 6 399 Geometry Modifications User Subroutines
■ UADAP2 User-defined Unrefinement Description The UADAP2 user subroutine can be used to define unrefinement for local adaptive meshing. A refined element is unrefined if all its slave elements are marked for unrefine. An element is marked for unrefine if USERCR specified in this routine is larger than f1 * user_max or f2. Note that f1 and f2 must be specified on the ADAPTIVE model definition option. User_max is the largest value of USERCR over all of the elements. 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: Input: MM
is the internal element number. ielext (mm) gives the user element number. XORD contains the original coordinates. DSXT contains the total displacements. NCRDMX is the maximum number of coordinates per node. NDEGMX is the maximum number of degrees of freedom per node. LM contains the node numbers of this element. NNODE is the number of nodes of this element. Required Output: USERCR is the criterion is to be defined in this routine.
Main Index
Main Index
400 Marc Volume D: User Subroutines and Special Routines
■ UADAPBOX 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: Input
Main Index
Main Index
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
CHAPTER 6 401 Geometry Modifications User Subroutines
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
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
Main Index
Main Index
REGCOORD(1)
= Radius
REGCOORD(2)
= X coordinate of center.
REGCOORD(3)
= Y coordinate of center.
REGCOORD(4)
= Z coordinate of center.
402 Marc Volume D: User Subroutines and Special Routines
Example The following code lets the box defined in adaptive criterion 1 follow the motion of rigid body number 2. IF (ICRITERION.EQ.1) THEN REGCOORD(1)=REGCOORD(1)+BODYMOTION(1,2) REGCOORD(4)=REGCOORD(4)+BODYMOTION(1,2) REGCOORD(2)=REGCOORD(2)+BODYMOTION(2,2) REGCOORD(5)=REGCOORD(5)+BODYMOTION(2,2) REGCOORD(3)=REGCOORD(3)+BODYMOTION(3,2) REGCOORD(6)=REGCOORD(6)+BODYMOTION(3,2) ENDIF
Main Index
Main Index
CHAPTER 6 403 Geometry Modifications User Subroutines
■ UCRACK_PARIS 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.
Main Index
Main Index
GTHRESH
is the threshold value for the energy release rate, from input. Possibly scaled by table.
C
is the user input C parameter for Paris law possibly scaled by table.
EXPON
is the user input m parameter (exponent) for Paris law possibly scaled by table.
GROWINCMI N
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.
404 Marc Volume D: User Subroutines and Special Routines
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 Paris’s law which is: growinc = C [ ( G m a x –
Main Index
Main Index
G m i n ) exp o n –
G t h exp o n ]
CHAPTER 6 405 Geometry Modifications User Subroutines
■ 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: Input: NDEG
is the number of degrees of freedom.
XORD
is the coordinates of the node updated if either the LARGE STRAIN or FOLLOW FOR parameter is used.
NCRD
is the number of coordinates per node.
I
is the user’s node number.
N
is the transformation number.
Required Output: DICOS
Main Index
Main Index
is the user-defined rotation matrix from the local to global coordinate system. Note that this matrix must be proper orthogonal.
406 Marc Volume D: User Subroutines and Special Routines
■ 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: Input: XINTP
is the integration point coordinates.
NCRD
is the number of coordinates per point.
M(1)
is the user’s element number.
M(2)
is the internal element number.
NN
is the integration point number.
Required Output: THICK
Main Index
Main Index
is the thickness of shell, to be modified by the user.
CHAPTER 6 407 Geometry Modifications User Subroutines
■ 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: Input: COORD
NCRD NOD BEARC NBEARF INC INCSUB
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. is the maximum number of coordinates per node. is the node number. is not used. is not used. is not used. is not used.
Required Output: THICK
Main Index
Main Index
is the user-defined nodal thickness of node NOD. Upon input, THICK takes the value input through the NODAL THICKNESS option.
408 Marc Volume D: User Subroutines and Special Routines
■ 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: Input: M(1)
is the user’s element number.
M(2)
is the internal element number.
INC
is the increment number.
CPTIM
is the time.
TIMINC
is the time increment.
OLNGTH
is the current length of actuator.
Required Output: XLNGTH
Main Index
Main Index
is the length of actuator to be set by the user.
Chapter 7 Output Quantities User Subroutines List
7
User Subroutine ELEVAR ELEVEC IMPD
PLOTV
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
UBGINC . . UBGITR . . UBGPASS . UEDINC . . UELOOP . . UPOSTV . . UPSTNO . .
Main Index
Page
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
INTCRD
Main Index
Output Quantities User Subroutines List
........................................................ ........................................................ ........................................................ ........................................................ ........................................................ ........................................................ ........................................................
433 435 436 434 437 415 418
410 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 7 Output Quantities User Subroutines
7
Main Index
Main Index
Output Quantities User Subroutines
412 Marc Volume D: User Subroutines and Special Routines
This chapter describes user subroutines which can be used to obtain results from the analysis and manipulate it for postprocessing. There are also four dummy user subroutines that can be used to set parameters for the advanced user. Table 7-1 summarizes these user subroutines and indicates what parameters or model definition options are required to invoke the user subroutine. Table 7-1
Output Quantities User Subroutines Requirements
User Subroutine
Required Parameters or 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 ORIENTATION
Defines element quantity to be written to post file.
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
Main Index
Main Index
CHAPTER 7 413 Output Quantities User Subroutines
■ 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: Input: S
SP ETOT EPLAS ECREEP T M(1) M(2) NN KCUS(1) KCUS(2)
Main Index
Main Index
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). is the array of stresses in the preferred direction if ORIENTATION is used. is the total strain (generalized) at this integration point. is the total plastic strain at this integration point. is the total creep strain at this integration point. is the array of state variables at this integration point (temperature first). is the user’s element number. is the internal element number. is the integration point number. is the internal layer number (always 1 for continuum elements). is the internal layer number (always 1 for continuum elements).
414 Marc Volume D: User Subroutines and Special Routines
NDI NSHEAR JPLTCD
is the number of direct stresses. is the number of shear stresses. is the absolute value of the user’s entered code.
Required Output: is the variable to be plotted or put onto the post file, to be defined in this routine.
V
Example For example, suppose the user wishes to output the sum of the squares of the two shear stresses in the friction theory. These are S(2) and S(3), so the user subroutine would appear as: SUBROUTINE PLOTV(V,S,SP,ETOT,EPLAS,ECREEP,T,M,NN,KCUS,NDI, NSHEAR,JPLTCD) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION S(*),SP(*),ETOT(*),EPLAS(*),ECREEP(*), T(*) + M(2),KCUS(2) V=SQRT(S(2)**2 + S(3)**2) RETURN END +
This quantity could then be postprocessed using Marc Mentat or MD Patran. For electromagnetics, the PLOTV variables are: V
is the variable.
ERI
is the real and imaginary components of the electric field intensity.
DRI
is the real and imaginary components of the electric displacement.
BRI
is the real and imaginary components of the magnetic induction.
HRI
is the real and imaginary components of the magnetic field intensity.
CRI
is the real and imaginary components of the current density.
T
is the current temperature; not used.
M(1)
is the user’s element number.
M(2)
is the internal element number
NN
is the integration point number.
KCUS(1) is not used (always 1). KCUS(2) is not used (always 1).
Main Index
Main Index
NDI
is the number of components = 3
NSHEAR
is not used.
JPLTCD
is the absolute value of the user’s post code.
CHAPTER 7 415 Output Quantities User Subroutines
■ 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: Input: N NDEG NUMNP IANTYP JNODE IUID XORD VECTOR INC CPTIM
is the user’s node number. is the number of degrees of freedom per node. is the number of nodes in the mesh. is the analysis type – see PLDUMP in Chapter 9. is the number of vector quantities already defined – see PLDUMP in Chapter 9. is the user’s vector number. is the coordinates of this node. is the displacement, etc. of this node. See PLDUMP in Chapter 9. is the increment number. is the total time.
Required Output: UPOST
Main Index
Main Index
is user-defined components of vector for this node.
416 Marc Volume D: User Subroutines and Special Routines
Example For example, the user would like to postprocess the relative displacement of all nodes with respect to his node 5 for all time. The user would need to obtain the displacement of node 5 and subtract this from the other displacements. This is done as follows: SUBROUTINE UPOSTV(N,NDEG,NCRD,NUMNP,IANTYP,JNODE,IUID, * UPOST,XORD,VECTOR,INC,CPTIM) implicit real*8 (a-h,o-z) c c
user subroutine to define nodal post variables
c c
n
user node number
c
ndeg
number of degrees of freedom per node
c
ncrd
number of coordinates per node
c
numnp
number of nodes in mesh
c
iantyp
analysis type - see PLDUMP in volume D
c
jnode
number of vector quantities already defined
c c c node
- see PLDUMP in volume D iuid upost
user vector number user defined components of vector for this
c
xord
coordinates of this node
c
vectors
displacement, etc of this node.
c volume D
see iantyp/jnode table in PLDUMP section in
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
Main Index
Main Index
get internal node number
CHAPTER 7 417 Output Quantities User Subroutines
lint=nodint (lext) c
get reference displacement and store into disp5 la3=idsxt+(lint-1)*ndeg call mcpy(vars(la3),disp5,ndeg,1,0)
c c
get displacement of current node from vector and
c subtract off reference displacement and store back into upost c do i=1,ndeg upost(i)=vector(i,1)-disp5(i) enddo c return end
Main Index
Main Index
418 Marc Volume D: User Subroutines and Special Routines
■ UPSTNO 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 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) VALNO(NQNCOMP+1:2*NQNCOMP) magnitude/phase VALNO( 1: NQNCOMP) VALNO(NQNCOMP+1:2*NQNCOMP)
Main Index
Main Index
real imagaginary magnitude phase
CHAPTER 7 419 Output Quantities User Subroutines
NQNCOMP
Number of values in VALNO
NQTYPE
0 = scalar 1 = vector
NQAVER
Only for DDM: 0 = sum over domains 1 = average over domains
NQCOMPTYPE
Used by Marc Mentat:
NQDATATYPE
0 = default 1 = modal 2 = buckle 3 = harmonic real 4 = harmonic real/imaginary 5 = harmonic magnitude/phase
0 = global coordinate system (X,Y,Z) 1 = shell (Top, Bottom, Middle) 2 = order (First, Second, Third)
Example For example, the user would like to vector plot the total contact force on nodes whereby the total contact force is the vector sum of the normal and friction force vectors. The UPSTNO user subroutine can be selected to perform the vector addition and place the sum on the post file. This is done as follows: subroutine upstno(nqcode,nodeid,valno,nqncomp,nqtype, nqaver,nqcomptype,nqdatatype, nqcompname) implicit real*8 (a-h,o-z) dimension valno(*) character*24 nqcompname(*) c......................................... Begin User Coding dimension valno1(3),valno2(3) if (nqcode.eq.-1) then c... pick up contact normal force and store in valno1 call nodvar(35,nodeid,valno1,nqncomp,nqdatatype) c... pick up contact friction force and store in valno2 call nodvar(37,nodeid,valno2,nqncomp,nqdatatype) c... add normal and friction force do 1 i = 1, nqncomp valno(i)=valno1(i)+valno2(i) 1 continue c... indicate that valno represents a vector nqtype=1 end if c......................................... End User Coding return end * *
Main Index
Main Index
420 Marc Volume D: User Subroutines and Special Routines
■ IMPD 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: Input: LNODE(1) LNODE(2) DD TD XORD F V A
Main Index
Main Index
is the node number (the user subroutine is called once per node per increment). =1 is the array of displacement increments at this node. is the array of total displacements at this node. are the coordinates of this node. are the reaction forces at prescribed boundary conditions; residual load correction elsewhere at this node. is the total velocity at this node. is the total acceleration at this node.
CHAPTER 7 421 Output Quantities User Subroutines
is the number of degrees of freedom per node (that is, the size of the DD, TD, V, and A arrays). is the number of coordinate directions per node (equals the size of the XORD array).
NDEG NCRD
During harmonic subincrements: Input: is the array of real displacements. is the array of imaginary displacements. is the array of real reaction forces. is the array of imaginary reaction forces.
DD TD F V
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.
C
C
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) TXORD WILL BE THE COORDS + 5X TOTAL DISPLACEMENTS DO 1 I = 1,3 1 TXORD(I) = XORD(I) + 5.0*TD(I) WRITE OUT DISPLACED POSITIONS ON TAPE 20. WRITE (20) LNODE(1), TXORD RETURN END
After each increment, there are NUMNP records (number of nodal points) on logical unit 20; each contains a node number and three adjusted coordinates. Note that any additional file unit must be taken care of with the appropriate machine dependent JCL. Note: In a coupled thermal-stress analysis, IMPD is called at the end of the stress pass of an increment. If one then wants to have the temperature of a node (or the top, bottom, and middle temperature in the case of shell elements), use can be made of the NODVAR user subroutine as follows:
DIMENSION TXORD(3) C CALL NODVAR (14, N, DDTEMP, N1DUM,N2DUM) Now DDTEMP contains the temperature(s) of node n.
Main Index
Main Index
422 Marc Volume D: User Subroutines and Special Routines
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: 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 RETURN END
Main Index
Main Index
CHAPTER 7 423 Output Quantities User Subroutines
where: Input: LNODE(1) is the node number (the user subroutine is called once per node per increment). LNODE(2) = 4 DD
is the array of voltages at this node.
TD
is the array of reaction currents at this node.
XORD
is the coordinates of this node.
F
is not used.
V
is not used.
A
is not used.
NDEG
is the number of degrees of freedom per node (that is, the size of the DD, TD, V, and A arrays).
NCRD
is the number of coordinate directions per node (equals the size of the XORD array).
Electrostatic Analysis Format User subroutine IMPD is written with the following headers: SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION XORD(NCRD) user coding RETURN END
where: Input: LNODE(1) is the node number (the user subroutine is called once per node per increment). LNODE(2) = 6.
Main Index
Main Index
DD
is the potential at this node.
TD
is the reaction charge at this node.
XORD
is the coordinates of this node.
F
is not used.
424 Marc Volume D: User Subroutines and Special Routines
V
is not used.
A
is not used.
NDEG
is the number of degrees of freedom per node = 1.
NCRD
is the number of coordinate directions per node (equals the size of the XORD array).
Magnetostatic Analysis Format User subroutine IMPD is written with the following headers: SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION XORD(NCRD),LNODE(2) user coding RETURN END
where: Input: LNODE(1) is the node number (the user subroutine is called once per node per increment). LNODE(2) = 7
Main Index
Main Index
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).
CHAPTER 7 425 Output Quantities User Subroutines
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: 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
Main Index
Main Index
426 Marc Volume D: User Subroutines and Special Routines
where: Input: LNODE(1) is the node number (the user subroutine is called once per node per increment). LNODE(2) = 8 DD
is the array of incremental potential at this node.
TD
is the array of total potential at this node.
XORD
is the coordinates of this node.
F
is the reaction forces at applied boundary conditions.
V
is not used.
A
is not used.
NDEG
is the number of degrees of freedom per node (that is, the size of the DD, TD, and F arrays).
NCRD
is the number of coordinate directions per node (equals the size of the XORD array).
Acoustic Analysis Format User subroutine IMPD is written with the following headers: SUBROUTINE IMPD (LNODE,DD,TD,XORD,F,V,A,NDEG,NCRD) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION XORD(NCRD),LNODE(2) user coding RETURN END
where: Input: LNODE(1) is the node number. LNODE(2) = 10
Main Index
Main Index
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.
CHAPTER 7 427 Output Quantities User Subroutines
F
is the real reaction forces (nodes of structural elements). 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: Input: LNODE(1) is the node number (the user subroutine is called once per node per increment). LNODE(2) = 3.
Main Index
Main Index
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).
428 Marc Volume D: User Subroutines and Special Routines
■ 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,KRTYP,PRANG,DT, 2 GSV,NGENS,NGEN1,NSTATS,NSTASS,THERM) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION GSTRAN(NGENS),GSTRES(NGENS), 1 STRESS(NGEN1),PSTRAN(NGEN1),CSTRAN(NGEN1),VSTRAN(NGEN1), 2 CAUCHY(NGEN1),DT(NSTATS),GSV(1),THERM(NGEN1),KRTYP(4), 3 PRANG(3,2),KCUS(2) User Coding RETURN END
where: Input:
Main Index
Main Index
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.
CHAPTER 7 429 Output Quantities User Subroutines
Main Index
Main Index
VSTRAN
is the viscoelastic strain array.
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.
430 Marc Volume D: User Subroutines and Special Routines
■ 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,KRTYP,PRANG,DT, 2 GSV,NGENS,NGEN1,NSTATS,NSTASS,STSRE,STSIM,STNRE,STNIM) IMPLICIT REAL *8 (A-H, O-Z) DIMENSION GSTRAN(NGENS),GSTRES(NGENS), 1 STRESS(NGEN1),PSTRAN(NGEN1),CSTRAN(NGEN1),VSTRAN(NGEN1), 2 CAUCHY(NGEN1),DT(NSTATS),GSV(NSTASS), 3 STSRE(NGEN1),STSIM(NGEN1),STNRE(NGEN1),STNIM(NGEN1),KCUS(2) user coding RETURN END
where: Input:
Main Index
Main Index
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.
CHAPTER 7 431 Output Quantities User Subroutines
Main Index
Main Index
CSTRAN
is the creep strain array.
VSTRAN
is the viscoelastic strain array.
CAUCHY
is the Cauchy stress array.
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.
432 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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.
CHAPTER 7 433 Output Quantities User Subroutines
■ UBGINC Beginning of Increment Description The UBGINC user subroutine is called at the beginning of each new increment. It can be used to define or modify data variables stored in common blocks. 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: Input:
Main Index
Main Index
INC
is the increment number.
INCSUB
is the subincrement number.
434 Marc Volume D: User Subroutines and Special Routines
■ UEDINC End of Increment Description The UEDINC user subroutine is called at the end of each increment. It can be used to define or modify data variables stored in common blocks. 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: Input:
Main Index
Main Index
INC
is the increment number.
INCSUB
is the subincrement number.
CHAPTER 7 435 Output Quantities User Subroutines
■ UBGITR Beginning of Iteration Description The UBGITR user subroutine is called at the beginning of each iteration in the solution of the nonlinear problem. It can be used to define or modify data variables stored in common blocks. 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: Input:
Main Index
Main Index
INC
is the increment number.
INCSUB
is the subincrement number.
NCYCLE
is the iteration number (the first is labeled zero).
436 Marc Volume D: User Subroutines and Special Routines
■ 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: Input:
Main Index
Main Index
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
CHAPTER 7 437 Output Quantities User Subroutines
■ 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: Input:
Main Index
Main Index
M
is the user’s element number.
N
is the internal element number.
IL
is the loop flag. = 1 form consistent nodal loads from distributed loads. = 2 stiffness matrix formation. = 3 mass matrix formation. = 4 stress recovery.
438 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 8 Hydrodynamic Lubrication User Subroutines List
8
Hydrodynamic Lubrication User Subroutines List
User Subroutine UBEAR . . UGROOV URESTR . UTHICK . UVELOC .
Main Index
Main Index
...................................................... ...................................................... ...................................................... ...................................................... ......................................................
Page 443 444 445 447 449
440 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 8 Hydrodynamic Lubrication User Subroutine
8
Main Index
Main Index
Hydrodynamic Lubrication User Subroutines
442 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 Subroutine
Required Parameters or Model Definition Options
Purpose
UBEAR
BEARING
Define the orientation of the film surface.
UGROOV
BEARING
Define the groove depth.
URESTR
BEARING RESTRICTOR
Define the nonuniform restrictor coefficient and pump pressures.
UTHICK
BEARING NODAL THICKNESS THICKNS CHANGE
Define the lubricant thickness.
UVELOC
BEARING VELOCITY
Define the nodal velocity of bearing surface.
Main Index
Main Index
CHAPTER 8 443 Hydrodynamic Lubrication User Subroutines
■ 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: 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
Main Index
Main Index
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.
444 Marc Volume D: User Subroutines and Special Routines
■ 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: 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
Main Index
Main Index
is the groove depth magnitude to be specified.
CHAPTER 8 445 Hydrodynamic Lubrication User Subroutines
■ 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: Input: PS N(1) N(2) N(3) INC
is the surface pressure at the beginning of the increment. is the element number. is the face number. is the integration point number. is the current increment number.
Required Output: CR PP
Main Index
Main Index
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). 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).
446 Marc Volume D: User Subroutines and Special Routines
Note that since CR and PP are defined as ratios, if the user does not re-define them in this user subroutine, the data block values are used. If the user wishes to give absolute values here, the corresponding values on the RESTRICTOR data set can be conveniently set to 1.
Main Index
Main Index
CHAPTER 8 447 Hydrodynamic Lubrication User Subroutines
■ UTHICK (Hydrodynamic Lubrication) Generation or Modification of Nodal Thickness or 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: Input:
Main Index
Main Index
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.
448 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
is the lubricant thickness or incremental lubricant thickness magnitude to be specified for this node.
CHAPTER 8 449 Hydrodynamic Lubrication User Subroutines
■ UVELOC (Hydrodynamic Lubrication) Generation or Modification of Nodal Velocity Vectors 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: Input: COORD
is the array of coordinates at this node.
NCRD
is the number of coordinates.
NODE
is the node number.
Required Output: VELOC
Main Index
Main Index
is the array of nodal velocity components to be defined.
450 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 9 Special Routines — Marc Post File Processor List
9
Special Routines User — Marc Post File Processor List
Special Subroutine PLDUMP13/PLDUMP2000 .
Main Index
Main Index
Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
452 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 9 Special Routines — Marc Post File Processor
9
Main Index
Main Index
Special Routines User — Marc Post File Processor
454 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 MD Patran.
Main Index
Main Index
CHAPTER 9 455 Special Routines User — Marc Post File Processor
■ PLDUMP13/PLDUMP2000 Marc Post File Processor 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. PLDUMP13/PLDUMP2000
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 – p f
or or
do not write post file to output write analysis control data to output full – write entire post file to output partial –
3. Type of post file to read: for example, b. Valid responses are: b or binary –
to read a binary file to read a formatted file
f or formatted –
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 write a new binary file f or formatted – write a new formatted file b or binary –
6. New post file name: for example, newpost.t19.
Main Index
Main Index
456 Marc Volume D: User Subroutines and Special Routines
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. 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
Main Index
Main Index
CHAPTER 9 457 Special Routines User — Marc Post File Processor
read(binary) (ibeg(ijk),ijk=1,70) write(blkbegin,’(70a1)’) blkbegin read(binary) (ititle(ijk),ijk=1,70) write(title(1:70),’(70a1)’) (ititle(ijk),ijk=1,70) read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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) write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
458 Marc Volume D: User Subroutines and Special Routines
blkbegin = =beg=50200 (Analysis Verification Data)
Main Index
Main Index
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
lm( 5)
= number of int. points
(nstres)
lm( 6)
= number of nodal variables
(inod
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
) not used
) not used
)
)
)
CHAPTER 9 459 Special Routines User — Marc Post File Processor
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
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)
Main Index
Main Index
idum
= dummy variable (=0)
blkend
= =end=
) not used
460 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 461 Special Routines User — Marc Post File Processor
do ijk=1,npost read(formatted,’(i13,a24)’) ipost,cpost enddo read(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
Main Index
Main Index
= =end=
462 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
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)
CHAPTER 9 463 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
464 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 465 Special Routines User — Marc Post File Processor
if(npoints.ne.0) then do ijk=1,npoints read(binary) ipnt(ijk),(xpnt(ijl,ijk),ijl=1,3) enddo endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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)
Main Index
Main Index
466 Marc Volume D: User Subroutines and Special Routines
lct=icurvinf(2) npu=icurvinf(3) nou=icurvinf(4) nrx=3 if(lct.eq.6) nrx=5 read(formatted,’(6e13.6)’) (xhomog(ijl),ijl=1,npu) lss=npu+nou read(formatted,’(6e13.6)’) (xknot(ijl),ijl=1,lss) if(lct.eq.-4) then read(formatted,’(6i13)’) (jpnt(ijl),ijl=1,npu) elseif(lct.eq.-6) then do itp=1,npu read(formatted,’(i13,2e13.6)’) itpid,xiso,yiso enddo elseif(lct.eq.4) then do itp=1,npu read(formatted,’(5e13.6)’) (xpnt(kk1),kk1=1,3) enddo elseif(lct.eq.6) then do itp=1,npu read(formatted,’(5e13.6)’) (xtrim(kk1),kk1=1,3),xiso,yiso enddo endif enddo endif read(formatted,’(a5)’) blkend
Main Index
Main Index
CHAPTER 9 467 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
468 Marc Volume D: User Subroutines and Special Routines
elseif(lct.eq.6) then do itp=1,npu read(binary) (xtrim(kk1),kk1=1,3),xiso,yiso enddo endif enddo endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
xhomog
= homogeneous coordinates of points on curve
xknot
= knot vector of curve
CHAPTER 9 469 Special Routines User — Marc Post File Processor
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)
Main Index
Main Index
470 Marc Volume D: User Subroutines and Special Routines
nnnn=npu*npv read(formatted,’(6e13.6)’) (xhomog(ijl),ijl=1,nnnn) lss=npu+nou+npv+nov read(formatted,’(6e13.6)’) (xknot(ijl),ijl=1,lss) if(lct.eq.-9) then read(formatted,’(6i13)’) (jpnt(ijl),ijl=1,nnnn) elseif(lct.eq.9) then do itp=1,nnnn read(formatted,’(3e13.6)’) (xpnt(kk1),kk1=1,3) enddo endif if(ntrim.ne.0) then read(formatted,’(6i13)’) (jtrmcv(ijl),ijl=1,ntrim) endif enddo endif read(formatted,’(a5)’) blkend
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)
Main Index
Main Index
CHAPTER 9 471 Special Routines User — Marc Post File Processor
icrv(ijk)=isurfinf(1) lct=isurfinf(2) npu=isurfinf(3) nou=isurfinf(4) npv=isurfinf(5) nov=isurfinf(6) ntrim=isurfinf(7) nnnn=npu*npv read(binary) (xhomog(ijl),ijl=1,nnnn) lss=npu+nou+npv+nov read(binary) (xknot(ijl),ijl=1,lss) if(lct.eq.-9) then read(binary) (jpnt(ijl),ijl=1,nnnn) elseif(lct.eq.9) then do itp=1,nnnn read(binary) (xpnt(kk1),kk1=1,3) enddo endif if(ntrim.ne.0) then read(binary) (jtrmcv(ijl),ijl=1,ntrim) endif enddo endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
472 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 473 Special Routines User — Marc Post File Processor
read(formatted,’(6i13)’) jpoint(ijk),jnode(ijk) enddo endif read(formatted,’(a5)’) blkend
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 **************************
Main Index
Main Index
474 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(a70)’) blkbegin read(formatted,’(i13)’) ncvwedat if(ncvwedat.ne.0) then do ijk=1,ncvwedat read(formatted,’(6i13)’) icurvid,nedgat read(formatted,’(6i13)’) (lelem(ilm),ilm=1,nedgat) read(formatted,’(6i13)’) (ledge(ilm),ilm=1,nedgat) enddo endif read(formatted,’(a5)’) blkend
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
Main Index
Main Index
CHAPTER 9 475 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
476 Marc Volume D: User Subroutines and Special Routines
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 *********************************
Main Index
Main Index
CHAPTER 9 477 Special Routines User — Marc Post File Processor
read(formatted,’(a70)’) blkbegin read(formatted,’(i13)’) nbcs if(nbcs.ne.0) then do ijk=1,nbcs read(formatted,’(32a1)’) (ibcname(ilm),ilm=1,32) read(formatted,’(6i13)’) (ibcinfo(ilm),ilm=1,9) ltyp
=ibcinfo(1)
lmode =ibcinfo(2) lmact =ibcinfo(3) lmharm=ibcinfo(4) lmng
=ibcinfo(5)
lmread=ibcinfo(7) lmreal=ibcinfo(8) lmdim =ibcinfo(9) read(formatted,’(6e13)’) (
rload(ilm),ilm=1,lmreal)
read(formatted,’(6i13)’) (itrload(ilm),ilm=1,lmreal) if(lmharm.gt.0) then read(formatted,’(6e13)’) (
cload(ilm),ilm=1,lmreal)
read(formatted,’(6i13)’) (itcload(ilm),ilm=1,lmreal) endif if(lmdim.ne.0) then read(formatted,’(6i13)’) (lm(ilm),ilm=1,lmdim) endif do kk2=1,lmng read(formatted,’(6i13)’) igid,igtype read(formatted,’(80a1)’) (kbcline(ilm),ilm=1,80)
Main Index
Main Index
478 Marc Volume D: User Subroutines and Special Routines
enddo enddo endif read(formatted,’(a5)’) blkend
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) (
Main Index
Main Index
cload(ilm),ilm=1,lmreal)
CHAPTER 9 479 Special Routines User — Marc Post File Processor
read(formatted) (itcload(ilm),ilm=1,lmreal) endif if(lmdim.ne.0) then read(formatted) (lm(ilm),ilm=1,lmdim) endif do kk2=1,lmng read(formatted) igid,igtype read(formatted) (kbcline(ilm),ilm=1,80) enddo enddo endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
blkbegin
= =beg=53600 (Boundary Conditions)
nbcs
= number of boundary conditions
ibcname
= boundary condition name
ibcinfo
= boundary condition information
ibcinfo(1) = boundary condition physics type
Main Index
Main Index
=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
480 Marc Volume D: User Subroutines and Special Routines
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
=21
initial void ratio
=22
void ratio
=23
initial preconsolidation pressure
=24
weld flux (read in readbcweld.f)
- not heat transfer analysis
ibcinfo(3) = active/inactive flag
Main Index
Main Index
CHAPTER 9 481 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
482 Marc Volume D: User Subroutines and Special Routines
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 *************************
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
Main Index
Main Index
CHAPTER 9 483 Special Routines User — Marc Post File Processor
read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
endif
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)
Main Index
Main Index
484 Marc Volume D: User Subroutines and Special Routines
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 *********************************
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
Main Index
Main Index
CHAPTER 9 485 Special Routines User — Marc Post File Processor
read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
endif
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
Main Index
Main Index
486 Marc Volume D: User Subroutines and Special Routines
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) 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
Main Index
Main Index
CHAPTER 9 487 Special Routines User — Marc Post File Processor
read(formatted,’(6i13)’) (nsett(ijl),ijl=1,isetn) if(isett.eq.12.or.isett.eq.13.or. *
isett.eq.18.or.isett.eq.19)
*
read(formatted,’(6i13)’) (nsettf(ijl),ijl=1,isetn) endif
enddo read(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
Main Index
Main Index
488 Marc Volume D: User Subroutines and Special Routines
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 ****************************
if(postrv.gt.10) then
read(formatted,’(a70)’) blkbegin read(formatted,’(i13)’) nset do ijk=1,nset read(formatted,’(a32)’) setnam read(formatted,’(2i13.6)’) isetn,isett if(isetn.ne.0) then read(formatted,’(6i13)’) (nsett(ijl),ijl=1,isetn) if(isett.eq.12.or.isett.eq.13) read(formatted,’(6i13)’) (nsett(ij1).ij1=1,isetn) endif
Main Index
Main Index
CHAPTER 9 489 Special Routines User — Marc Post File Processor
endif enddo read(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)
Main Index
Main Index
nset
= number of sets
setnam
= name of set ijk
490 Marc Volume D: User Subroutines and Special Routines
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 ***********************************
if(ndie.gt.0) then
read(formatted,’(a70)’) blkbegin do ijk=1,ndie if(ipstk2.lt.8) then read(formatted,’(3i13)’) ibody,itype,nitems
Main Index
Main Index
CHAPTER 9 491 Special Routines User — Marc Post File Processor
else read(formatted,’(4i13)’) ibody,itype,nitems,istruc read(formatted,’(a24)’) bdname read(formatted,(6e13.6)’) (pos(ij1),ij1-1,3),(rot(ij1),ij1=1,3) endif if(itype,ne.0.or.ipstk2.ge.8) then if(itype.eq.0) then read(formatted,’(i13)’) nelem read(formatted,’(6i13)’) (ielem(ijl),ijl=1,nelem) endif if(itype.eq.1) then do ijl=1,nitems read(formatted’(2i13)’) npatch,npoint do ijm=1,npatch read(formatted’(4i13)’) ipatn,ipatt,ip1,ip2 enddo do ijm=1,npoint read(formatted’(i13,2e13.6)’) ipoint,xp,yp enddo enddo endif if(ibody.eq.2) then do ijl=1,nitems read(formatted’(2i13)’) npatch,npoint do ijm=1,npatch
Main Index
Main Index
492 Marc Volume D: User Subroutines and Special Routines
read(formatted’(6i13)’) ipatn,ipatt,ip1,ip2,ip3,ip4 enddo do ijm=1,npoint read(formatted’(i13,3e13.6)’) ipoint,xp,yp,zp enddo enddo endif if(ibody.eq.3) then do ijl=1,nitems read(formatted,’(6i13)’) nurbid,kpt,idum3,kor,idum5,idum6 do ijm=1,kpt read(formatted,’(3e13.6)’) xp,yp,zp enddo read(formatted,’(6e13.6)’) (homo(ijm),ijm=1,kpt) read(formatted,’(6e13.6)’) (xnot(ijm),ijm=1,kpt+kor) enddo endif if(ibody.eq.4) then do ijl=1,nitems read(formatted,’(6i13)’) nurbid,nptu,nptv,noru,norv,itrim do ijm=1,nptu*nptv read(formatted,’(3e13.6)’) xp,yp,zp enddo read(formatted,’(6e13.6)’) (homo(ijm),ijm=1,nptu*nptv) read(formatted,’(6e13.6)’) (xnot(ijm),ijm=1,nptu+noru+nptv+norv) do ijm=1,itrim
Main Index
Main Index
CHAPTER 9 493 Special Routines User — Marc Post File Processor
read(formatted,’(6i13)’) itriid,kpt,idum3,idum4,idum5,idum6 do ijl=1,kpt read(formatted,’(3e13.6)’) xp,yp,zp enddo enddo enddo endif endif enddo read(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)
Main Index
Main Index
494 Marc Volume D: User Subroutines and Special Routines
endif if(ibody.eq.1) then do ijl=1,nitems read(binary) npatch,npoint do ijm=1,npatch read(binary) ipatn,ipatt,ip1,ip2 enddo do ijm=1,npoint read(binary) ipoint,xp,yp,zp enddo enddo endif if(ibody.eq.2) then do ijl=1,nitems read(binary) npatch,npoint do ijm=1,npatch read(binary) ipatn,ipatt,ip1,ip2,ip3,ip4 enddo do ijm=1,npoint read(binary) ipoint,xp,yp,zp enddo enddo endif if(ibody.eq.3) then do ijl=1,nitems read(binary) nurbid,kpt,idum3,kor,idum5,idum6
Main Index
Main Index
CHAPTER 9 495 Special Routines User — Marc Post File Processor
do ijm=1,kpt read(binary) xp,yp,zp enddo read(binary) (homo(ijm),ijm=1,kpt) read(binary) (xnot(ijm),ijm=1,kpt+kor) enddo endif if(ibody.eq.4) then do ijl=1,nitems read(binary) nurbid,nptu,nptv,noru,norv,itrim do ijm=1,nptu*nptv read(binary) xp,yp,zp enddo read(binary) (homo(ijm),ijm=1,nptu*nptv) read(binary) (xnot(ijm),ijm=1,nptu+noru+nptv+norv) do ijm=1,itrim read(binary) itriid,kpt,idum3,idum4,idum5,idum6 do ijl=1,kpt read(binary) xp,yp,zp enddo enddo enddo endif endif enddo
Main Index
Main Index
496 Marc Volume D: User Subroutines and Special Routines
endif
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
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
Main Index
Main Index
npatch
= number of patches in body ijk entity ijl
npoint
= number of points
in body ijk entity ijl
CHAPTER 9 497 Special Routines User — Marc Post File Processor
ipatn
= patch number
ipatt
= patch type (9=line,18=surface)
ip1
= first
ip2
= second node of patch
ip3
= third
ip4
= fourth node of patch
ipoint
= point number
node of patch
node of patch
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
Main Index
Main Index
498 Marc Volume D: User Subroutines and Special Routines
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")
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
Main Index
Main Index
= =end=
CHAPTER 9 499 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
500 Marc Volume D: User Subroutines and Special Routines
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)
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
Main Index
Main Index
CHAPTER 9 501 Special Routines User — Marc Post File Processor
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)
Main Index
Main Index
502 Marc Volume D: User Subroutines and Special Routines
write(blkbegin,’(70a1)’) blkbegin read(binary) (xlm(ijk),ijk=1,6) read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
blkbegin = =beg=51800 (Real Increment Verification Data) xlm( 1)
= transient time
xlm( 2)
= modal
xlm( 3)
xlm( 4)
xlm( 5)
xlm( 6) blkend
(time)
result : frequency
(freq)
harmonic result : frequency
(freq)
buckle
result : buckle factor
(fact)
modal
result : generalized mass
(gmas)
=
= jantyp = 60 sensitivity check
(respon)
jantyp = 61 objective function
(objec )
jantyp = 60 limiting value
(rsplim)
jantyp = 61 critical constraint
(conval)
=
= not used = =end=
BLOCK 51801 - real increment verification data **********************************************
If post file revision number > 10 (MARC 2001 and later)
Main Index
Main Index
CHAPTER 9 503 Special Routines User — Marc Post File Processor
read(formatted,’(a70)’) blkbegin read(formatted,’(6i13)’) nw read(formatted,’(6e13.6)’) (xlm(ijk),ijk=1,nw) read(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
xlm( 2)
= modal
xlm( 3)
xlm( 4)
xlm( 5)
Main Index
Main Index
(time)
result : frequency
(freq)
harmonic result : frequency
(freq)
buckle
result : buckle factor
(fact)
modal
result : generalized mass
(gmas)
=
= jantyp = 60 sensitivity check
(respon)
jantyp = 61 objective function
(objec )
jantyp = 60 limiting value
(rsplim)
jantyp = 61 critical constraint
(conval)
=
504 Marc Volume D: User Subroutines and Special Routines
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 ***********************
if(newmo.ne.0) then
Main Index
Main Index
CHAPTER 9 505 Special Routines User — Marc Post File Processor
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)
Main Index
Main Index
506 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 507 Special Routines User — 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
Main Index
Main Index
508 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
= =end=
CHAPTER 9 509 Special Routines User — Marc Post File Processor
BLOCK 523nn - element integration point values **********************************************
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)
Main Index
Main Index
510 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
CHAPTER 9 511 Special Routines User — Marc Post File Processor
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 endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
endif
blkbegin = =beg=52400 (Nodal Results)
Main Index
Main Index
512 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 513 Special Routines User — Marc Post File Processor
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 17 = Electric Potential 18 = External Electric Charge 19 = Reaction Electric Charge 20 = Magnetic Potential 21 = External Electric Current
Main Index
Main Index
514 Marc Volume D: User Subroutines and Special Routines
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
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cc
BLOCK 25 - response gradients *****************************
if(jantyp.eq.60) then
Main Index
Main Index
CHAPTER 9 515 Special Routines User — Marc Post File Processor
read(formatted,’(a70)’) blkbegin read(formatted,’(6e13.6)’) (respon(ijk),ijk=1,ndsvar) read(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 **********************************************
if(jantyp.eq.60) then
read(formatted,’(a70)’) blkbegin
Main Index
Main Index
516 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(6e13.6)’) (elcon(ijk),ijk=1,numel) read(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
Main Index
Main Index
CHAPTER 9 517 Special Routines User — Marc Post File Processor
read(binary) (ibeg(ijk),ijk=1,70) write(blkbegin,’(70a1)’) blkbegin read(binary) (desvar(ijk),ijk=1,ndsvar) read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
endif
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
Main Index
Main Index
518 Marc Volume D: User Subroutines and Special Routines
read(binary) (ibeg(ijk),ijk=1,70) write(blkbegin,’(70a1)’) blkbegin do ijk=1,numndgr 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
Main Index
Main Index
CHAPTER 9 519 Special Routines User — Marc Post File Processor
read(formatted,’(2i13)’) inumv,inumt do ijk=1,inumv read(formatted,’(a48)’) globename(ijk) read(formatted,’(6i13)’) ityp,id2,inum,nnum,id5,id6 read(formatted,’(6e13.6)’) (xlm(ijl),ijl=1,nnum) enddo read(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
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
Main Index
Main Index
= global variable type:
520 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 521 Special Routines User — Marc Post File Processor
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
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)
Main Index
Main Index
title
= title of analysis
blkend
= =end=
522 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
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=
CHAPTER 9 523 Special Routines User — Marc Post File Processor
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 ****************************************
read(formatted,’(a70)’) blkbegin read(formatted,’(2i13)’) npost do ijk=1,npost read(formatted,’(i13,a48)’) ipost,cpost
Main Index
Main Index
524 Marc Volume D: User Subroutines and Special Routines
enddo read(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
Main Index
Main Index
CHAPTER 9 525 Special Routines User — Marc Post File Processor
do j=1,neltyp read(formatted,'(6i13)') (lm(i),i=1,8) read(formatted,'(2i13)') npvars(j),nintps(j) 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 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)
Main Index
Main Index
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
526 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 527 Special Routines User — Marc Post File Processor
read(binary) ielid,ityp,nnod,(iel(ijl),ijl=1,nnodmx) enddo read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
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
Main Index
Main Index
528 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
CHAPTER 9 529 Special Routines User — Marc Post File Processor
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 ************************
Main Index
Main Index
530 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(a70)’) blkbegin read(formatted,’(i13)’) ncurves if(ncurves.ne.0) then do ijk=1,ncurves read(formatted,’(6i13)’) (icurvinf(ijl),ijl=1,6) icrv(ijk)=icurvinf(1) lct=icurvinf(2) npu=icurvinf(3) nou=icurvinf(4) nrx=3 if(lct.eq.6) nrx=5 read(formatted,’(6e13.6)’) (xhomog(ijl),ijl=1,npu) lss=npu+nou read(formatted,’(6e13.6)’) (xknot(ijl),ijl=1,lss) if(lct.eq.-4) then read(formatted,’(6i13)’) (jpnt(ijl),ijl=1,npu) elseif(lct.eq.-6) then do itp=1,npu read(formatted,’(i13,2e13.6)’) itpid,xiso,yiso enddo elseif(lct.eq.4) then do itp=1,npu read(formatted,’(5e13.6)’) (xpnt(kk1),kk1=1,3) enddo elseif(lct.eq.6) then do itp=1,npu
Main Index
Main Index
CHAPTER 9 531 Special Routines User — Marc Post File Processor
read(formatted,’(5e13.6)’) (xtrim(kk1),kk1=1,3),xiso,yiso enddo endif enddo endif read(formatted,’(a5)’) blkend
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)
Main Index
Main Index
532 Marc Volume D: User Subroutines and Special Routines
elseif(lct.eq.-6) then do itp=1,npu read(binary)itpid,xiso,yiso enddo elseif(lct.eq.4) then do itp=1,npu read(binary) (xpnt(kk1),kk1=1,3) enddo elseif(lct.eq.6) then do itp=1,npu read(binary) (xtrim(kk1),kk1=1,3),xiso,yiso enddo endif enddo endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
CHAPTER 9 533 Special Routines User — Marc Post File Processor
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)
Main Index
Main Index
534 Marc Volume D: User Subroutines and Special Routines
npu=isurfinf(3) nou=isurfinf(4) npv=isurfinf(5) nov=isurfinf(6) ntrim=isurfinf(7) nnnn=npu*npv read(formatted,’(6e13.6)’) (xhomog(ijl),ijl=1,nnnn) lss=npu+nou+npv+nov read(formatted,’(6e13.6)’) (xknot(ijl),ijl=1,lss) if(lct.eq.-9) then read(formatted,’(6i13)’) (jpnt(ijl),ijl=1,nnnn) elseif(lct.eq.9) then do itp=1,nnnn read(formatted,’(3e13.6)’) (xpnt(kk1),kk1=1,3) enddo endif if(ntrim.ne.0) then read(formatted,’(6i13)’) (jtrmcv(ijl),ijl=1,ntrim) endif enddo endif read(formatted,’(a5)’) blkend
read (binary) (ibeg(ijk),ijk=1,70)
Main Index
Main Index
CHAPTER 9 535 Special Routines User — Marc Post File Processor
write(blkbegin,’(70a1)’) blkbegin read(binary) nsurfaces if(nsurfaces.ne.0) then do ijk=1,npoints read(binary) (isurfinf(ijl),ijl=1,7) icrv(ijk)=isurfinf(1) lct=isurfinf(2) npu=isurfinf(3) nou=isurfinf(4) npv=isurfinf(5) nov=isurfinf(6) ntrim=isurfinf(7) nnnn=npu*npv read(binary) (xhomog(ijl),ijl=1,nnnn) lss=npu+nou+npv+nov read(binary) (xknot(ijl),ijl=1,lss) if(lct.eq.-9) then read(binary) (jpnt(ijl),ijl=1,nnnn) elseif(lct.eq.9) then do itp=1,nnnn read(binary) (xpnt(kk1),kk1=1,3) enddo endif if(ntrim.ne.0) then read(binary) (jtrmcv(ijl),ijl=1,ntrim) endif
Main Index
Main Index
536 Marc Volume D: User Subroutines and Special Routines
enddo endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
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=
CHAPTER 9 537 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
= =beg=53300 (Attach Nodes)
538 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 539 Special Routines User — Marc Post File Processor
read(binary) icurvid,nedgat read(binary) (lelem(ilm),ilm=1,nedgat) read(binary) (ledge(ilm),ilm=1,nedgat) enddo endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
540 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(6i13)’) (lelem(ilm),ilm=1,nfaceat) read(formatted,’(6i13)’) (lface(ilm),ilm=1,nfaceat) enddo endif read(formatted,’(a5)’) blkend
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
Main Index
Main Index
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
CHAPTER 9 541 Special Routines User — Marc Post File Processor
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)’) (
Main Index
Main Index
cload(ilm),ilm=1,lmreal)
542 Marc Volume D: User Subroutines and Special Routines
read(formatted,’(6i13)’) (itcload(ilm),ilm=1,lmreal) endif if(lmdim.ne.0) then read(formatted,’(6i13)’) (lm(ilm),ilm=1,lmdim) endif do kk2=1,lmng read(formatted,’(6i13)’) igid,igtype read(formatted,’(80a1)’) (kbcline(ilm),ilm=1,80) enddo enddo endif read(formatted,’(a5)’) blkend
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)
Main Index
Main Index
CHAPTER 9 543 Special Routines User — Marc Post File Processor
lmng
=ibcinfo(5)
lmread=ibcinfo(7) lmreal=ibcinfo(8) lmdim =ibcinfo(9) read(formatted) (
rload(ilm),ilm=1,lmreal)
read(formatted) (itrload(ilm),ilm=1,lmreal) if(lmharm.gt.0) then read(formatted) (
cload(ilm),ilm=1,lmreal)
read(formatted) (itcload(ilm),ilm=1,lmreal) endif if(lmdim.ne.0) then read(formatted) (lm(ilm),ilm=1,lmdim) endif do kk2=1,lmng read(formatted) igid,igtype read(formatted) (kbcline(ilm),ilm=1,80) enddo enddo endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
Main Index
Main Index
blkbegin
= =beg=53600 (Boundary Conditions)
nbcs
= number of boundary conditions
ibcname
= boundary condition name
ibcinfo
= boundary condition information
544 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
=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
CHAPTER 9 545 Special Routines User — Marc Post File Processor
=18
point temperature - not heat transfer analysis
=19
initial state - not heat transfer analysis
=20
change state
=21
initial void ratio
=22
void ratio
=23
initial preconsolidation pressure
=24
weld flux (read in readbcweld.f)
- not heat transfer analysis
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
Main Index
Main Index
546 Marc Volume D: User Subroutines and Special Routines
4= surface 5= curve 6= point 7= element set 8= node set 9= polycurve 10= polysurface 11= element-edge 12= element-face 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 blkend
= list of location where boundary condition is applied = =end=
BLOCK 509nn - spring data *************************
read(formatted,’(a70)’) blkbegin read(formatted,’(i13)’) nsprng do ijk=1,nsprng
Main Index
Main Index
CHAPTER 9 547 Special Routines User — Marc Post File Processor
read(formatted,’(5i13)’) (ispr(ijl,ijk),ijl=1,5) enddo read(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
Main Index
Main Index
548 Marc Volume D: User Subroutines and Special Routines
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 ***********************************************
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
Main Index
Main Index
= =end=
CHAPTER 9 549 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
= number of adaptive meshing tyings
550 Marc Volume D: User Subroutines and Special Routines
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 *************************************
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
Main Index
Main Index
CHAPTER 9 551 Special Routines User — Marc Post File Processor
read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
552 Marc Volume D: User Subroutines and Special Routines
read(binary) (ibeg(ijk),ijk=1,70) write(blkbegin,’(70a1)’) blkbegin do ijk=1,nset read(binary) (isetnam(ijl),ijl=1,32) write(setnam,’(32a1)’) (isetnam(ijl),ijl=1,32) read(binary) isetn,isett if(isetn.ne.0) then read(binary) (nsett(ijl),ijl=1,isetn) if(isett.eq.12.or.isett.eq.13.or.isett.eq.18.or.isett.eq.19) then read(binary) (neddt(ij1),ij1=1,isetn) endif endif enddo read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
CHAPTER 9 553 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
554 Marc Volume D: User Subroutines and Special Routines
do ijm=1,npatch read(formatted’(4i13)’) ipatn,ipatt,ip1,ip2 enddo do ijm=1,npoint read(formatted’(i13,2e13.6)’) ipoint,xp,yp enddo enddo endif if(ibody.eq.2) then do ijl=1,nitems read(formatted’(2i13)’) npatch,npoint do ijm=1,npatch read(formatted’(6i13)’) ipatn,ipatt,ip1,ip2,ip3,ip4 enddo do ijm=1,npoint read(formatted’(i13,3e13.6)’) ipoint,xp,yp,zp enddo enddo endif if(ibody.eq.3) then do ijl=1,nitems read(formatted,’(6i13)’) nurbid,kpt,idum3,kor,idum5,idum6 do ijm=1,kpt read(formatted,’(3e13.6)’) xp,yp,zp enddo read(formatted,’(6e13.6)’) (homo(ijm),ijm=1,kpt)
Main Index
Main Index
CHAPTER 9 555 Special Routines User — Marc Post File Processor
read(formatted,’(6e13.6)’) (xnot(ijm),ijm=1,kpt+kor) enddo endif if(ibody.eq.4) then do ijl=1,nitems read(formatted,’(6i13)’) nurbid,nptu,nptv,noru,norv,itrim do ijm=1,nptu*nptv read(formatted,’(3e13.6)’) xp,yp,zp enddo read(formatted,’(6e13.6)’) (homo(ijm),ijm=1,nptu*nptv) read(formatted,’(6e13.6)’) (xnot(ijm),ijm=1,nptu+noru+nptv+norv) do ijm=1,itrim read(formatted,’(6i13)’) itriid,kpt,idum3,idum4,idum5,idum6 do ijl=1,kpt read(formatted,’(3e13.6)’) xp,yp,zp enddo enddo enddo endif enddo read(formatted,’( a5)’) blkend
read(binary) (ibeg(ijk),ijk=1,70) write(blkbegin,’(70a1)’) blkbegin read(binary) ndie
Main Index
Main Index
556 Marc Volume D: User Subroutines and Special Routines
do ijk=1,ndie read(binary) ibody,itype,nitems,istruc read(binary) (ibdname(ij1),ij1=1,24) write(bdname,’(24a1)’) (ibdname(ij1),ij1=1,24) read(binary) (pos(ij1),ij1=1,3),(rot(ij1),ij1=1,3) if(ibody.eq.0) then read(binary) nelem read(binary) (ielem(ijl),ijl=1,nelem) endif if(ibody.eq.1) then do ijl=1,nitems read(binary) npatch,npoint do ijm=1,npatch read(binary) ipatn,ipatt,ip1,ip2 enddo do ijm=1,npoint read(binary) ipoint,xp,yp,zp enddo enddo endif if(ibody.eq.2) then do ijl=1,nitems read(binary) npatch,npoint do ijm=1,npatch read(binary) ipatn,ipatt,ip1,ip2,ip3,ip4 enddo
Main Index
Main Index
CHAPTER 9 557 Special Routines User — Marc Post File Processor
do ijm=1,npoint read(binary) ipoint,xp,yp,zp enddo enddo endif if(ibody.eq.3) then do ijl=1,nitems read(binary) nurbid,kpt,idum3,kor,idum5,idum6 do ijm=1,kpt read(binary) xp,yp,zp enddo read(binary) (homo(ijm),ijm=1,kpt) read(binary) (xnot(ijm),ijm=1,kpt+kor) enddo endif if(ibody.eq.4) then do ijl=1,nitems read(binary) nurbid,nptu,nptv,noru,norv,itrim do ijm=1,nptu*nptv read(binary) xp,yp,zp enddo read(binary) (homo(ijm),ijm=1,nptu*nptv) read(binary) (xnot(ijm),ijm=1,nptu+noru+nptv+norv) do ijm=1,itrim read(binary) itriid,kpt,idum3,idum4,idum5,idum6 do ijl=1,kpt
Main Index
Main Index
558 Marc Volume D: User Subroutines and Special Routines
read(binary) xp,yp,zp enddo enddo enddo endif enddo read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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 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
Main Index
Main Index
CHAPTER 9 559 Special Routines User — 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
ipatn
= patch number
ipatt
= patch type (9=line,18=surface)
ip1
= first
ip2
= second node of patch
ip3
= third
ip4
= fourth node of patch
ipoint
= point number
in body ijk entity ijl
node of patch
node of patch
xp,yp,zp = x-, y- and z-coordinates of point
Main Index
Main Index
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=
560 Marc Volume D: User Subroutines and Special Routines
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")
Main Index
Main Index
CHAPTER 9 561 Special Routines User — 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
Main Index
Main Index
562 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 563 Special Routines User — Marc Post File Processor
read(binary) (ibeg(ijk),ijk=1,70) write(blkbegin,’(70a1)’) blkbegin read(binary) (lm(ijk),ijk=1,12) read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
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
564 Marc Volume D: User Subroutines and Special Routines
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
xlm( 2)
= modal
xlm( 3)
Main Index
Main Index
=
(time)
result : frequency
(freq)
harmonic result : frequency
(freq)
buckle
(fact)
result : buckle factor
CHAPTER 9 565 Special Routines User — Marc Post File Processor
modal xlm( 4)
xlm( 5)
Main Index
Main Index
result : generalized mass
(gmas)
= jantyp = 60 sensitivity check
(respon)
jantyp = 61 objective function
(objec )
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
566 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
CHAPTER 9 567 Special Routines User — Marc Post File Processor
write(blkbegin,’(70a1)’) blkbegin read(binary) ndistl read(binary) (dist(ijk),ijk=1,ndistl) read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
568 Marc Volume D: User Subroutines and Special Routines
read(binary) force1,force2 enddo read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
endif
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
Main Index
Main Index
CHAPTER 9 569 Special Routines User — Marc Post File Processor
read(binary) (ibeg(ijk),ijk=1,70) write(blkbegin,’(70a1)’) blkbegin do ijk=1,ndie read(binary) (ddat(ijk),ijk=1,36) enddo read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
endif
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) =
Main Index
Main Index
570 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 571 Special Routines User — Marc Post File Processor
j=jetyp(k) nstres=nintps(j) npost=npvars(j) do ijl=1,nstres read(binary) (elvar(ijk),ijk=1,npost) enddo enddo read(binary) (iend(ijk),ijk=1,5) write(blkbegin,'(5a1)') blkend
endif
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 ***************************
Main Index
Main Index
572 Marc Volume D: User Subroutines and Special Routines
if(jantyp.ne.60.and.jantyp.ne.61.and.knod.gt.0) then
read(formatted,’(a70)’) blkbegin read(formatted,’(6i13)’) nnqnod,nnvnod do ijk=1,nnqnod read(formatted,’(a48)’) cnam read(formatted,’(6i13)’) (ivec(ijk),ijk=1,12) nd=0 if(ivec(7).eq.-1) nd=numnp*ivec(4) if(nd.gt.0) then read(formatted,’(6e13.6)’) (vecr(ijl),ijl=1,nd) if(ivec(6).eq.4.or.ivec(6).eq.5) then read(formatted,’(6e13.6)’) (veci(ijl),ijl=1,nd) endif endif enddo read(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)
Main Index
Main Index
CHAPTER 9 573 Special Routines User — Marc Post File Processor
nd=0 if(ivec(7).eq.-1) nd=numnp*ivec(4) if(nd.gt.0) then read(binary) (vecr(ijl),ijl=1,nd) if(ivec(6).eq.4.or.ivec(6).eq.5) then read(binary) (veci(ijl),ijl=1,nd) endif endif read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
endif
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
Main Index
Main Index
574 Marc Volume D: User Subroutines and Special Routines
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
Main Index
Main Index
CHAPTER 9 575 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
576 Marc Volume D: User Subroutines and Special Routines
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
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
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
Main Index
Main Index
CHAPTER 9 577 Special Routines User — Marc Post File Processor
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)
Main Index
Main Index
578 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
jantyp
= analysis type (see BLOCK 517nn)
ndsvar
= number of design variables (see BLOCK 517nn)
CHAPTER 9 579 Special Routines User — Marc Post File Processor
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
Main Index
Main Index
580 Marc Volume D: User Subroutines and Special Routines
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)
Main Index
Main Index
CHAPTER 9 581 Special Routines User — Marc Post File Processor
read(binary) ityp,id2,inum,nnum,id5,id6 read(binary) (xlm(ijl)’),ijl=1,nnum) enddo read(binary) (iend(ijk),ijk=1,5) write(blkbegin,’(5a1)’) blkend
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
Main Index
Main Index
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=
582 Marc Volume D: User Subroutines and Special Routines
BLOCK yyyyy - end increment indicator *************************************
read(formatted,’(a4)’) csee
read(binary) isee write(csee,’(a4)’) isee
csee
= indicator ---- end of incremental data
Main Index
Main Index
Chapter 10 Mathematical Utility Routines List
10
Utility Routine DDOT .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 .......................................................... .......................................................... .......................................................... .......................................................... ..........................................................
INV3X3 . INVERT.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
SCLA
588 589 590 591 592
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
PRINCV
Main Index
Page
GMADD GMPRD GMSUB GMTRA . GTPRD .
MCPY .
Main Index
Utility Routines List
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
584 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 10 Mathematical Utility Routines
10
Main Index
Main Index
Utility Routines List
586 Marc Volume D: User Subroutines and Special Routines
This chapter discusses a selection of the mathematical utility routines that may be called from any subroutine to simplify the program.
Main Index
Main Index
CHAPTER 10 587 Utility Routines List
■ DDOT 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: Input: NN
number of items in each vector to be used
A
first input vector
IA
stride in vector A
B
second input vector
IB
stride in vector B
Required Output: ANS
inner product of vectors A and B
Note: Vectors A, B, and ANS are real*8 variables.
Main Index
Main Index
588 Marc Volume D: User Subroutines and Special Routines
■ GMADD Matrix Add Description Add two matrices and put sum into third matrix. Format Utility routine GMADD can be called with the following format: CALL GMADD (W,X,Y,N,M)
where: Input: W
first input matrix
X
second input matrix
N
first dimension of W, X, and Y
M
second dimension of W, X, and Y
Required Output: Y
output matrix, Y = W + X
Note: Matrices W, X, and Y are real*8 arrays.
Main Index
Main Index
CHAPTER 10 589 Utility Routines List
■ GMPRD Matrix Product Description Multiply two matrices and put product in third matrix. Format Utility routine GMPRD can be called with the following format: CALL GMPRD (W,X,Y,N,M)
where: Input: W
first input matrix
X
second input matrix
N
first dimension of W and Y
M
second dimension of W and first dimension of X
L
second dimension of X and Y
Required Output: Y
output matrix, Y = W * X
Note: Matrices W, X, and Y are real*8 arrays.
Main Index
Main Index
590 Marc Volume D: User Subroutines and Special Routines
■ GMSUB Matrix Subtract Description Subtract two matrices and put remainder in third matrix. Format Utility routine GMSUB can be called with the following format: CALL GMSUB (W,X,Y,N,M)
where: Input: W
first input matrix
X
second input matrix
N
first dimension of W, X, and Y
M
second dimension of W, X, and Y
Required Output: Y
output matrix, Y = W – X
Note: Matrices W, X, and Y are real*8 arrays.
Main Index
Main Index
CHAPTER 10 591 Utility Routines List
■ GMTRA Matrix Transpose Description Transpose a matrix. Format Utility routine GMTRA can be called with the following format: CALL GMTRA (W,X,N,M)
where: Input: W
input matrix
N
first dimension of W and second dimension of X
M
second dimension of W and first dimension of X
Required Output: X
output matrix X = W T
Note: Matrices W and X are real*8 matrices.
Main Index
Main Index
592 Marc Volume D: User Subroutines and Special Routines
■ 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: Input: W
first input matrix
X
second input matrix
N
first dimension of W and X
M
second dimension of W and first dimension of Y
L
second dimension of X and Y
Required Output: Y
output matrix Y = W T * X
Note: Matrices W, X, and Y are real*8 matrices.
Main Index
Main Index
CHAPTER 10 593 Utility Routines List
■ INVERT Invert Matrix Description Matrix inversion and system solution (for small matrices, 15x15 max). Format Utility routine INVERT can be called with the following format: CALL INVERT (A,N,B,MR,D2,IDIM)
where: Input: A
input matrix
N
number of rows and columns of A, must be less than or equal 15
B
array of right-hand side vectors for which the solution is required
MR
number of right hand side vectors. If MR = 0 , only inversion is performed
IDIM
dimension of A in storage
Required Output: A
inverse of input matrix A
B
array of solution vectors
D2
determinant of A
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.
Main Index
Main Index
594 Marc Volume D: User Subroutines and Special Routines
■ INV3X3 Invert 3 x 3 Matrix Description Invert 3 x 3 matrices. Format Utility routine INV3X3 can be called with the following format: CALL INV3X3 (A,AINV,DET,IFLAG)
where: Input: A
input matrix
IFLAG
flag for output
Required Output: A
inverse of input matrix A if IFLAG = 1
AINV
inverse of input matrix A if IFLAG is not = 1
DET
determinant of A
Note: Matrices A, AINV, and scalar DET are real*8 variables. If DET = 0, the matrix is singular and the inverse is not calculated.
Main Index
Main Index
CHAPTER 10 595 Utility Routines List
■ MCPY Matrix Copy Description Copy a matrix. Format Utility routine MCPY can be called with the following format: CALL MCPY (W,X,N,M,MS)
where: Input: W
input matrix
N
first dimension of W and X
M
second dimension of W and X
MS
not used
Required Output: X
output matrix, X = W
Note: Matrices W and X are real*8 arrays.
Main Index
Main Index
596 Marc Volume D: User Subroutines and Special Routines
■ 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: Input: V(6)
vector of strains or stresses.
NDI
number of direct stress or strain components.
NSHEAR
number of shear stress or strain components.
ISS
flag to indicate whether V is stress or strain. if ISS = 0, V is stress if ISS = 1, V is strain
JCR1
set to 0
JCR2
set to 0
JCR3
set to 0
Required Output: PV(3)
vector of principal values
R(3,3)
matrix of principal directions
Note: Vectors and matrices PV, R, and V are real*8 arrays.
Main Index
Main Index
CHAPTER 10 597 Utility Routines List
■ 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: Input: W
input matrix
C
scalar
N
first dimension of W
M
second dimension of W
MS
not used
Required Output: W
output matrix
Note: Matrix W and scalar C are real*8 variables.
Main Index
Main Index
598 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 11 Considerations for Parallel Processing
11
Main Index
Main Index
Considerations for Parallel Processing J
Overview
J
Auxiliary Routines
J
Sharing Data
600
604
600
600 Marc Volume D: User Subroutines and Special Routines
This chapter describes some special considerations that need to be taken into account when writing user subroutines for parallel processing.
Overview In a parallel run with Marc, the finite element mesh is subdivided into domains where each element is part of one domain. Nodes at the boundary between domains are present in all domains sharing that boundary. Each domain is run on one process in the job, normally corresponding to a processor (CPU). Note: There is a difference between process and processor. A process is run by a processor. A processor can run multiple processes, but in a parallel analysis, each process is normally run by one processor for efficiency.
Auxiliary Routines There are a number of auxiliary routines available for parallel applications. DOMFLAG The DOMFLAG subroutine is used for sharing variables between domains. The variables can be summed, the maximum taken etc. Suppose the variables num1, r1, and volume have been obtained on each domain. Each domain may have different values of these variables. Now, the user wants to calculate the largest value of num1 and r1 and the variable volume should be summed over the domains. The code for doing this would look like: include ’cdominfo’ ibuff1(1)=num1 dbuff1(1)=r1 dbuff1(2)=volume itest1(1)=1 itest2(1)=1 itest2(2)=3 call domflag(ibuff1,dbuff1,itest1,itest2,1,2) num1=ibuff1(1) r1=dbuff1(1) volume=dbuff1(2)
This code sets num1 and r2 to the maximum over the domains and sets num1 to the sum over the domains. The action taken is controlled by the value set to itest1 and itest2:
Main Index
Main Index
CHAPTER 11 601 Considerations for Parallel Processing
= 0: minimum = 1: maximum = 2: average = 3: sum The last two arguments of DOMFLAG specify the number of integers and reals, respectively, that are involved. The arrays ibuff1, dbuff1, itest1, and itest2 are declared in cdominfo with a range also defined in cdominfo (currently 512). If only one variable is used, one can skip the use of the arrays, for instance call domflag(int1,ddummy,3,0,1,0)
for summing int1 over the domains.
Main Index
Main Index
602 Marc Volume D: User Subroutines and Special Routines
Reading Input Reading input into a user subroutine requires that all domains get access to the data. This can be accomplished in different ways: A. The data file is copied to one file for each domain using a unique name and each domain reads its own file. B. The parent domain reads the file and sends each line to the child domains. C. The parent domain reads the whole file, possibly processes the data and sends the data to the child domains. Option A has the disadvantage that the user has to copy the file before the job is started (possibly to remote machines if the job is run on a cluster). With Option B, the data file remains the same as for a serial run. It can be inefficient for large amounts of data, though. Option C can be more efficient depending on the type of data that is processed. For Option A, it is necessary to create a filename which is unique to each domain. Suppose a file called yourname.txt contains data that is read from a user subroutine. For each domain, a copy of the file is made into 1yourname.txt, 2yourname.txt, etc. These files can be read using the following piece of code: include 'cdominfo' include 'jname' include 'prepro' include 'machin' character file*200,line*200 file=dirjid(1:ljid) length=last_char(file) if (nprocd.gt.0) then if(iprcnm.lt.10) then write(file(length+1:length+2), '(i1)') iprcnm else write(file(length+1:length+3), '(i2)') iprcnm endif endif length=last_char(file) file=file(1:length)//'yourname.txt'
Now the file can be opened as in a serial run.
Main Index
Main Index
CHAPTER 11 603 Considerations for Parallel Processing
The string variable dirjid contains the full path to the directory where the Marc input file is located for each domain. The variable iprcnm (from cdominfo) is the process (domain) number. The auxiliary function last_char returns the last nonblank character of a string. The following code can be used for Option B: include include include include
'cdominfo' 'jname' 'prepro' 'machin'
character file*200,line*200 c open a file on the parent process (domain 1) only, and send c each line read to the other domains c file='yourname.txt' iunit=68 iostatus=0 if (iparent.eq.0) then open(iunit,file=file,access='sequential', 1 status='old',form='formatted',iostat=iostatus) endif if (nprocd.gt.0) then call domflag(iostatus,dummy,3,0,1,0) ! share the status flag endif if (iostatus.gt.0) then c error in open file, bail out with marc exit 999 call quit(999) endif lastread=1 do i=1,100000 ! loop over all lines in the file iostatus=0 if (iparent.eq.0) then ! only read on parent read(iunit,'(a80)',iostat=iostatus) line endif if (nprocd.gt.0) then call domflag(iostatus,dummy,3,0,1,0) ! share the status flag endif if (iostatus.ne.0) then go to 102 ! found end of file else if (nprocd.gt.0) call domstring(line) endif
Main Index
Main Index
604 Marc Volume D: User Subroutines and Special Routines
c c c
now "line" is available on all domains
write(kou,*) 'line',line(1:last_char(line)) enddo 102
continue
The file is only opened if iparent = 0, which is the case in a serial run and for the parent process in a parallel run. The code also makes certain that all processes stop if an error occurs while opening the file. Use is made of the DOMFLAG auxiliary routine to make sure all domains have the same value of iostatus. The DOMSTRING routine broadcasts the line read to all domains.
Sharing Data Since elements are distributed to different domains it is sometimes necessary to share data. Suppose that the total volume is calculated in a user subroutine by integrating over all elements. Each domain would then calculate the volume of the domain. To get the total volume, it is necessary to sum the contributions from all domains. This can be done with the DOMFLAG auxiliary routine : include ’cdominfo’ c the variable vol contains the volume of each domain if (nprocd.gt.0) call domflag(idummy,vol,0,3,0,1)
It is crucial that all domains call this routine the same number of times. Sharing data should be avoided inside element loops. Apart from being inefficient, it usually causes the job to hang or crash since there are, in general, a different number of elements in the domains. If, for example, the code for calculating the volume is done in an element loop, the calculation of the total volume should be done outside the element loop (for instance, in the UEDINC user subroutine, which is called at the end of the increment). Dealing with nodal arrays sometimes requires special attention since the nodes on interdomain boundaries are duplicated. One such example is when counting the total number of nodes with a certain property (like being in contact). If this number is summed up in each domain and then later added between domains it will be too large since the interdomain nodes are counted multiple times. This can be handled with the following code:
Main Index
Main Index
CHAPTER 11 605 Considerations for Parallel Processing
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).
Main Index
Main Index
606 Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Chapter 12 Code Coupling Interface User Subroutines and Utility List
12
Code Coupling Interface User Subroutines and Utility List
User Subroutine CPLREG_EXCHANGE CPLREG_FINALIZE. . . CPLREG_INIT . . . . . . .
Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Utility Routine CPLREG_FIND_NAME . . . . . . . . . . . CPLREG_GET_ALL_NODE_VALUES CPLREG_GET_GLOBAL_VALUES . . CPLREG_GET_INFO . . . . . . . . . . . . CPLREG_GET_MESH . . . . . . . . . . . . CPLREG_GET_NODE_VALUES . . . . CPLREG_GET_QUANTS. . . . . . . . . . CPLREG_PUT_ALL_EDGE_VALUES . CPLREG_PUT_ALL_ELEM_VALUES . CPLREG_PUT_ALL_FACE_VALUES . CPLREG_PUT_ALL_NODE_VALUES
Main Index
Main Index
Page .................................... .................................... .................................... .................................... .................................... .................................... .................................... .................................... .................................... .................................... ....................................
617 629 624 618 621 626 620 640 648 644 636
608 MSC.Marc Volume D: User Subroutines and Special Routines
Utility Routine CPLREG_PUT_EDGE_VALUES . . . CPLREG_PUT_ELEM_VALUES . . . CPLREG_PUT_FACE_VALUES . . . CPLREG_PUT_GLOBAL_VALUES . CPLREG_PUT_NODE_VALUES . . .
Main Index
Main Index
Page ..................................... ..................................... ..................................... ..................................... .....................................
638 646 642 632 634
Chapter 12 Code Coupling Interface
12
Main Index
Main Index
Code Coupling Interface
610 MSC.Marc Volume D: User Subroutines and Special Routines
The user subroutines and utility routines described in this chapter provide an application programming interface (API) to couple MSC.Marc with external numerical solvers, to apply complex boundary conditions to certain regions of the model or to develop dedicated post-processing tools. They must be used in conjunction with the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input). The API allows code coupling software such as MpCCI1 to couple MSC.Marc with commercial computational fluid dynamics (CFD) codes, in order to solve fluid-structure interaction problems involving complex (turbulent) flows with large deformations of the structure that cannot be solved by MSC.Marc alone. Table 12-1 summarizes the user subroutines of the API, which are called by MSC.Marc if coupling regions are defined by the COUPLING REGION model definition option. Table 12-2 lists the utility routines that can be called from the user subroutines to obtain the connectivity and coordinates of coupling regions, to obtain the current values of a large number of physical quantities on coupling regions, or to prescribe the values of certain physical quantities on coupling regions. See Chapter 14 Code Coupling Interface in MSC.Marc Volume A: Theory and User Information for more information. Table 12-1
User Subroutines for Coupling Regions.
User Subroutine
Required Model 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.
1
Main Index
Main Index
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 611 Code Coupling Interface
Table 12-2
Utility Subroutines for Coupling Regions.
Utility Subroutine
Available in User Subroutines
Purpose
CPLREG_FIND_NAME
CPLREG_INIT Find coupling regions by name. CPLREG_EXCHANGE
CPLREG_GET_INFO
CPLREG_INIT Get general information about a coupling CPLREG_EXCHANGE region.
CPLREG_GET_QUANTS
CPLREG_INIT Get the prescribed physical quantities on CPLREG_EXCHANGE a 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 CPLREG_GET_ALL_NODE_VALUES at a 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 CPLREG_PUT_ALL_NODE_VALUES at a coupling region. CPLREG_PUT_EDGE_VALUES CPLREG_EXCHANGE Put the values of an edge-based quantity CPLREG_PUT_ALL_EDGE_VALUES at a coupling region. CPLREG_PUT_FACE_VALUES CPLREG_EXCHANGE Put the values of a face-based quantity at CPLREG_PUT_ALL_FACE_VALUES a coupling region. CPLREG_PUT_ELEM_VALUES CPLREG_EXCHANGE Put the values of an element-based CPLREG_PUT_ALL_ELEM_VALUES quantity at a coupling region.
Main Index
Main Index
612 MSC.Marc Volume D: User Subroutines and Special Routines
■ 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 MSC.Marc mesh does not match the mesh of the external solver at the common boundary of the two meshes, interpolation is needed to transfer quantities from one mesh to the other. To be able to interpolate the data, the geometrical relationship between the two meshes must be established. The CPLREG_INIT user subroutine can be used to determine this relationship, before the actual data exchange is performed. In the subroutine, the CPLREG_GET_MESH utility routine (see below) can be called for all coupling regions defined by the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) to obtain the positions of the nodes and the connectivity of the edges, faces or elements of these coupling regions. The latter should then be compared with the mesh of the external solver. The subroutine is called only if coupling regions have been defined by the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input). Format User subroutine CPLREG_INIT is written with the following headers: SUBROUTINE CPLREG_INIT(NCPLREG,ICPLREG) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION ICPLREG(NCPLREG) user coding RETURN END
Main Index
Main Index
CHAPTER 12 613 Code Coupling Interface
where: Input: NCPLREG
is the number of coupling regions defined by the COUPLING REGION model definition option.
ICPLREG
is the array with the internal numbers of the coupling regions in the model.
Note: The internal numbers of the coupling regions in the array ICPLREG provide handles to the regions and must be used in the calls to the utility routines discussed below. These internal numbers cannot be changed by the user.
Main Index
Main Index
614 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_EXCHANGE 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 MSC.Marc increment. In this case, the CPLREG_EXCHANGE user subroutine is called twice per increment, once at the start and once at the end of each increment. If the AUTO STEP stepping scheme is used, the coupling time step can be controlled by prescribing the global quantity "Coupling Time Step" (see CPLREG_GET_GLOBAL_VALUES below). In that case, a coupling step may consist of multiple increments. The CPLREG_EXCHANGE user subroutine is then called at the start of the first increment and at the end of the last increment of the coupling step. The routine is called only if coupling regions have been defined by the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input). Format User subroutine CPLREG_EXCHANGE is written with the following headers: SUBROUTINE CPLREG_EXCHANGE(NCPLREG,ICPLREG,ICALL,INC,TIME) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION ICPLREG(NCPLREG) user coding RETURN END
Main Index
Main Index
CHAPTER 12 615 Code Coupling Interface
where Input: NCPLREG
is the number of coupling regions defined by the COUPLING REGION model definition option.
ICPLREG
is the array with the internal numbers of the coupling regions in the model.
ICALL
is a flag that indicates when the subroutine is called: 1: subroutine is called at the start of the coupling step. 2: subroutine is called at the end of the coupling step.
INC
is the increment number.
TIME
is the current time.
Notes: The internal numbers of the coupling regions in the array ICPLREG provide handles to the regions and must be used in the calls to the utility routines discussed below. These internal numbers cannot be changed by the user. The current time, passed to the subroutine through the variable TIME, is the time at the start of the coupling step if ICALL=1 and the updated time at the end of the of the coupling step if ICALL=2.
Main Index
Main Index
616 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_FINALIZE 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 MSC.Marc job has ended. It is called once per job, at the end of the analysis and only if coupling regions have been defined via the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input). Format User subroutine CPLREG_FINALIZE is written with the following headers: SUBROUTINE CPLREG_FINALIZE(IEXIT) IMPLICIT REAL*8 (A-H,O-Z) user coding RETURN END
where: Input: IEXIT
Main Index
Main Index
The MSC.Marc exit number of the job (see Appendix A in MSC.Marc Volume C: Program Input).
CHAPTER 12 617 Code Coupling Interface
■ 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 MSC.Marc Volume C: Program Input). Format Utility routine CPLREG_FIND_NAME is called with the following headers: SUBROUTINE CPLREG_FIND_NAME(RNAME,IREG,IERROR) IMPLICIT REAL*8 (A-H,O-Z) CHARACTER*32 RNAME
where: Input: RNAME
is the name of the coupling region to find.
Required Output: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE) or -1 if no region with that name exists.
IERROR
is the error status: = 0: on success = 1: on error
Availability This utility routine is available in the following user subroutines: CPLREG_INIT CPLREG_EXCHANGE
Main Index
Main Index
618 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_GET_INFO 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 MSC.Marc Volume C: Program Input). The routine returns, among other things, the sizes of the finite element mesh of the region, which can be used to determine the amount of memory needed for storing the mesh of the coupling region (see the description of the CPLREG_GET_MESH utility below). Format Utility routine CPLREG_GET_INFO is called with the following headers: SUBROUTINE CPLREG_GET_INFO(IREG,RNAME,IRDIM,IACTIVE,NRQUANT, NRNODE,NRELEM,NRELNODE,IERROR) IMPLICIT REAL*8 (A-H,O-Z) CHARACTER*32 RNAME
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
Required Output:
Main Index
Main Index
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.
CHAPTER 12 619 Code Coupling Interface
NRELEM
is the number of edges, faces or elements (depending on the dimension) of the 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
Main Index
Main Index
620 MSC.Marc Volume D: User Subroutines and Special Routines
■ 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 MSC.Marc Volume C: Program Input). Format Utility routine CPLREG_GET_QUANTS is called with the following headers: SUBROUTINE CPLREG_GET_QUANTS(IREG,MXQUANT,IRQUANTS,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION IRQUANTS(MXQUANT)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
MXQUANT
is the maximum number of prescribed quantities to return.
Required Output: IRQUANT
is the array of prescribed quantities on this region.
IERROR
is the error status: = 0: on success = 1: on error
Availability This utility routine is available in the following user subroutines: CPLREG_INIT CPLREG_EXCHANGE
Main Index
Main Index
CHAPTER 12 621 Code Coupling Interface
■ CPLREG_GET_MESH 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 MSC.Marc Volume C: Program Input) in a number of arrays. It is the responsibility of the user to ensure that the arrays are large enough to hold all data. The CPLREG_GET_INFO utility can be used to find the required sizes of these arrays. Depending on the dimension of the region (1, 2 or 3, see the description of the CPLREG_GET_INFO utility routine), the CPLREG_GET_MESH utility returns the edges, the faces or the elements of the region. If the coupling region is defined via curves, surfaces or bodies (geometry types 3, 4, 5 or 16-19), the routine returns the edges or faces attached to these curves or surfaces via the ATTACH EDGE and ATTACH FACE model definition options or the elements of the bodies. Format Utility routine CPLREG_GET_MESH is called with the following headers: SUBROUTINE CPLREG_GET_MESH(IREG,MXNODE,MXCRD,MXELEM,MXELNODE, INODEIDS,COORDS,IELCLASS,IELTYPES, IELEMIDS,NELNODES,IELNODES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION INODEIDS(MXNODE),COORDS(MXCRD,MXNODE) DIMENSION IELCLASS(MXELEM),IELTYPES(MXELEM),IELEMIDS(MXELEM) DIMENSION NELNODES(MXELEM),IELNODES(MXELNODE,MXELEM)
where: Input:
Main Index
Main Index
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.
622 MSC.Marc Volume D: User Subroutines and Special Routines
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.
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).
IELTYPES
is the array with the types of the elements (see MSC.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 MSC.Marc convention. For example, 1103 represents face 3 of element 11. The connectivity of the edges, faces or elements is returned in the local node numbering within the region via the IELNODES array. User node numbers can be obtained using INODEIDS array. That is, INODEIDS(IELNODES(I,J)) is the user node number of node I of edge, face or element J of the region .
Table 12-3
Topology Classes
Topology Class
Main Index
Main Index
Number of Nodes
Description
1
2
linear line element
2
3
quadratic line element
3
3
linear triangular element
4
6
quadratic triangular element
CHAPTER 12 623 Code Coupling Interface
Table 12-3
Topology Classes (continued)
Topology Class
Number of Nodes
Description
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
12
27
quadratic semi-infinite quadrilateral element
13
4
14
10
15
6
16
15
linear tetrahedral element quadratic tetrahedral element linear pentahedral element quadratic pentahedral element
Availability This utility routine is available in the following user subroutines: CPLREG_INIT CPLREG_EXCHANGE
Main Index
Main Index
624 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_GET_GLOBAL_VALUES 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: 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 1
Type
Description
Scalar
Time Step
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
CHAPTER 12 625 Code Coupling Interface
If the subroutine is called in CPLREG_EXCHANGE for ICALL=1, the values of the quantity at the start of the coupling step (i.e., the values at the end of the previous coupling step) are returned. If it is called for ICALL=2, the updated values at the end of the coupling step are returned.
Main Index
Main Index
626 MSC.Marc Volume D: User Subroutines and Special Routines
■ 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 MSC.Marc Volume C: Program Input). Format User subroutine CPLREG_GET_NODE_VALUES is called with the following headers: SUBROUTINE CPLREG_GET_NODE_VALUES(IREG,IQID,NNODE,MXVAL, INODEIDS,VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION INODEIDS(NNODE),VALUES(MXVAL,NNODE)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
IQID
is the quantity for which the values must be returned.
NNODE
is the number of nodes for which the values must be returned.
MXVAL
is the maximum number of values per node to return.
INODEIDS
is the array with user ids of the nodes for which the values must be returned.
Required Output: VALUES
is the array with the values of the quantity at the nodes.
IERROR
is the error status: = 0: on success = 1: on error
Notes: 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.
Main Index
Main Index
CHAPTER 12 627 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
101
Vector
Current Coordinates
102
Vector
Displacement
103
Vector
External Force
104
Vector
Reaction Force
112
Vector
Displacement (Local)
113
Vector
External Force (Local)
114
Vector
Reaction Force (Local)
121
Scalar
Displacement X
122
Scalar
Displacement Y
123
Scalar
Displacement Z
124
Scalar
External Force X
125
Scalar
External Force Y
126
Scalar
External Force Z
127
Scalar
Reaction Force X
128
Scalar
Reaction Force Y
129
Scalar
Reaction Force Z
161
Scalar
Displacement X (Local)
162
Scalar
Displacement Y (Local)
163
Scalar
Displacement Z (Local)
164
Scalar
External Force X (Local)
165
Scalar
External Force Y (Local)
166
Scalar
External Force Z (Local)
167
Scalar
Reaction Force X (Local)
168
Scalar
Reaction Force Y (Local)
169
Scalar
Reaction Force Z (Local)
201
Scalar
Temperature
202
Scalar
External Heat Flux
203
Scalar
Reaction Heat Flux
Note: All mechanical nodal quantities are defined in the global coordinate system, except those tagged with "(Local)". The latter are defined in the local coordinate systems of the nodes, if such coordinate systems have been defined by the TRANSFORMATION or COORD SYSTEM model definition option, or in the global system, otherwise.
Main Index
Main Index
628 MSC.Marc Volume D: User Subroutines and Special Routines
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
If the subroutine is called in CPLREG_EXCHANGE for ICALL=1, the values of the quantity at the start of the coupling step (i.e., the values at the end of the previous coupling step) are returned. If it is called for ICALL=2, the updated values at the end of the coupling step are returned.
Main Index
Main Index
CHAPTER 12 629 Code Coupling Interface
■ CPLREG_GET_ALL_NODE_VALUES 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 MSC.Marc Volume C: Program Input). This utility routine is similar to the CPLREG_GET_NODE_VALUES utility, but more efficient if the values at all nodes of the region must be returned. Format User subroutine CPLREG_GET_ALL_NODE_VALUES is called with the following headers: SUBROUTINE CPLREG_GET_ALL_NODE_VALUES(IREG,IQID,MXVAL, VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION VALUES(MXVAL,*)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
IQID
is the quantity for which the values must be returned.
MXVAL
is the maximum number of values per node to return.
Required Output: VALUES
is the array with the values of the quantity at the nodes.
IERROR
is the error status: = 0: on success = 1: on error
Notes: The dimension of the VALUES array must be at least (MXVAL,NRNODE), in which NRNODE is the number of nodes of the coupling region as returned by the CPLREG_GET_INFO utility. The order in which the values are returned is given by the INODEIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
630 MSC.Marc Volume D: User Subroutines and Special Routines
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
101
Vector
Current Coordinates
102
Vector
Displacement
103
Vector
External Force
104
Vector
Reaction Force
112
Vector
Displacement (Local)
113
Vector
External Force (Local)
114
Vector
Reaction Force (Local)
121
Scalar
Displacement X
122
Scalar
Displacement Y
123
Scalar
Displacement Z
124
Scalar
External Force X
125
Scalar
External Force Y
126
Scalar
External Force Z
127
Scalar
Reaction Force X
128
Scalar
Reaction Force Y
129
Scalar
Reaction Force Z
161
Scalar
Displacement X (Local)
162
Scalar
Displacement Y (Local)
163
Scalar
Displacement Z (Local)
164
Scalar
External Force X (Local)
165
Scalar
External Force Y (Local)
166
Scalar
External Force Z (Local)
167
Scalar
Reaction Force X (Local)
168
Scalar
Reaction Force Y (Local)
169
Scalar
Reaction Force Z (Local)
201
Scalar
Temperature
202
Scalar
External Heat Flux
203
Scalar
Reaction Heat Flux
Note: All mechanical nodal quantities are defined in the global coordinate system, except those tagged with "(Local)". The latter are defined in the local coordinate systems of the nodes, if such coordinate systems have been defined by the TRANSFORMATION or COORD SYSTEM model definition option, or in the global system, otherwise.
Main Index
Main Index
CHAPTER 12 631 Code Coupling Interface
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
If the subroutine is called in CPLREG_EXCHANGE for ICALL=1, the values of the quantity at the start of the coupling step (i.e., the values at the end of the previous coupling step) are returned. If it is called for ICALL=2, the updated values at the end of the coupling step are returned.
Main Index
Main Index
632 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_GLOBAL_VALUES 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: Input: IQID
is the quantity for which the new value must be set.
MXVAL
is the maximum number of values to set.
VALUES
is the array with new values.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Quantities Currently only one global quantity can accessed through this routine: Quantity ID
Type
Description
2
Scalar
Coupling Time Step
Note: The Coupling Time Step is the time between two calls to CPLREG_EXCHANGE and defaults to the time increment. It can be changed only if the AUTO STEP stepping scheme is used. In that case, it must changed in the CPLREG_EXCHANGE user subroutine if ICALL=1.
Main Index
Main Index
CHAPTER 12 633 Code Coupling Interface
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
634 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_NODE_VALUES 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 MSC.Marc Volume C: Program Input). The new values are used in the subsequent coupling step(s), until changed by a subsequent call to this routine. Note that the CPLREG_PUT_ALL_NODE_VALUES utility routine is more efficient if the values at all nodes of a region must be set. Format User subroutine CPLREG_PUT_NODE_VALUES is called with the following headers: SUBROUTINE CPLREG_PUT_NODE_VALUES(IREG,IQID,NNODE,MXVAL, INODEIDS,VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION INODEIDS(NNODE),VALUES(MXVAL,NNODE)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
IQID
is the quantity for which the values must be set.
NNODE
is the number of nodes for which the values must be set.
MXVAL
is the maximum number of values per node to set.
INODEIDS
is the array with user ids of the nodes for which values must be set.
VALUES
is the array with the new values of the quantity at the nodes.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Note: The CPLREG_PUT_NODE_VALUES routine may be called multiple times to set the values of a quantity for a subset of nodes of the coupling region.
Main Index
Main Index
CHAPTER 12 635 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
102
Vector
Displacement
103
Vector
External Force
112
Vector
Displacement (Local)
113
Vector
External Force (Local)
161
Scalar
Displacement X (Local)
162
Scalar
Displacement Y (Local)
163
Scalar
Displacement Z (Local)
164
Scalar
External Force X (Local)
165
Scalar
External Force Y (Local)
166
Scalar
External Force Z (Local)
201
Scalar
Temperature
202
Scalar
External Heat Flux
Notes: All mechanical nodal quantities are defined in the global coordinate system, except those tagged with "(Local)". The latter are defined in the local coordinate systems of the nodes, if such coordinate systems have been defined by the TRANSFORMATION model definition option, or in the global system, otherwise. Only quantities specified in the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via this utility routine.
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
636 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ALL_NODE_VALUES 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 MSC.Marc Volume C: Program Input). The new values are used in the subsequent coupling step(s), until changed by a subsequent call to this routine. This utility routine is similar to the CPLREG_PUT_NODE_VALUES utility, but more efficient if the values at all nodes of the region must be set. Format User subroutine CPLREG_PUT_ALL_NODE_VALUES is called with the following headers: SUBROUTINE CPLREG_PUT_ALL_NODE_VALUES(IREG,IQID,MXVAL, VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION VALUES(MXVAL,*)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
IQID
is the quantity for which the values must be set.
MXVAL
is the maximum number of values per node to set.
VALUES
is the array with the new values of the quantity at the nodes.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Notes: The dimension of the VALUES array must be at least (MXVAL,NRNODE), in which NRNODE is the number of nodes of the coupling region as returned by the CPLREG_GET_INFO utility. The values must be supplied in the order given by the INODEIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
CHAPTER 12 637 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
102
Vector
Displacement
103
Vector
External Force
112
Vector
Displacement (Local)
113
Vector
External Force (Local)
161
Scalar
Displacement X (Local)
162
Scalar
Displacement Y (Local)
163
Scalar
Displacement Z (Local)
164
Scalar
External Force X (Local)
165
Scalar
External Force Y (Local)
166
Scalar
External Force Z (Local)
201
Scalar
Temperature
202
Scalar
External Heat Flux
Notes: All mechanical nodal quantities are defined in the global coordinate system, except those tagged with "(Local)". The latter are defined in the local coordinate systems of the nodes, if such coordinate systems have been defined by the TRANSFORMATION model definition option, or in the global system, otherwise. Only quantities specified in the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via this utility routine.
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
638 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_EDGE_VALUES 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 MSC.Marc Volume C: Program Input). The new values are used in the subsequent coupling step(s), until changed by a subsequent call to this routine. Format User subroutine CPLREG_GET_EDGE_VALUES is called with the following headers: SUBROUTINE CPLREG_GET_EDGE_VALUES(IREG,IQID,NEDGE,MXVAL, IEDGEIDS,VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION IEDGEIDS(NEDGE),VALUES(NVAL,NEDGE)
where: Input: IREG
IQID NEDGE MXVAL IEDGEIDS VALUES
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME). is the quantity for which the values must be set. is the number of edges for which the values must be set. is the number of values per edge to set. is the array with ids of the edges for which the values must be set. is the array with the new values of the quantity at the edges.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Notes: The CPLREG_PUT_EDGE_VALUES routine may be called multiple times to set the values of a quantity for a subset of edges of the coupling region. The IEDGEIDS array must contain packed numbers of the form ID*100+IEDGE, in which ID is the user id of the element and IEDGE is the edge number in the MSC.Marc convention (see CPLREG_GET_MESH utility).
Main Index
Main Index
CHAPTER 12 639 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
1101
Scalar
Total Pressure
1102
Vector
Total Traction
1201
Scalar
Heat Flux Density
1202
Scalar
Film Coefficient
1203
Scalar
Environment Temperature
Note: Only quantities specified in the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via this utility routine.
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
640 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ALL_EDGE_VALUES 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 MSC.Marc Volume C: Program Input). The new values are used in the subsequent coupling step(s), until changed by a subsequent call to this routine. This utility routine is similar to the CPLREG_PUT_EDGE_VALUES utility, but more efficient if the values at all edges of the region must be set. Format User subroutine CPLREG_PUT_ALL_EDGE_VALUES is called with the following headers: SUBROUTINE CPLREG_PUT_ALL_EDGE_VALUES(IREG,IQID,MXVAL, VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION VALUES(MXVAL,*)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
IQID
is the quantity for which the values must be set.
MXVAL
is the number of values per edge to set.
VALUES
is the array with the new values of the quantity at the edges.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Notes: The dimension of the VALUES array must be at least (MXVAL,NRELEM), in which NRELEM is the number of edges of the coupling region as returned by the CPLREG_GET_INFO utility. The values must be supplied in the order given by the IELEMIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
CHAPTER 12 641 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
1101
Scalar
Total Pressure
1102
Vector
Total Traction
1201
Scalar
Heat Flux Density
1202
Scalar
Film Coefficient
1203
Scalar
Environment Temperature
Note: Only quantities specified in the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via this utility routine.
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
642 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_FACE_VALUES 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 MSC.Marc Volume C: Program Input). The new values are used in the subsequent coupling step(s), until changed by a subsequent call to this routine. Format User subroutine CPLREG_GET_FACE_VALUES is called with the following headers: SUBROUTINE CPLREG_GET_FACE_VALUES(IREG,IQID,NFACE,MXVAL, IFACEIDS,VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION IFACEIDS(NFACE),VALUES(NVAL,NFACE)
where: Input: IREG
IQID NFACE MXVAL IFACEIDS VALUES
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME). is the quantity for which the values must be set. is the number of faces for which the values must be set. is the number of values per face to set. is the array with ids of the faces for which the values must be set. is the array with the new values of the quantity at the faces.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Notes: The CPLREG_PUT_FACE_VALUES routine may be called multiple times to set the values of a quantity for a subset of faces of the coupling region. The IFACEIDS array must contain packed numbers of the form ID*100+IFACE, in which ID is the user id of the element and IFACE is the face number in the MSC.Marc convention (see CPLREG_GET_MESH utility).
Main Index
Main Index
CHAPTER 12 643 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
1101
Scalar
Total Pressure
1102
Vector
Total Traction
1201
Scalar
Heat Flux Density
1202
Scalar
Film Coefficient
1203
Scalar
Environment Temperature
Note: Only quantities specified in the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via this utility routine.
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
644 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ALL_FACE_VALUES Put Face Data at Coupling Regions Description The CPLREG_PUT_FACE_VALUES utility routine sets the new values of a quantity at all faces of a coupling region defined via the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input). The new values are used in the subsequent coupling step(s), until changed by a subsequent call to this routine. This utility routine is similar to the CPLREG_PUT_FACE_VALUES utility, but more efficient if the values at all faces of the region must be set. Format User subroutine CPLREG_PUT_ALL_FACE_VALUES is called with the following headers: SUBROUTINE CPLREG_PUT_ALL_FACE_VALUES(IREG,IQID,MXVAL, VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION VALUES(MXVAL,*)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
IQID
is the quantity for which the values must be set.
MXVAL
is the number of values per face to set.
VALUES
is the array with the new values of the quantity at the faces.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Notes: The dimension of the VALUES array must be at least (MXVAL,NRELEM), in which NRELEM is the number of faces of the coupling region as returned by the CPLREG_GET_INFO utility. The values must be supplied in the order given by the IELEMIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
CHAPTER 12 645 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
1101
Scalar
Total Pressure
1102
Vector
Total Traction
1201
Scalar
Heat Flux Density
1202
Scalar
Film Coefficient
1203
Scalar
Environment Temperature
Note: Only quantities specified in the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via this utility routine.
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
646 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ELEM_VALUES 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 MSC.Marc Volume C: Program Input). The new values are used in the subsequent coupling step(s), until changed by a subsequent call to this routine. Note that the CPLREG_PUT_ALL_ELEM_VALUES utility routine is more efficient if the values at all elements of a region must be set. Format User subroutine CPLREG_GET_ELEM_VALUES is called with the following headers: SUBROUTINE CPLREG_GET_ELEM_VALUES(IREG,IQID,NELEM,MXVAL, IELEMIDS,VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION IELEMIDS(NELEM),VALUES(NVAL,NELEM)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
IQID
is the quantity for which the values must be set.
NELEM
is the number of elements for which the values must be set.
MXVAL
is the number of values per element to set.
IELEMIDS
is the array with ids of the elements for which the values must be set.
VALUES
is the array with the new values of the quantity at the elements.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Note: The CPLREG_PUT_ELEM_VALUES routine may be called multiple times to set the values of a quantity for a subset of elements of the coupling region.
Main Index
Main Index
CHAPTER 12 647 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
10101
Vector
Volume Load
10131
Scalar
Volume Load X
10132
Scalar
Volume Load Y
10133
Scalar
Volume Load Z
Note: Only quantities specified in the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via this utility routine.
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
648 MSC.Marc Volume D: User Subroutines and Special Routines
■ CPLREG_PUT_ALL_ELEM_VALUES 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 MSC.Marc Volume C: Program Input). The new values are used in the subsequent coupling step(s), until changed by a subsequent call to this routine. This utility routine is similar to the CPLREG_PUT_ELEM_VALUES utility, but more efficient if the values at all elements of the region must be set. Format User subroutine CPLREG_PUT_ALL_ELEM_VALUES is called with the following headers: SUBROUTINE CPLREG_PUT_ALL_ELEM_VALUES(IREG,IQID,MXVAL, VALUES,IERROR) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION VALUES(MXVAL,*)
where: Input: IREG
is the internal number of the coupling region (see user subroutines CPLREG_INIT and CPLREG_EXCHANGE or utility routine CPLREG_FIND_NAME).
IQID
is the quantity for which the values must be set.
MXVAL
is the number of values per element to set.
VALUES
is the array with the new values of the quantity at the elements.
Required Output: IERROR
is the error status: = 0: on success = 1: on error
Note: The dimension of the VALUES array must be at least (MXVAL,NRELEM), in which NRELEM is the number of elements of the coupling region as returned by the CPLREG_GET_INFO utility. The values must be supplied in the order given by the IELEMIDS array as returned by the CPLREG_GET_MESH utility.
Main Index
Main Index
CHAPTER 12 649 Code Coupling Interface
Quantities The following quantities may be accessed through this routine: Quantity ID
Type
Description
10101
Vector
Volume Load
10131
Scalar
Volume Load X
10132
Scalar
Volume Load Y
10133
Scalar
Volume Load Z
Note: Only quantities specified in the COUPLING REGION model definition option (see MSC.Marc Volume C: Program Input) for a given coupling region can be prescribed via this utility routine.
Availability This utility routine is available in the following user subroutines: CPLREG_EXCHANGE
Main Index
Main Index
650 MSC.Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index
Appendix A User Subroutines and Special Routines List
A
User Subroutines, Special Routines, and Utility Routines List
User Subroutine ANELAS . ANEXP . . ANKOND ANPLAS . ASSOC . .
......................................................... ......................................................... ......................................................... ......................................................... .........................................................
CPLREG_EXCHANGE . . CPLREG_FINALIZE. . . . . CPLREG_INIT . . . . . . . . . CREDE . . . . . . . . . . . . . . CRPLAW (Viscoplastic) . CRPLAW. . . . . . . . . . . . . CRPVIS . . . . . . . . . . . . . CUPFLX . . . . . . . . . . . . .
Main Index
Main Index
Page
............................................. ............................................. ............................................. ............................................. ............................................. ............................................. ............................................. .............................................
205 230 232 221 354 614 616 612 109 348 246 362 72
652 MSC.Marc Volume D: User Subroutines and Special Routines
User Subroutine DIGEOM
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
ELEVAR ELEVEC
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
FILM . . . . FLOW . . . FLUX . . . . FORCDF . FORCDT . FORCEM .
........................................................ ........................................................ ........................................................ ........................................................ ........................................................ ........................................................
GAPT . . . GAPU . . . GENSTR .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
HOOKLW . HOOKVI . HYPELA2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
IMPD . . . INITPL . . INITPO . INITSV. . INTCRD .
......................................................... ......................................................... ......................................................... ......................................................... .........................................................
MAP2D . . . . . . MOTION (2-D) MOTION (3-D) NASSOC . NEWPO . . NEWSV . .
Main Index
Main Index
Page
92 94 66 88 78 61
420 167 168 112 432
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
APPENDIX A 653 User Subroutines, Special Routines, and Utility Routines List
User Subroutine ORIENT PLOTV
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
REBAR .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
SEPFOR . . . . SEPFORBBC SEPSTR . . . . SINCER . . . . TENSOF . TRSFAC .
...................................................... ...................................................... ...................................................... ......................................................
Main Index
132 134 136 355
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
UABLATE . . . . . . UABLTNORM . . . UACOUS . . . . . . UACTIVE . . . . . . UACTUAT . . . . . . UADAP . . . . . . . . UADAP2 . . . . . . . UADAPBOX . . . . UARRBO . . . . . . UBEAM . . . . . . . . UBEAR . . . . . . . . UBGINC . . . . . . . UBGITR . . . . . . . UBGPASS . . . . . . UCAV . . . . . . . . . UCOHESIVE . . . . UCOKSL . . . . . . . UCOMPL . . . . . . UCOORD . . . . . . UCRACK. . . . . . . UCRACK_PARIS .
Main Index
Page
................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ................................................... ...................................................
190 192 323 387 408 394 399 400 320 301 443 433 435 436 171 304 328 308 393 261 403
654 MSC.Marc Volume D: User Subroutines and Special Routines
User Subroutine UCRACKGROW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UCRPLW (Viscoplastic) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UCRPLW (Viscoplastic) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UCURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UDAMAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UDAMAGE_INDICATOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UEDINC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UELASTOMER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UELDAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UELOOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UENERG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UEPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFAH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFCONN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFILM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFINITE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFLUXMEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFMEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFORMSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFOUND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFOUR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFRIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFRICBBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFRORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFTHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UFXORD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UGASKET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UGENT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UGLAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UGMEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UGRAIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UGROOV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UGROWRIGID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UHTCOE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UHTCON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UHTNRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Main Index
Main Index
Page 395 244 346 240 273 143 434 294 283 437 279 234 177 223 375 98 291 179 186 104 96 76 127 129 390 180 374 312 321 182 188 271 444 126 138 141 145
APPENDIX A 655 User Subroutines, Special Routines, and Utility Routines List
User Subroutine UINSTR . . . . . UMAKNET . . . UMDCOE . . . . UMDCON . . . . UMDNRC . . . . UMOONY . . . . UMU . . . . . . . . UNEWTN . . . . UNORST. . . . . UOBJFN . . . . . UOGDEN . . . . UPERM. . . . . . UPHI . . . . . . . . UPNOD. . . . . . UPOSTV . . . . . UPOWDR . . . . UPRFILM . . . . UPROGFAIL . . UPSTNO . . . . . UPYROLEFF. . UPYROLSL . . . UQVECT . . . . . URCONN . . . . UREACB . . . . . URESTR . . . . . URPFLO . . . . . USDATA . . . . . USELEM . . . . . USHELL . . . . . USHRET . . . . . USHRINKAGE. USIGMA . . . . . USINC . . . . . . USINKPT . . . . USIZEOUTL . . USPCHT . . . . . USPCHTAB . . .
Main Index
Main Index
Page
..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... ..................................................... .....................................................
74 380 156 159 161 278 235 317 163 173 281 277 306 385 415 275 175 225 418 332 326 101 391 170 445 318 117 313 406 265 242 237 116 100 378 238 335
656 MSC.Marc Volume D: User Subroutines and Special Routines
User Subroutine
Page
USPLIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . USPLIT_MESH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . USPRNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . USSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . USSUBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTHICK (Hydrodynamic Lubrication) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTHICK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTIMESTEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTIMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UTRANS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVELOC (Hydrodynamic Lubrication) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVELOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVOID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVOIDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVOIDRT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVSCPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVTCOE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVTCON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UVTNRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UWATERSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UWEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UWELDFLUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . UWELDPATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VSWELL WKSLP YIEL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
ZERO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Special Routine PLDUMP13/PLDUMP2000 .
Main Index
Main Index
392 397 257 115 324 447 407 118 184 405 449 119 266 267 269 343 148 151 153 330 193 68 70
Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
APPENDIX A 657 User Subroutines, Special Routines, and Utility Routines List
Coupling Utility Routine CPLREG_FIND_NAME . . . . . . . . . . . CPLREG_GET_ALL_NODE_VALUES CPLREG_GET_GLOBAL_VALUES . . CPLREG_GET_INFO . . . . . . . . . . . . CPLREG_GET_MESH . . . . . . . . . . . . CPLREG_GET_NODE_VALUES . . . . CPLREG_GET_QUANTS . . . . . . . . . CPLREG_PUT_ALL_EDGE_VALUES. CPLREG_PUT_ALL_ELEM_VALUES . CPLREG_PUT_ALL_FACE_VALUES . CPLREG_PUT_ALL_NODE_VALUES CPLREG_PUT_EDGE_VALUES . . . . CPLREG_PUT_ELEM_VALUES . . . . . CPLREG_PUT_FACE_VALUES . . . . . CPLREG_PUT_GLOBAL_VALUES . . CPLREG_PUT_NODE_VALUES . . . .
Coupling Utility Routine Mathematical Utility Routine DDOT .
Page
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 .......................................................... .......................................................... .......................................................... .......................................................... ..........................................................
INV3X3 . INVERT
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
SCLA
588 589 590 591 592
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
PRINCV
Main Index
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 Page
GMADD GMPRD GMSUB GMTRA. GTPRD .
MCPY .
Main Index
Page
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
658 MSC.Marc Volume D: User Subroutines and Special Routines
Main Index
Main Index