Z-mat MSC-Marc interface#

Description#

The command described in this chapter allows to use a Z-mat behavior within a MSC-Marc analysis. The interface with the Z-mat library is implemented by means of the uvscpl Marc user subroutine. The choice of uvscpl to build the interface, against other candidate subroutines available to implement user materials, has been motivated by its flexibility. Note however that Zmarc capabilities are by no means restricted to time-dependent creep behaviors.

Syntax#

% Zmarc -j problem  [ run_marc options ] \(\hookleftarrow\)

where problem.dat is the name of an MSC-Marc input data file.

The Zmarc script is a simple copy of the standard run_marc script, where commands needed to link automatically the Z-mat package to build a custom marc executable have been added. Therefore, standard options of the run_marc procedure are also available with the Zmarc command.

MSC-Marc Input#

The definition of a material for the Z-mat behaviors always uses an external file to establish the model components and coefficients. Z-mat never uses the material parameters defined in the Marc .dat file.

In the current implementation the definition of the Zmat behavior should be given in a file named problem.zebulon.

Several additions to a standard Marc .dat file are necessary to activate the use of Zmat. Some of them cannot be accessed by means of the Mentat graphical interface and should be done directly in the .dat file. Those commands are listed hereafter:

  • Parameters section

    • The state vars command should be added to specify the number of material variables needed by the Zmat behavior. The Zpreload utility can be used to compute the number of variables required. In any case, Zmat outputs to the .log file the correspondence between the Marc user state variables and Zmat the behavior components. If not enough state variables are available for the behavior the analysis is stopped. Otherwise a warning is printed if more variables than necessary have been specified.

      state vars,20,20,
      
    • The creep procedure should be activated by means of the creep command, even if no creep effects are involved in the analysis. This is needed by Marc, because the uvscpl user subroutine can only be used within the creep algorithm.

      creep,0,0,1
      
  • Model definition section

    • The visco plas parameter of the isotropic or orthotropic command must be selected, to activate the use of material integration by means of the uvscpl user subroutine. Note that either isotropic or orthotropic materials can be selected indifferently, since values of the material coefficients given as arguments of these commands are ignored by Zmat, that reads the material definition in a separate problem.zebulon file.

      isotropic
      ,
      1,visco plas,isotropic,0,0,0,0,material1,
      2.E+4,3.E-1,8.E-6,2.E-5,0.0,0.0,0.0,0.0,
      1 to 1000
      
    • To benefit from the consistent tangent matrix calculated by most Zmat behaviors, and accelerate the convergence of the global equilibrium iterations, the full newton-raphson algorithm should be selected by setting the 6\(^{th}\) parameter of the control command to 1.

      control
      1000,10,2,0,0,1,1,0,1,0,
      0.001,0.,0.1E-8,0.,0.1,0.,0.1E-4,1.E-12,
      
    • Output of material variables to the Marc results file

      The post command allows to select which material variable should be stored in the results files. In this case the element codes that should be given as argument of the post command, is a negative integer value such as -varid, where varid is the number of the user variable required for output.

      post
      14,16,17,0,0,19,20,0,1,0,
        301
        461
        311
        391
      -30,,d1
      -31,,d2
      -32,,d3
      

      The above command adds user variables 30, 31 and 32 to the .t16 result file. The corresponding values will then be accessed by the graphical post-processor of Mentat. Within Mentat the names given to those state variables will be respectively d1, d2 and d3, as defined by the post command.

      Note that this output capability makes use of the user subroutine plotv to interpret correctly the user element codes. An appropriate plotv code is provided in the Zmarc package. However, this means that the user cannot redefine this particular user subroutine for its own purpose.

  • History definition section

    The use of the auto step procedure for adaptative load step control is strongly advised. Moreover, starting with Marc2003, auto load doens’t seem to handle anymore user material implemented with the uvscpl subroutine. Also, as described in the next section, the enhanced scheme of this procedure can be used to provide Marc some feedback about local integration results obtained in the Zmat library. This option should then be activated as well by setting the 9\(^{th}\) parameter of the second data block to 1.

    auto step
    0.02,0.4,,,0.0001,0.1,100,6,1,
    ,10,0,,,,,,,,,2,
    

Automatic time-stepping and Zmat local integration#

For complex material behaviors and/or large strain increments, non-convergence may occur during integration of the behavior equations by Zmat. Without a proper procedure, such local divergence will cause either premature convergence (especially in the case of anisothermal analysis under purely thermal loadings), or run-away newton iterations until the specified maximum number of recycles is reached and increment cutback eventually occurs.

Unfortunately there is nothing available in uvscpl (as in other user material subroutines) to signal a local divergence back to Marc and force an immediate increment cutback.

