I have written a few user-defined MPC types that I am using in my ABAQUS model.

Two of these operate in the nodal mode, one operates in the degree-of-freedom mode.

It is quite easy to combine the two nodal type MPCs into a single subroutine, as follows:

[CODE] SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,LMPC,

* KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)

C

C CUSTOM NODAL MODE MULTI POINT CONSTRAINT

C

INCLUDE ABA_PARAM.INC

C

DIMENSION UE(MDOF),A(MDOF,MDOF,N),JDOF(MDOF,N),X(6,N),

* U(MAXDOF,N),UINIT(MAXDOF,N),TIME(2),TEMP(NT,N),

* FIELD(NF,NT,N),LTRAN(N),TRAN(3,3,N)

C

IF (JTYPE .EQ. 1) THEN

C

DATA H /2.000000e-03/

A(1,1,1) = 1.

A(2,2,1) = 1.

A(3,3,1) = 1.

A(1,1,2) = -1.

A(1,5,2) = H

A(2,2,2) = -1.

A(2,4,2) = H

A(3,3,2) = -1.

C

JDOF(1,1) = 1

JDOF(2,1) = 2

JDOF(3,1) = 3

JDOF(1,2) = 1

JDOF(2,2) = 2

JDOF(3,2) = 3

JDOF(4,2) = 4

JDOF(5,2) = 5

END IF

C

IF (JTYPE .EQ. 2) THEN

C

DATA H /2.000000e-03/

A(1,1,1) = 1.

A(2,2,1) = 1.

A(3,3,1) = 1.

A(1,1,2) = -1.

A(1,5,2) = -H

A(2,2,2) = -1.

A(2,4,2) = -H

A(3,3,2) = -1.

C

JDOF(1,1) = 1

JDOF(2,1) = 2

JDOF(3,1) = 3

JDOF(1,2) = 1

JDOF(2,2) = 2

JDOF(3,2) = 3

JDOF(4,2) = 4

JDOF(5,2) = 5

END IF

C

IF (JTYPE .EQ. 3) THEN

C

A(3,3,1) = 1.

A(3,3,2) = -1.

C

JDOF(3,1) = 3

JDOF(3,2) = 3

END IF

C

RETURN

END

[/CODE]

However, for the MPC that operates in the degree-of-freedom mode, the initial A and JDOF array declarations are different, as required by the manual. This will look as follows:

[CODE] SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,

* LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)

C

C CUSTOM MULTI POINT CONSTRAINT

C

INCLUDE ABA_PARAM.INC

C

DIMENSION A(N),JDOF(N),X(6,N),U(MAXDOF,N),UINIT(MAXDOF,N),

* TIME(2),TEMP(NT,N),FIELD(NF,NT,N),LTRAN(N),TRAN(3,3,N),

* A_2(MDOF,MDOF,N),JDOF_2(MDOF,N),UE(MDOF)

C

IF (JTYPE .EQ. 3) THEN

A(1) = 1.

A(2) = -1.

JDOF(1) = 3

JDOF(2) = 3

END IF

C

RETURN

END[/CODE]

Note that these two subroutines compile and work, separately. However, I would like to somehow combine them, as I need them both within the same analysis and I can only input a single MPC subroutine.

The challenge is that the in first MPC the A, JDOF arrays are of size A(N), JDOF(N), whereas in the second MPC they are A(MDOF,MDOF,N), JDOF(MFOD,N).

I havent found this issue anywhere else on the forum. The closest similarity is where someone would like to use two different user subroutines, e.g. UMAT and UEL, but clearly this is quite a distinct problem.

Your thoughts are much appreciated!