×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

Required Counter for each Element

Required Counter for each Element

Required Counter for each Element

(OP)
I'm modeling the curing of a composite rod with exothermic epoxy. For this application, I've been working with the HETVAL user subroutine. For the heat generation, I'd like to have a counter imbedded into each element to record how heat is released; once this counter reaches a specific value (i.e. 1.00), the heat generation value is bypassed for that element. Since this epoxy only starts reacting above 80 degrees Celsius and different elements will activate at different times, I cannot use time or temperature to control the heat generation.

From reading the documentation, I'm given the impression that the STATEV array might be useful for this application. However, I am uncertain how to work with it and designate the element number for this array when it is called. It does seem that the UMATH routine allows the use of NOEL (element number) value, yet the STATEV for that routine appears to be used for something else. Any advice I can receive would be greatly appreciated.

RE: Required Counter for each Element

You can use STATEV variables, but unfortunately HETVAL is not provided with element number and integration point. Thus you have no spatial information regarding to the integration point HETVAL is called for.


If you need to identify the integration points in HETVAL the following approach might work:
-the SDVINI subroutine is used to initiate the STATEV variable at each integration point and is called only once at the beginning of the analysis.
-the SDVINI is provided with the element number (NOEL), the integration point number (NPT) and also the coordinates of the integration point (COORDS).
-you can initiate some STATEV variables with this information, for example in SDVINI

STATEV(1)=NOEL
STATEV(2)=NPT
STATEV(3)=COORDS(1)
STATEV(4)=COORDS(2)
(and STATEV(5)=COORDS(3) for the 3D problems)
you can add an extra STATEV var for your counter which you are going to update in HETVAL

The STATEV variables can be plotted in CAE as any other scalar quantity.

RE: Required Counter for each Element

(OP)
     Thanks for your reply, the SDVINI subroutine was definitely what I was looking for.  As far as I can tell, the only part of the subroutine I require is the noel portion.  However, there must be still something that I am doing wrong since, after running a test, all the SDV values remained zero throughout the entire duration.  If possible, perhaps you (or another generous engineer) could review my code and point me in the right direction.  My knowledge of how ABAQUS transfers data is quite limited and I haven’t had much luck with the documentation.

     For this simple test, I’ve made a cylinder that is divided into 96 elements; since I have 96 elements and I need a counter for each element, I need STATEV with a dimension of 97.  Heat is applied to one side with the desire to heat it to above 80 degrees, at which time the heat generation will overwhelm the external heat transfer and the temperature will be raised rapidly.  After releasing heat for one second (10 steps), the counter will have reached 1.00 signifying that the curing process is completed, causing no more internal heat is released.

      subroutine sdvini(statev,coords,nstatv,ncrds,noel,npt,layer,kspt)
C
      include 'aba_param.inc'
C
      dimension statev(nstatv),coords(ncrds)
C
      statev(1)=noel
C
      return
      end
C                   
      subroutine hetval(cmname,temp,time,dtime,svar,flux,predef,dpred)
C                
      include 'aba_param.inc'
C                    
      character*80 cmname
C                    
      dimension temp(2),statev(97),predef(1),time(2),flux(2),dpred(1)
C
      noel = statev(1)
      cure = statev(noel+1)
      tempatT = temp(1)
      ts = 80
C   
      if (cure >= 1.0) then
            flux(1) = 0
      else if (tempatT > ts) then
          flux(1) = 500.00
          cure = cure + 0.1
      else
            flux(1) = 0
      end if
C
      statev(noel+1) = cure
C                    
      return
      end

RE: Required Counter for each Element

Hi,
1. What ABAQUS version do you use ? I am (still) using v6.5
and the HETVAL interface looks different:

SUBROUTINE HETVAL(CMNAME,TEMP,TIME,DTIME,STATEV,FLUX, PREDEF,DPRED)

You should use (rather must use) the subroutine templates provided in the documentation, (i.e. ABAQUS  (Analysis) User's Manual- > User subroutines). I strongly recommend you to read the documentation part on user subroutines!!!.

Your HETVAL interface  is

Quote:


subroutine hetval(cmname,temp,time,dtime,svar,flux,predef,dpred)

There is no STATEV. Thus, the STATEV in the

Quote:


dimension temp(2),statev(97),predef(1),time(2),flux(2),dpred(1)
is different from the one in SDVINI.
If the interface is correct, then I suspect that SVAR plays the role of STATEV. You have to check if they refer to the same data. If they refer to the same data, then SVAR should be have the same size as STATEV.

2. I was not clear when I explained the usage of SDVINI.

The SDVINI and HETVAL are called for each material (integration point), and you should dimension the array size  for only 1 integration point, not for the entire model.

At each integration point you can use 'nstatv' state variables, which are stored in the STATEV vector. To put it this way,  each integration point has its own STATEV vector.

The number of state variable (=size of the STATEV vector)

For example if you need 2 state variables then nstatv will be passed to SDVINI as having the value 2. Thus, in SDVINI you will only have to deal with:
STATEV(1) and STATEV(2)

Very important: You need to define the number of state variables per integration point when you define the material properties by setting the DEPVAR  property.
(nstatv - i.e. the size of STATEV vector- will be equal to the number of state variables you set with the DEPVAR property)

Also, in order to have the user subroutin SDVINI called you have to add
*INITIAL CONDITIONS, TYPE=SOLUTION, USER

If you are not sure what values a certain variable takes or if a subroutine is called and when is called,  you can use:
write(6,*),"STATEVs values: ",STATEV(1),STATEV(2), "etc."  
->to write in the job_name.dat file
write(7,*),"bla bla"  
 ->to write in  the job_name.msg file

RE: Required Counter for each Element

(OP)
That reply cleared up a lot of confusion about STATEV, thanks again for your help.  I tried everything and it worked wonderfully.  As for using svar in HETVAL, it was indeed a typo, one that I believe I gained from looking at another person’s old subroutine.  I had it there for so long that I wouldn’t have noticed the obvious mistake.  Catching that is greatly appreciated.

RE: Required Counter for each Element

Hi sandness!

It is interesting to know about use of HETVAL in ABAQUS simulation work. I agree with you that use of counter is very good idea.

Let me say first that I myself quite new to this field. And I am also trying to do the same simulation - curing of composite with exothermic heat. I am wondering about a thing. Can you (anyone else) tell me what might be the value of the exothermic heat per unit mass (volume)? I think it evolves as a function of time and temperatuere?

Your kind answers will be highly appreciated.

RE: Required Counter for each Element

(OP)
     The amount of heat generated during curing depends on the type of polymer you’ll be modeling.  Ideally, this data can be obtained from the manufacturer or another reliable source.  However, this is not always the case and there are several methods that can be used to determine this quantity, depending on how much accuracy is required.  Having an exotherm generated from a DSC (Differential Scanning Calorimeter) will generate excellent data but can be quite expensive; an alternative method can be found in the ASTM standard D 2471, which may yield suitable values.  Once this data is obtained, it can then be fitted into a polymerization model, where you can obtain the curing rate and total amount of heat released.  

     For my curing model, I used the equations developed by Loos and Springer.  Their work dealt with the curing of prepreg and can be found in the Journal of Composite Materials during the 1980s.  I’m not sure whether these equations are suitable for your model, but it does give you a place to start.  If I misinterpreted your original question or you have further question, please let me know.

RE: Required Counter for each Element

Hei, Thank you for the info about Journal of Composite Materials. I have found very useful information from the journal.

I would like to see the complete subroutine structure (SDVINI+HETVAL) thats used in curing simulations. I would very much appreciate your effort in posting it on this site.

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members!


Resources