ProductsAbaqus/Explicit Dynamic exchange of data with other Abaqus user subroutines and external programsTypically, Abaqus user subroutines are called with the context data limited to a specific material point, a specific element, etc. Rarely, you need to know some nonlocal information such as the state of the neighboring material points or elements. In other situations you want to specify the behavior in the user subroutines to depend dynamically on the external programs. Both these complex scenarios can be addressed using user subroutine VEXTERNALDB. VEXTERNALDB is called once at the beginning of the analysis, at the beginning of each step, before each increment, at the start of each increment, at the end of each increment, at the end of each step, and finally at the end of the analysis. Other Abaqus subroutines are called after the call to user subroutine VEXTERNALDB at the start of the increment but before the next call at the end of that increment. 
 User subroutine interface      subroutine vexternaldb(lOp, i_Array, niArray, r_Array, nrArray)
C
      include 'vaba_param.inc'
c
C     Contents of i_Array
      parameter( i_int_nTotalNodes     = 1,
     *           i_int_nTotalElements  = 2,
     *           i_int_kStep           = 3,
     *           i_int_kInc            = 4,
     *           i_int_iStatus         = 5,
     *           i_int_lWriteRestart   = 6  )
C     Possible values for the lOp argument
      parameter( j_int_StartAnalysis    = 0,      
     *           j_int_StartStep        = 1,      
     *           j_int_SetupIncrement   = 2,      
     *           j_int_StartIncrement   = 3,      
     *           j_int_EndIncrement     = 4,      
     *           j_int_EndStep          = 5,      
     *           j_int_EndAnalysis      = 6 )     
C     Possible values for i_Array(i_int_iStatus)
      parameter( j_int_Continue          = 0,      
*                j_int_TerminateStep     = 1,      
*                j_int_TerminateAnalysis = 2)      
C     Contents of r_Array
      parameter( i_flt_TotalTime   = 1,
     *           i_flt_StepTime    = 2,
     *           i_flt_dTime       = 3 )
C
      dimension i_Array(niArray),      
     *   r_Array(nrArray)
      kStep = i_Array(i_int_kStep)
      kInc  = i_Array(i_int_kInc)
      Note that you  can use the MPI communication between parallel Abaqus processes to gather 
      and scatter the data.
C     Start of the analysis
      if (lOp .eq. j_int_StartAnalysis) then
      User coding to set up the environment, open files, launch/connect to the external programs, etc. 
C        continuation from a previous analysis (restart)
         if (kStep .ne. 0) then 
         end if 
C     Start of the step
      else if (lOp .eq. j_int_StartStep) then
      Set up or exchange (import and export) initial values with external programs.      
      
C         The initial values may need to match those at the 
          point of restart.
          if ( kInc .ne. 0) then
          end if 
C     Setup the increment       
      else if (lOp .eq. j_int_SetupIncrement) then        
      Change i_Array(i_int_lWriteRestart) and 
                              i_Array(i_int_iStatus) if desired.      
      Change r_Array(i_flt_dTime) if desired.      
      
C     Start of the increment
      else if (lOp .eq. j_int_StartIncrement) then
      The time increment is finalized.  Use r_Array(i_flt_dTime) if desired.
      If needed, gather and export data  from the configuration at the end of the previous                               increment to external programs.      
      Import and scatter data from external program to influence the current Abaqus increment.      
C     End of the increment
      else if (lOp .eq. j_int_EndIncrement) then
      Change i_Array(i_int_iStatus) if desired.       
      Gather and export data  from the configuration at the end of the current increment 
      to external programs.      
C     End of the step
      else if (lOp .eq. j_int_EndStep) then
      In the case of multiple steps, prepare the transition to the next step.
      For example, these data can serve as initial values for the next step.
C     End of the analysis
      else if (lOp .eq. j_int_EndAnalysis) then
      User coding to close  files and disconnect any external programs, etc.      
      end if 
      return
      end
 Variables to be definedNone. 
 Variables that can be updated
 
 Variables passed in for information
  | |||||||||||