Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations waross on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Changing elasticity with soil depth using UFIELD 1

Status
Not open for further replies.

ZeroCommaZero

Structural
Sep 2, 2013
5
0
0
US
Hi all, this is my first post to eng-tips. I've read all the forums and documentation on UFIELD and have scoured the web, and have so far been unable to get the UFIELD subroutine to work correctly in Abaqus/CAE. My goal is to model the elastic movement of a bridge footing using soil data taken from boreholes. To simplify the model, I'm modeling a simple soil column that has varying cohesion, friction angle and elasticity with depth. I'm using Abaqus/CAE 6.10 on Windows, and the Fortran and C++ compilers are working without any errors. I have specified varying elasticity with depth as follows:

*Material, name="Caleb Soil"
*Density
0.00019095,
*Elastic, dependencies=1
1160., 0.3, , 0.
1160., 0.3, , 24.
290., 0.3, , 72.
290., 0.3, ,132.
20000., 0.3, ,192.
20000., 0.3, ,252.
20000., 0.3, ,312.
580., 0.3, ,372.
580., 0.3, ,432.
435., 0.3, ,480.

My UFIELD subroutine is as follows, and compiles without errors:
SUBROUTINE UFIELD(FIELD,KFIELD,NSECPT,KSTEP,KINC,TIME,NODE,
1 COORDS,TEMP,DTEMP)
INCLUDE 'ABA_PARAM.INC'
DIMENSION FIELD(NSECPT),TIME(2),COORDS(3),TEMP(NSECPT),
1 DTEMP(NSECPT)
KFIELD=1
C
C Set the Field variable to be equal to the depth
C
FIELD(1)=COORDS(2)
RETURN
END

