You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.0 KiB
Fortran

SUBROUTINE FORMGP
USE WINTERACTER
USE BLK1MOD
include 'd.inc'
CHARACTER*47 MESSAGE
DATA MESSAGE /'Enter Group Number'/
DATA ITIME/0/
! SWITCH TO GROUP ACTIVITY
IF(IQSW(1) .EQ. 1) IQSW(1)=2
IF(IQSW(2) .EQ. 1) IQSW(2)=2
! IF FIRST TIME ASK TO LOAD FILE OR SET GROUPS = 1
if(ITIME .EQ. 0) THEN
! ALLOCATE ARRAY SIZES
IF(.NOT. ALLOCATED(IGRPNUM)) THEN
ALLOCATE (IGRPNUM(25,MAXE),MAXENT(25))
CALL TOPAR
ENDIF
ISW=2
ITIME=1
ELSE
CALL TOPAR
ENDIF
! ASSIGN A NUMBER TO THE NEW GROUP
call wdialogload(IDD_GETINT)
ierr=infoerror(1)
CALL WDialogSelect(IDD_GETINT)
ierr=infoerror(1)
CALL WDialogPutString(IDF_STRING1,MESSAGE)
CALL WDialogPutInteger(IDF_INTEGER1,ISW)
CALL WDialogShow(-1,-1,0,Modal)
ierr=infoerror(1)
! Branch depending on type of message.
!
DO
IF (WInfoDialog(ExitButton) .EQ. IDOK) THEN
CALL WDialogGetInteger(IDF_INTEGER1,ISW)
GO TO 200
ENDIF
ENDDO
200 CONTINUE
CALL WMessageBox(YesNo,QuestionIcon,CommonOK,'Do you wish add these elements to the current group?'//&
CHAR(13)//' ','ADD ELEMENTS?')
! If answer 'No', start afresh
!
IF (WInfoDialog(4).EQ.2) then
! STORE GROUP NUMBERS STARTING AT 1
DO K=1,NEFL
IGRPNUM(ISW,K)=NEFLAG(K)
ENDDO
MAXENT(ISW)=NEFL
ELSE
!
! FOR EACH ELEMENT SEARCH FIRST IF NOT FOUND ADD TO THE END
DO K=1,NEFL
DO J=1,MAXENT(ISW)
IF(NEFLAG(K) .EQ. IGRPNUM(ISW,J)) GO TO 240
ENDDO
MAXENT(ISW)=MAXENT(ISW)+1
IGRPNUM(ISW,MAXENT(ISW))=NEFLAG(K)
240 CONTINUE
ENDDO
ENDIF
! REMOVE FROM OLD LIST
DO I=1,25
IF(I .NE. ISW) THEN
DO J=1,MAXENT(I)
DO K=1,NEFL
IF(NEFLAG(K) .EQ. IGRPNUM(I,J)) THEN
IGRPNUM(I,J)=0
GO TO 260
ENDIF
ENDDO
260 CONTINUE
ENDDO
JT=0
LIMIT=MAXENT(I)
J=0
270 J=J+1
275 IF(J+JT .LE. LIMIT) THEN
IF(IGRPNUM(I,J+JT) .EQ. 0) THEN
JT=JT+1
GO TO 275
ENDIF
IGRPNUM(I,J)=IGRPNUM(I,J+JT)
GO TO 270
ENDIF
DO J=MAXENT(I),MAXENT(I)+1-JT,-1
IGRPNUM(I,J)=0
ENDDO
MAXENT(I)=MAXENT(I)-JT
ENDIF
ENDDO
CALL TOSER
RETURN
END
SUBROUTINE TOSER
USE BLK1MOD
DO I=1,25
DO J=1,MAXENT(I)
IGRPSER(IGRPNUM(I,J))=I
ENDDO
ENDDO
RETURN
END
SUBROUTINE TOPAR
USE BLK1MOD
MAXENT=0
IGRPNUM=0
DO K=1,NE
I=IGRPSER(K)
MAXENT(I)=MAXENT(I)+1
IGRPNUM(I,MAXENT(I))=K
ENDDO
RETURN
END