Announcement

Collapse
No announcement yet.

nblock in VUMAT

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • nblock in VUMAT

    Hello all,

    I am working on polymer constitutive modeling and have recently started using ABAQUS.

    I am currently using VUMAT for defining my user material. I am confused as to what 'nblock' refers to.

    The manuals say that it is the number of material points. Are these equal to number of elements? or are these similar to guass points. And how does abaqus decides the value for nblock.

    Also, is there a way to get the element number in vumat subroutine?

    Any help is much appreciated.

    regards
    B

  • #2
    Hi,

    'nblock' refers to the ID of the Gauss pt among stacked (or vectorized) Gauss pts.

    And yes, there are ways to get the element number.
    One attractive method is using a ghost shell function.

    Kumar

    Comment


    • #3
      Hi Kumar,

      Thanks for your reply...

      I use C3D8R elements and I gathered from internet that C3D8R has only one integration point. Is that the gauss point?

      Also, when I print the nblock to output file, I see the value as always equal to the number of elements.

      Am I missing something very basic? Also I have tried checking for the ghost shell function, but didnt find much information.. Could you please elaborate on it.

      Thanks again
      B

      Comment


      • #4
        You are using C3D8R elements which means continuum 3D 8 noded reduced integration. A reduced integration of this kind has a single Gauss pt.
        Thats why you have matching GP and element numbers.

        Regarding the second, apply the following cover,

        subroutine vumat (
        c Read only -
        1 jblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,
        2 stepTime, totalTime, dt, cmname, coordMp, charLength,
        3 props, density, strainInc, relSpinInc,
        4 tempOld, stretchOld, defgradOld, fieldOld,
        5 stressOld, stateOld, enerInternOld, enerInelasOld,
        6 tempNew, stretchNew, defgradNew, fieldNew,
        c Write only -
        7 stressNew, stateNew, enerInternNew, enerInelasNew )
        c
        include 'vaba_param.inc'
        c
        dimension jblock(*), props(nprops),density(*), coordMp(*),
        1 charLength(*), strainInc(*),
        2 relSpinInc(*), tempOld(*),
        3 stretchOld(*),
        4 defgradOld(*),
        5 fieldOld(*), stressOld(*),
        6 stateOld(*), enerInternOld(*),
        7 enerInelasOld(*), tempNew(*),
        8 stretchNew(*),
        9 defgradNew(*),
        1 fieldNew(*),
        2 stressNew(*), stateNew(*),
        3 enerInternNew(*), enerInelasNew(*)
        c
        character*80 cmname

        parameter (
        1 i_umt_nblock = 1,
        2 i_umt_npt = 2,
        3 i_umt_layer = 3,
        4 i_umt_kspt = 4,
        5 i_umt_noel = 5 )

        call vumatXtrArg ( jblock(i_umt_nblock),
        1 ndir, nshr, nstatev, nfieldv, nprops, lanneal,
        2 stepTime, totalTime, dt, cmname, coordMp, charLength,
        3 props, density, strainInc, relSpinInc,
        4 tempOld, stretchOld, defgradOld, fieldOld,
        5 stressOld, stateOld, enerInternOld, enerInelasOld,
        6 tempNew, stretchNew, defgradNew, fieldNew,
        7 stressNew, stateNew, enerInternNew, enerInelasNew,
        8 jblock(i_umt_noel), jblock(i_umt_npt),
        9 jblock(i_umt_layer), jblock(i_umt_kspt))

        return
        end

        c ----------------------------------------------------------------------------------

        subroutine vumatXtrArg (
        c read only -
        1 nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,
        2 stepTime, totalTime, timeinc, 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 read only extra arguments -
        6 nElement, nMatPoint, nLayer, nSecPoint)
        c
        include 'vaba_param.inc'
        c
        c all arrays dimensioned by (*) are not used in this algorithm
        dimension props(nprops), density(nblock),
        1 strainInc(nblock,ndir+nshr),
        2 relSpinInc(nblock,nshr), defgradOld(nblock,9),
        4 stressOld(nblock,ndir+nshr),
        5 stateOld(nblock,nstatev), enerInternOld(nblock),
        6 enerInelasOld(nblock),
        7 stretchNew(nblock,ndir+nshr), defgradNew(nblock,9),
        8 stressNew(nblock,ndir+nshr)

        dimension enerInelasNew(nblock),stateNew(nblock,nstatev),
        1 enerInternNew(nblock)

        dimension nElement(nblock),nMatPoint(nblock),nLayer(nblock),
        1 nSecPoint(nblock)

        character*80 cmname


        c make computations for every material point
        c -----------------------------------------------------------------------

        do 1000 nblck = 1,nblock

        Nelem=nElement(nblck) ! here we go
        blah blah blah

        enddo

        return
        end
        Last edited by Kumar Kurambakurash; 2009-11-11, 13:16.

        Comment


        • #5
          thanks again.. things are much clearer now...

          regards

          Comment


          • #6
            Hi Kumar,

            You are presenting some very interesting information :!:

            I did not know you could determine the element number from within a VUMAT subroutine. How on earth did you figure that out

            I assume that you have tried that approach and that it works, is that right? Is your approach a known feature? Are you working for Abaqus (Simulia)?

            Very cool stuff!
            Jorgen
            Jorgen Bergstrom, Ph.D. PolymerFEM Administrator

            Comment


            • #7
              Dear Jorgen,

              It really is cool I agree.

              I remember finding the method through a long web search.

              Thus the credit is not mine.

              However I have tried the method and it works perfectly fine and and it is reliable.

              Best

              Kumar

              Comment


              • #8
                Gauss points vs. integration points

                Originally posted by brunda View Post
                Hi Kumar,

                Thanks for your reply...

                I use C3D8R elements and I gathered from internet that C3D8R has only one integration point. Is that the gauss point?

                Also, when I print the nblock to output file, I see the value as always equal to the number of elements.

                Am I missing something very basic? Also I have tried checking for the ghost shell function, but didnt find much information.. Could you please elaborate on it.

                Thanks again
                B
                The integration points are called Gauss points since the required integrations follow Gaussian quadrature.

                Comment


                • #9
                  Hi guys,

                  I light of the above comments, I also had a question regarding nblock. I have been working on a composite laminate damage model in vusdfld (abaqus v6.81) for the initial phase, but will be switching over to vumat soon.

                  I also need to know the element number at a particular material point when using S4 (four integration points) shell elements with vusdfld. Curiously though when I output nblock for my 196 element model it alternatively displays 136,136......60,60,60 etc

                  Would anyone have any clues as to why this is? I saved a state variable with the value of "k" every time the subroutine was called, and when checking the value of this variable in Viewer, element 1 corresponds to material pt 1 and element 2, mat pt 2 and so on until I reach element 137 where it starts again with material pt 1.

                  Any thoughts?

                  Thanks!
                  Andrew

                  Comment


                  • #10
                    Hi all,

                    the V in VUMAT (and all other user defined explicit elements) stands for "vectorized". This means that abaqus passes chunks of data (i.e. nblock elements at once) to the user subroutine for calculation. That's why you always have to loop over nblock: you need to determine the results for all elements abaqus passed to your routine.
                    For small models, nblock may correspond to the number of elements in your model and subsequently kblock (current increment in nblock) corresponds to the element number. For larger models, there are multiple calls to your subroutine due to performance reasons, hence the number of elements differs from nblock and kblock has to be determined using nElement(kblock) (as mentioned before)...

                    Regards

                    Andi

                    Comment


                    • #11
                      So we need to perform the manual association as Kumar described above in order to know which elements correspond to which material points. If I can have a list of which overall nblock and invdividual kblock correspond to a particular element then I guess that the extra code is a small price to pay.

                      Comment


                      • #12
                        Kumar, thats a really great trick!! Have you got any more? I always find the lack of information passed into the VUMAT subroutine a major hinderance.

                        BTW another way to get element numbering in the VUMAT (which I used unitl reading this thread!) is to pass the element number from the subroutine VUSDFLD into the VUMAT through a state variable.

                        Comment


                        • #13
                          @ lumpwood

                          Before getting this new method working, and because I was previously working with VUSDFLD, I want to use the method you just mentioned to obtain the element numbers but I have been having problems.

                          In my subroutine file I have:

                          subroutine vusdfld(.....)
                          blah blah
                          do k=1,nblock
                          stateNew(k,2)=jElem(k)
                          end do
                          blah blah
                          return
                          end
                          subroutine VUMAT(....)
                          blah blah
                          do k=1,nblock
                          elnumber=stateNew(k,2)
                          end do
                          blah blah
                          return
                          end

                          However, when I output elnumber to check it comes up as "0". do you know why this isn't working? Wouldn't abaqus automatically handle the passage of my state variable from vusdfld to vumat?

                          thanks for any help

                          Comment


                          • #14
                            Had this problem myself. The first thing to make sure is that VUSDFLD is being called during the analysis. Stick a print statement in there or something, just because its in the same file as the VUMAT doesn't mean its automatically called.

                            The second thing to make sure is that the state variable isn't being overwitten before its used in your VUMAT (e.g. if you use statenew(k,1)=stateold(k,1) to update the variable, its value from VUSDFLD will be lost.)

                            Abaqus will pass the state variables from one routine to the other without problems though. Have this working fine myself so if you have any other problems with it I should be able to help.

                            Comment


                            • #15
                              Thanks lumpwood. Your first suggestion turned out to be the right one I had commented-out the '*USER DEFINED FIELD' parameter in my input files when I started working with vumat and hence vusdfld was being ignored *smacks forehead*.

                              Once I put it back in the element numbers are there, as you said, being careful not to reassign the values later on. I wonder if the time penalty due to the extra call is similar to the vumat method proposed by kumar...might have to look into that, but for now it works yay!

                              Comment

                              Working...
                              X