Time-dependent element birth in additive manufacturing of WAAM process during layer generation

Hello everyone,

I am currently doing a process simulation for Wire and Arc Additive Manufacturing - at the moment still of a single layer. Therefore, I am coupling a transient thermal analysis with a transient structural analyis. Regarding the thermal simulation, I am using a moving Goldak heat source (a modified version of the downloadable Add-On Moving heat source, which uses a Gaussian heatsource by default). 

Since I want to model the material deposition as well, I want to make use of element birth techniques, which I want to implement via APDL commands.

The heat source gets applied within a single loadstep over the time period of 100s and consists of 100 substeps.

At first, I tried to implement a temperature-dependent element birth, which didn't work since I would need the temperature at every substep as a condition to decide whether the element gets activated or not. Thus after one substep is solved, the command has to be reentered again.(at least to my mind) Therefore, I want to implement a time-dependent element birth.

The problem I now encounter in my code is that I don't know whether parameters containing the element number get stored in the way I thought.

I hope you can understand my problem by looking at both the pictures as well as the attached APDL command file I wrote .

Regards, 

Philipp

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

Element Numbers of first row of Weld body

 

 General Model Overview (Baseplate and Weld)

 

Comments

  • edited January 11

    My APDL Command:

    ! ACTIVATE ONE ROW OF ELEMENTS AFTER TWO SUBSTEPS

     

    *DIM,COUNT,ARRAY,1,1,1

    *DIM,LOOP,ARRAY,1,1,1

    *DIM,EPTS,ARRAY,1,1,1 

     

    *DIM,E1,ARRAY,1,1,1

    *DIM,E2,ARRAY,1,1,1

    *DIM,E3,ARRAY,1,1,1

    *DIM,E4,ARRAY,1,1,1

    *DIM,E5,ARRAY,1,1,1

    *DIM,E6,ARRAY,1,1,1

     

    ! DEFINE INITIAL LOOP PARAMETERS

    *SET,COUNT,1

    *SET,EPTS,2          ! ELEMENT ROWS (OF WELD) SELECTED PER SUBSTEP

     

    ! DEFINE ELEMENT NUMBERS OF FIRST ROW

    *SET,E1,301 

    *SET,E2,351

    *SET,E3,401

    *SET,E4,500

    *SET,E5,550

    *SET,E6,600

     

    *GET,STEPTIME,ACTIVE,0,SOLU,DTIME              ! GET LOAD STEP SIZE (100s)

    *GET,STEPNUM,ACTIVE,0,SOLU,NCMSS             ! GET NUMBER OF SUBSTEPS(100x)

    *VOPER,INCR1,STEPTIME,DIV,STEPNUM            ! DEFINE START VALUE OF LOOP

    *VOPER,INCR2,INC1,MULT,EPTS                          ! DEFINE INCREMENT OF LOOP

     

    ! SELECT BODY (IN THIS CASE WELD)

    CMSEL,S,ELEM_TO_BIRTH_BODY,ELEM            ! COMPONENT NAME

    EKILL,ALL                                                                ! DEACTIVATE ALL ELEMENTS

     

    ! RESELECT INITIAL PREDEFINED ELEMENTS

    ESEL,R,ELEM,E1      !ELEMNUM: 301

    ESEL,R,ELEM,E2      !ELEMNUM: 351

    ESEL,R,ELEM,E3      !ELEMNUM: 401

    ESEL,R,ELEM,E4      !ELEMNUM: 500

    ESEL,R,ELEM,E5      !ELEMNUM: 550

    ESEL,R,ELEM,E6      !ELEMNUM: 600

    EALIVE,ALL

     

    *IF,COUNT,LT,100                                   ! IF COUNT FOR SUBSTEPNUMBER IS LOWER THAN 100

    *DO,LOOP,INCR1,STEPTIME,INCR2    ! DO LOOP FROM FIRST SUBSTEP UNTIL END OF LOADSTEP

                                                                    ! WITH AND ACTIVATE NEW ELEMENT ROW EVERY TWO SUBSTEPS

                                                                    ! BECAUSE LOAD STEP TIME IS 100s and ELEMENT NUMBER IN

                                                                    ! DIRECTION OF MOVING HEAT SOURCE IS 50

     

    *GET,ELEMLOCINC1,ELEM,E1,NXTH  ! FIND NEXT ADJACENT ELEMENT NUMBER, ELEMNENT NUMBER

                                                                    ! GOES UP WITH DIRECTION OF MOVING HEAT SOURCE

    ESEL

    EALIVE,ALL

    *SET,E1,ELEMLOCINC1                        ! STORE NEW ELEMENT NUMBER

    *GET,ELEMLOCINC2,ELEM,E2,NXTH

    ESEL

    EALIVE,ALL

    *SET,E2,ELEMLOCINC2

    *GET,ELEMLOCINC3,ELEM,E3,NXTH

    ESEL

    EALIVE,ALL

    *SET,E3,ELEMLOCINC3

     

    *GET,ELEMLOCINC4,ELEM,E4,NXTL  ! FIND NEXT ADJACENT ELEMENT NUMBER, ELEMNENT NUMBER

                                                                   ! GOES DOWN WITH DIRECTION OF MOVING HEAT SOURCE

    ESEL

    EALIVE,ALL

    *SET,E4,ELEMLOCINC4                       ! STORE NEW ELEMENT NUMBER

    *GET,ELEMLOCINC5,ELEM,E5,NXTL

    ESEL

    EALIVE,ALL

    *SET,E5,ELEMLOCINC5

    *GET,ELEMLOCIN6,ELEM,E6,NXTL

    ESEL

    EALIVE,ALL

    *SET,E6,ELEMLOCINC6

     

    *VOPER,COUNT,COUNT,ADD,INCR1   ! INCREASE COUNT

     

    *ENDDO

     

    *ELSEIF,COUNT,GT,100    ! IF COUNT OF SUBSTEPNUMBER IS GREATER THAN 100

    FINI

    /CONFIG,NOELDB,0

    /SOLU

    *ENDIF

     

  • Hello Phillip,

    I hope you found a solution for your problem.

    I am currently starting to simulate a WAAM process, and learning the program. Could you recommend me some good sources I can go through to understand how to simulate WAMM on Ansys?

    Any help would be appreciated.


    Greetings,

    Daniel

Sign In or Register to comment.