I have set local coordinates to the section assignment with the Y-axis pointing down at the top of the soil column, so the values of elasticity vary with increasing depth (the coordinates 0 are set to the top of the soil column, 480 is the bottom). Note: the three values of elastic modulus of 20000 were used so I could see if the strain actually varied throughout the column in the visualization module (the strain would be significantly smaller where Young's modulus was higher). I'm using a constant traction load of 20 applied to the top of the soil field, with BC's correctly restraining the soil on the sides and bottom.

I connected the UFIELD subroutine under the "General" tab under the "Edit Job" dialog box. I can run the job without any errors, however, the modulus of elasticity is constant throughout the column, set as the value of my first Young's modulus (1160). I have attached my simplified input file (I made the mesh large for verification).

Any ideas why the elasticity isn't varying through the depth, despite the UFIELD subroutine? I think I'm close to solving this, but am missing a little piece of information that I haven't been able to track down.

Much appreciated,

Caleb
 
Replies continue below

Recommended for you

Hi Caleb,

Header of your UFIELD subroutine is wrong.
Correct definition of the subroutine is:
Code:
       SUBROUTINE UFIELD(FIELD,KFIELD,NSECPT,KSTEP,KINC,TIME,NODE,
     1 COORDS,TEMP,DTEMP,NFIELD)
C
       INCLUDE 'ABA_PARAM.INC'
C
       DIMENSION FIELD(NSECPT,NFIELD), TIME(2), COORDS(3),
     1 TEMP(NSECPT), DTEMP(NSECPT)

As you can see FIELD variable is two dimension array. In your example it's one dimension array.
NFIELD variable is missing in your dummy argument list.
Please cross-check your definition with Abaqus documentation: Abaqus User Subroutines Reference Manual, 1.1.31 UFIELD

Code:
KFIELD=1
KFIELD variable is paased for information. You can tested it but you must not set any new value.

Code:
FIELD(1)=COORDS(2)
We know now that FIELD is two dimension value so the line should be:
Code:
FIELD(NSECPT,NFIELD)=COORDS(2)

the Fortran and C++ compilers are working without any errors
It is only becaouse you never used the subroutine during Abaqus execution.
To do it you have to use
Code:
*FIELD, USER
nset_with_nodes_where_UFIELD_should_act
in your inputdeck.

the modulus of elasticity is constant throughout the column, set as the value of my first Young's modulus (1160).
How do you check it? Do you have any output to display it with Abaqus/Viewer.
I am asking since I do not know method how to check field variable values for nodes.
I know I can use FV output for elements when I use USDFLD subroutine to set field variables for integration points.

Regards,
Bartosz
 
Much appreciated Bartosz- this gave me the information to solve the changing elasticity through depth. I could not view the variation of elasticity with depth directly- what I did was applied a constant stress throughout a column and observed how the strain varied through the profile. I have attached a screen grab of that shot for your reference. I have another question though, that I will include after this post.
 
 http://files.engineering.com/getfile.aspx?folder=c3700259-3083-4ca4-8922-187fcf047be2&file=Untitled.png
Here is my next question. Since I am modelling a concrete footing with wood piles in a soil mass, I have specified a yield criterion for the soil but I would like to specify a failure criteria for the wood as well.

The most applicable model I have found (so far) has been the Hashin damage criteria for composite materials. However, the built-in version in Abaqus/CAE is only for plane stress models, and my footing model must be in 3d for what my analysis requires. Following online threads, I found that Abaqus Answers provides a 3d Hashin subroutine, so I downloaded it (see attached). However, during the data check, the analysis exists with an error during compilation. The UFIELD subroutine will compile and work just fine, but when I try the VUMAT from Abaqus Answers it fails. I don't have any experience in Fortran so this is difficult for me to troubleshoot. Any idea why this subroutine fails during compilation?

Once it's able to compile, I'll just add it to the end of the UFIELD subroutine.

Thanks in advance for your help. Hopefully it's something simple to resolve.
 
 http://files.engineering.com/getfile.aspx?folder=2fcafc54-6d1b-414b-a731-4d003c4b8c13&file=Hashin_3d_VUMAT.for
Hi,

I did not run the subroutine but me guess is that you are using Abaqus/Standard,
since you play with UFIELD and the material subroutine (VUMAT) is for Abaqus/Explicit.

Since Abaqus/Standard and Abaqus/Explicit are completely different programs they are using different subroutines for the same purpose.
The name convention is that all Abaqus/Explicit subroutines start with V letter.
So you need UMAT subroutine not VUMAT for your purpose.

Unfortunately the conversion of subroutines is not easy.

Regards,
Bartosz
 
Hi again,

Thanks for your help so far, it's gotten me through quite a bit of snags. So I've switched over to an Explicit formulation to make use of the wood crushing subroutine- being a dynamic analysis of a bridge footing, it turns out that explicit might be more appropriate. I was able to model the wood crushing correctly (after extensive trial and error).

The latest problem is now I can't get the variation of modulus of elasticity with depth to work in the Explicit formulation. I call Field,user and specify the nodes, just like Abaqus/Standard, and use the VUFIELD subroutine, to no avail.

VUFIELD subroutine:
Taken straight from the Abaqus Documentation, the only line I added in the subroutine was FIELD(NBLOCK,NCOMP,NFIELD)=-COORDS(2,NBLOCK) where the soil varies with the y-axis, the global origin is at the top of the soil column (thus the negative sign on Coords), and the field variables are arranged as 0,24,74,... expressed as depth from surface. Any idea why the soil isn't varying with depth? Is it something to do with JNODEUID(NBLOCK)? Attached is the input file.

Thanks in advance,

Caleb
 
 http://files.engineering.com/getfile.aspx?folder=3a2b9449-2fe5-4990-bf92-283b7df8329d&file=explicitsoiltester6.inp
Hi Bartosz and Caleb

I would like to vary young's modulus with depth for a 3D block of soil. I was trying to follow the recommendations on this thread but my UFIELD sub-routine is not working. Is it possible to get some help from you?

Regards

Aliasger
 
This is my sub-routine UFIELD and relevant parts of the input file in my attempt to modify Young's Modulus with depth for a 3D block of soil. Model is 50 m in depth with vertical co-ordinate numbered from bottom up.

SUBROUTINE UFIELD(FIELD,KFIELD,NSECPT,KSTEP,KINC,TIME,NODE,
1 COORDS,TEMP,DTEMP,NFIELD)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION FIELD(NSECPT,NFIELD), TIME(2), COORDS(3),
1 TEMP(NSECPT), DTEMP(NSECPT)
C
FIELD(1,1)=COORDS(3)
RETURN
END

*Elastic, dependencies=1
20000., 0.3, , 0.
5000., 0.3, , 50.

*FIELD, USER,
_PickedSet9

_PickedSet9 is the node set for the entire model to which UFIELD is to apply. The following input processing error is generated ' ***ERROR: Problem when parsing keyword: FIELD Invalid parameter:_PickedSet9. The parameter may be misspelled, obsolete, or invalid.

Any assistance will be much appreciated.

Kind regards

Aliasger
 
Hi aliasgere,

To test if your UFIELD is working, apply a uniform vertical area load to the top of your soil field (no gravity or other loads), run the analysis, then observe how E (strain) varies through depth. See my post above on 22 Sep 13 20:05 and look at the attachment- that's what it should look like.
 
Status
Not open for further replies.
Back
Top