| Newsgroups |
gmane.comp.mathematics.abaqus.user |
| Message-ID |
<[email protected]> |
Dear All,
I have written a DLOAD subroutine which will read Pressure on a surface from an external file and run a direct implicit transient analysis. The pressure on the surface elements will be read from respective files for each time step. I have checked this on my computer in serial mode for 100 elements and 5 time steps and it works fine.This is the same in parallel mode too. However, when I increase the number of elements in the file to 1000 and put it on parallel the simulations does not work. It compiles fine and starts running but it only reads a few elements and halts. There are no error messages and the status shows running but it is not actually. The same is the situation when I put it on cluster with 16 CPUs. I am not able to understand what the problem could be. It has something got to reading these files in parallel and checking the element number and mapping the pressure for each time step.
I would really appreciate if someone could please help me or guide me regarding this.
My DLOAD sub routine is below.
SUBROUTINE DLOAD(P,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS,
1 JLTYP,SNAME)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION TIME(2),COORDS(3)
CHARACTER*80 SNAME
PARAMETER (PLOAD1=1000)
CHARACTER PRES*80
INTEGER :: SUCCESS
INTEGER :: K, L, M, ELNO, T, F, I, NN ! K is for the element number,L is word P and M is for pressure value
REAL :: PLOAD
CHARACTER (len=100) :: pname
CHARACTER (len=30) :: loadfile
DO I=1,5 ! NUMBER OF INCREMENTS
IF (KINC.EQ.I) THEN
WRITE (loadfile,'("output",I0,".inp")') I
pname="C:\Users\lakshmp1\L1000\"//loadfile
PRINT *,pname
NN=100+I
OPEN(UNIT=NN, FILE=pname, ACCESS='SEQUENTIAL', ACTION='READ')
T=1
DO T=1,1 ! skips the first line which is named as *DLOAD
READ(NN,*)
END DO
DO
READ(UNIT=NN, FMT='(A)', IOSTAT=SUCCESS, END=9)PRES
IF (SUCCESS.NE.0) EXIT
K=6
DO WHILE (PRES(K:K) .NE. ',')
K=K+1
END DO
READ(PRES(6:K-1), *) ELNO ! this variable stores the element number
PRINT *, ELNO
L=K+1
DO WHILE (PRES(L:L) .NE. ',')
L=L+1
END DO
M=L+1
DO WHILE (PRES(M:M) .NE. ' ')
M=M+1
END DO
READ(PRES(L+1:M-1), *) PLOAD ! this variable stores the pressure on that element
PRINT *, PLOAD
IF(NOEL.EQ.ELNO) THEN
P=PLOAD
PRINT *, 'PLOAD written'
END IF
END DO
9 CLOSE(NN)
END IF
END DO
RETURN
END
Thank You.
Arun