Hello,
I'm using the C++ API in an external application. I have successfully compiled the code to be able to open and read data from several odb's, but I recently run into a specific odb that I wasn't able to read.
This Odb is created through an Abaqus/Explicit simulation using Abaqus 2022 and contain a VUMAT.
When the openODB command is called, the error message is as follow :
OdbError: Cannot open file C:/temp/TestUMAT/TEST_ODB_VMAT.odb. ValueError: omu_PrimEnum(const cow_String&) - str not allowed: NONE Permissible: {INCREMENTAL: 0, TOTAL: 1, INCOMPRESSIBLE: 2}
The inp is :
*Heading ** Job name: TEST_ODB Model name: Model-1 ** Generated by: Abaqus/CAE 6.11-2 *Preprint, echo=NO, model=NO, history=NO, contact=NO ** ** PARTS ** *Part, name=Part-1 *Node 1, 1., 1., 1. 2, 1., 0., 1. 3, 1., 1., 0. 4, 1., 0., 0. 5, 0., 1., 1. 6, 0., 0., 1. 7, 0., 1., 0. 8, 0., 0., 0. *Element, type=C3D8 1, 2, 1, 3, 4, 6, 5, 7, 8 *Nset, nset=_PickedSet2, internal, generate 1, 8, 1 *Elset, elset=_PickedSet2, internal 1, ** Section: Section-1 *Solid Section, elset=_PickedSet2, material=STOLKEN , *End Part ** ** ** ASSEMBLY ** *Assembly, name=Assembly ** *Instance, name=Part-1-1, part=Part-1 *End Instance ** *Nset, nset=_PickedSet5, internal, instance=Part-1-1, generate 5, 8, 1 *Elset, elset=_PickedSet5, internal, instance=Part-1-1 1, *Nset, nset=_PickedSet6, internal, instance=Part-1-1, generate 2, 8, 2 *Elset, elset=_PickedSet6, internal, instance=Part-1-1 1, *Nset, nset=_PickedSet7, internal, instance=Part-1-1 3, 4, 7, 8 *Elset, elset=_PickedSet7, internal, instance=Part-1-1 1, *Nset, nset=_PickedSet8, internal, instance=Part-1-1, generate 1, 4, 1 *Elset, elset=_PickedSet8, internal, instance=Part-1-1 1, *Nset, nset=_PickedSet9, internal, instance=Part-1-1, generate 1, 7, 2 *Elset, elset=_PickedSet9, internal, instance=Part-1-1 1, *Nset, nset=_PickedSet10, internal, instance=Part-1-1 1, 2, 5, 6 *Elset, elset=_PickedSet10, internal, instance=Part-1-1 1, *End Assembly ** ** MATERIALS ** *MATERIAL, NAME=STOLKEN *DENSITY 1, 25 *USER MATERIAL,CONSTANTS=4 4E6,0.3,0,0 *DEPVAR 5 ** ** BOUNDARY CONDITIONS ** ** Name: BC-1 Type: Symmetry/Antisymmetry/Encastre *Boundary _PickedSet5, XSYMM ** Name: BC-2 Type: Symmetry/Antisymmetry/Encastre *Boundary _PickedSet6, YSYMM ** Name: BC-3 Type: Symmetry/Antisymmetry/Encastre *Boundary _PickedSet7, ZSYMM ** ---------------------------------------------------------------- ** ** STEP: Step-1 ** *Step, name=Step-1 *Dynamic, EXPLICIT , 1.,, 1. ** ** BOUNDARY CONDITIONS ** ** Name: BC-4 Type: Displacement/Rotation *Boundary, TYPE=VELOCITY _PickedSet8, 1, 1, 0.1 ** Name: BC-5 Type: Displacement/Rotation *Boundary, TYPE=VELOCITY _PickedSet9, 2, 2, 0.2 ** Name: BC-6 Type: Displacement/Rotation *Boundary, TYPE=VELOCITY _PickedSet10, 3, 3, 0.3 ** ** OUTPUT REQUESTS ** *Restart, write ** ** FIELD OUTPUT: F-Output-1 ** *Output, field, variable=PRESELECT ** ** HISTORY OUTPUT: H-Output-1 ** *Output, history, variable=PRESELECT *End Step
and the VUMAT is (corresponding the example in the documentation) :
subroutine vumat( C Read only - 1 nblock, ndir, nshr, nstatev, nfieldv, nprops, jInfoArray, 2 stepTime, totalTime, dtArray, cmname, coordMp, charLength, 3 props, density, strainInc, relSpinInc, 4 tempOld, stretchOld, defgradOld, fieldOld, 3 stressOld, stateOld, enerInternOld, enerInelasOld, 6 tempNew, stretchNew, defgradNew, fieldNew, C Write only - 5 stressNew, stateNew, enerInternNew, enerInelasNew ) C include 'vaba_param_dp.inc' C C J2 Mises Plasticity with kinematic hardening for plane C strain case. C Elastic predictor, radial corrector algorithm. C C The state variables are stored as: C STATE(*,1) = back stress component 11 C STATE(*,2) = back stress component 22 C STATE(*,3) = back stress component 33 C STATE(*,4) = back stress component 12 C STATE(*,5) = equivalent plastic strain C C C All arrays dimensioned by (*) are not used in this algorithm dimension props(nprops), density(nblock), 1 coordMp(nblock,*), 2 charLength(*), dtArray(*), strainInc(nblock,ndir+nshr), 3 relSpinInc(*), tempOld(*), 4 stretchOld(*), defgradOld(*), 5 fieldOld(*), stressOld(nblock,ndir+nshr), 6 stateOld(nblock,nstatev), enerInternOld(nblock), 7 enerInelasOld(nblock), tempNew(*), 8 stretchNew(*), defgradNew(*), fieldNew(*), 9 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev), 2 enerInternNew(nblock), enerInelasNew(nblock), jInfoArray(*) C parameter (i_info_AnnealFlag = 1, * i_info_Intpt = 2, ! Integration station number * i_info_layer = 3, ! Layer number * i_info_kspt = 4, ! Section point number in current layer * i_info_effModDefn = 5, ! =1 if Bulk/ShearMod need to be defined * i_info_ElemNumStartLoc = 6) ! Start loc of user element number C parameter( zero = 0., one = 1., two = 2., three = 3., 1 third = one/three, half = .5, twoThirds = two/three, 2 threeHalfs = 1.5 ) C character*80 cmname C pointer (ptrjElemNum, jElemNum) dimension jElemNum(nblock) C lAnneal = jInfoArray(i_info_AnnealFlag) iLayer = jInfoArray(i_info_layer) kspt = jInfoArray(i_info_kspt) intPt = jInfoArray(i_info_Intpt) iUpdateEffMod = jInfoArray(i_info_effModDefn) iElemNumStartLoc = jInfoArray(i_info_ElemNumStartLoc) ptrjElemNum = loc(jInfoArray(iElemNumStartLoc)) c e = props(1) xnu = props(2) yield = props(3) hard = props(4) C twomu = e / ( one + xnu ) thremu = threeHalfs * twomu sixmu = three * twomu alamda = twomu * ( e - twomu ) / ( sixmu - two * e ) term = one / ( twomu * ( one + hard/thremu ) ) con1 = sqrt( twoThirds ) C do 100 i = 1,nblock C C Trial stress trace = strainInc(i,1) + strainInc(i,2) + strainInc(i,3) sig1 = stressOld(i,1) + alamda*trace + twomu*strainInc(i,1) sig2 = stressOld(i,2) + alamda*trace + twomu*strainInc(i,2) sig3 = stressOld(i,3) + alamda*trace + twomu*strainInc(i,3) sig4 = stressOld(i,4) + twomu*strainInc(i,4) C C Trial stress measured from the back stress s1 = sig1 - stateOld(i,1) s2 = sig2 - stateOld(i,2) s3 = sig3 - stateOld(i,3) s4 = sig4 - stateOld(i,4) C C Deviatoric part of trial stress measured from the back stress smean = third * ( s1 + s2 + s3 ) ds1 = s1 - smean ds2 = s2 - smean ds3 = s3 - smean C C Magnitude of the deviatoric trial stress difference dsmag = sqrt( ds1**2 + ds2**2 + ds3**2 + 2.*s4**2 ) C C Check for yield by determining the factor for plasticity, C zero for elastic, one for yield radius = con1 * yield facyld = zero if( dsmag - radius .ge. zero ) facyld = one C C Add a protective addition factor to prevent a divide by zero C when dsmag is zero. If dsmag is zero, we will not have exceeded C the yield stress and facyld will be zero. dsmag = dsmag + ( one - facyld ) C C Calculated increment in gamma (this explicitly includes the C time step) diff = dsmag - radius dgamma = facyld * term * diff C C Update equivalent plastic strain deqps = con1 * dgamma stateNew(i,5) = stateOld(i,5) + deqps C C Divide dgamma by dsmag so that the deviatoric stresses are C explicitly converted to tensors of unit magnitude in the C following calculations dgamma = dgamma / dsmag C C Update back stress factor = hard * dgamma * twoThirds stateNew(i,1) = stateOld(i,1) + factor * ds1 stateNew(i,2) = stateOld(i,2) + factor * ds2 stateNew(i,3) = stateOld(i,3) + factor * ds3 stateNew(i,4) = stateOld(i,4) + factor * s4 C C Update the stress factor = twomu * dgamma stressNew(i,1) = sig1 - factor * ds1 stressNew(i,2) = sig2 - factor * ds2 stressNew(i,3) = sig3 - factor * ds3 stressNew(i,4) = sig4 - factor * s4 C C Update the specific internal energy - stressPower = half * ( 1 ( stressOld(i,1)+stressNew(i,1) )*strainInc(i,1) 1 + ( stressOld(i,2)+stressNew(i,2) )*strainInc(i,2) 1 + ( stressOld(i,3)+stressNew(i,3) )*strainInc(i,3) 1 + two*( stressOld(i,4)+stressNew(i,4) )*strainInc(i,4) ) C enerInternNew(i) = enerInternOld(i) 1 + stressPower / density(i) C C Update the dissipated inelastic specific energy - plasticWorkInc = dgamma * half * ( 1 ( stressOld(i,1)+stressNew(i,1) )*ds1 1 + ( stressOld(i,2)+stressNew(i,2) )*ds2 1 + ( stressOld(i,3)+stressNew(i,3) )*ds3 1 + two*( stressOld(i,4)+stressNew(i,4) )*s4 ) enerInelasNew(i) = enerInelasOld(i) 1 + plasticWorkInc / density(i) 100 continue C return end
What I understand from the documentation is that the error comes from the parameter HYBRID FORMULATION of the *User Material keyword. But this parameter is not applied in an explicit simulation and is only relevant for Hybrid elements.
Can anyone help me and tell me why I get this error ?
Thanks a lot