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