However, the enhanced scheme of the auto step command, that allows to specify user criteria to control the step-size, may be used to implement some kind of emergency procedure. The input data necessary to implement this mechanism from the .dat file is not trivial, and is described hereafter:

  • activate the enhanced scheme of the auto step procedure by setting to 1 the 9\(^{th}\) parameter of the second data block,

  • choose to use user criteria as limits (versus targets) by setting to 0 the third parameter of the third data block,

  • add a criterion on a Zmat variable, that will cause increment cutback in case of its violation during local integration. To select a particular user state variable, a code such as 13x100 + state variable id should be used as first argument of the fourth data block.

auto step
0.02,0.4,,,0.0001,0.1,100,6,1,0
,10,0,,,1.2,,,,,,2,
1330,cmc
10.,0.01

In the above example, the user criterion used to monitor convergence is defined on user state variable number 30 (element code 1330). The criterion defines that this variable at any integration point of the element set named cmc, should not increase of a value of more than 10.0 (defined in the fifth data-block) over an increment. If the increase of the variable exceeds the limit value specified, the auto step procedure will discard the load increment, and the step size will be cut back accordingly.

More precisely, denoting by \(\Delta t\) the current step size, \(\Delta v\) the maximum variation of variable \(v\) found by local integration during the current increment cycle, and \(v_{max}\) the limit value specified, if \(\Delta v > v_{max}\) a new icrement will be attempted with a lower step size calculated as:

(219)#\[\Delta t ~\frac{v_{max}}{\Delta v}\]

.

Additional commands may then be used in the Zmat problem.zebulon file, to control increment cut-back in case of local divergence. Those commands are the following ones:

***divergence_variable 30 20.

The above command select variable 30 to monitor local convergence, and specify that in the event of divergence a \(\Delta v\) value of 20. should be sent back to Marc (ie. two times the \(v_{max}\) limit value defined in the auto step command). Hence the effect will be to force a division by 2 of the global step size in the event of local divergence.

When using this scheme, care must be taken to carefully select the \(v_{max}\) limit value. Typically the value should exceed likely variations for the variable selected, and the ***divergence_variable increment value set accordingly to produce an increment cut-back of the required size.

Example#

The following listing summarizes the options needed in a visco.dat Marc input file when using the Zmarc interface.

title visco
$ parameters section
...
state var,19,19
creep,0,0,1
end
$ model definition section
...
isotropic
,
1,visco plas,isotropic,0,0,0,0,material1,
20000.,0.3,8.E-6,2.E-5,0.0,0.0,0.0,0.0,
all_element
...
post
14,16,17,0,0,19,20,0,1,0,
301,
311,
-7,,evcum
...
control
100,10,2,0,0,1,1,0,1,0,
0.001,0.,0.1E-8,0.,0.1,0.,0.1E-4,1.E-12,
$ history definition section
auto step
0.02,0.4,,,0.0001,0.1,100,6,1,
,10,0,,,,,,,,,2,
1308,all_element
10.,0.01
...

The Zmat behavior is defined in a separate visco.zebulon file included hereafter. The cooresponding model is a typical Chaboche viscoplasticity model. Note that the value of the young’s modulus will indeed be 150000. as defined in the Zmat file, and that the value of 20000. given after the isotropic command of the .dat file has no impact whatsoever on the results.

***material
*integration theta_method_a 1. 1.e-9 100
***divergence_variable 8 20.
***behavior gen_evp
  **elasticity
   young 150000.
   poisson 0.3
  **potential gen_evp ev
   *criterion mises
   *flow norton
     n 7.
     K 1200.
   *kinematic nonlinear
     C 126000.
     D 380.
   *isotropic constant
     R0 10.
***return

Using the Zpreload utility on the above material file would produce the following output:

$ Zpreload visco.zebulon

Reading behavior in file: visco.zebulon

============================================
Flux Name:
  sig11  sig22  sig33  sig12  sig23
  sig31

Grad Name:
  eto11  eto22  eto33  eto12  eto23
  eto31

var_int Name:
  eel11(sdv1) eel22(sdv2) eel33(sdv3) eel12(sdv4) eel23(sdv5)
  eel31(sdv6)
  evcum(sdv7)
  al111(sdv8) al122(sdv9) al133(sdv10) al112(sdv11) al123(sdv12)
  al131(sdv13)
var_aux Name:
  evi11(sdv14) evi22(sdv15) evi33(sdv16) evi12(sdv17) evi23(sdv18)
  evi31(sdv19)
============================================
done with material file reading...

Temperature not needed...
...

This allows to select the number of state variables needed by the behavior (19 variables in the example) that should be given as argument of the state var command. State variable number 7 is the cumulated plastic strain (named evcum) for this particular Zmat behavior. This material variable will be stored in the Marc results file using the appropriate post elem var code (-7 in this case). This variable is also used to monitor local divergence (1308 code to define the user criterion used in the auto step procedure), and a corresponding ***divergence_variable is included in the Zmat file to control the increment cut-back in case of local divergence. Note that Marc always use the first state variable to store the temperature, such that the state variable id given by Zpreload must be incremented by one to select the proper material variable.

Finally, note that this shift in the state variable id, is automatically taken into account for the post command (the shift is done in the plotv user subroutine included in the Zmarc release).