VECFEM3 Reference Manual: vemconvert.html

    C*******************************************************************
    C**
    C**       v e m c o n v e r t
    C**
    C**  conversion between different mesh files formats
    C**
    C**   by L. Grosz                          Karlsruhe, Sept. 1994
    C**
    C*******************************************************************
    C**
          PROGRAM VEMEXM
    C**
    C**-----------------------------------------------------------------
    C**
          IMPLICIT NONE
          include 'bytes.h'
    C**
    C**-----------------------------------------------------------------
    C**
    C**    some parameters which may be chanced:
    C**
    C**   INPUT  = name of the input file. The file extension
    C**            specifies the data format:
    C**            xxx.unv - the mesh is read from the ideas
    C**                       universal file xxx.unv, see idevem.
    C**            xxx.neutral - the mesh is read from the PATRAN
    C**                           neutral file xxx.neutral, see
    C**                           patvem.
    C**            all other cases - the mesh is read from the
    C**                               vecfem input file data, see
    C**                               vemu02.
    C**   PRINT  = name of the output file for the printing of the
    C**            mesh. If the name has not the extension 'prt' the
    C**            printing is skipped.
    C**   IDEAS  = name of the output file for the ideas universal
    C**            file. If the name has not the extension 'unv' the
    C**            printing is skipped.
    C**   PATRAN = name of the output file for the PATRAN neutral
    C**            file. If the name has not the extension 'neutral'
    C**            the printing is skipped.
    C**   ISVAS  = name of the output files for the ISVAS input files.
    C**            If the name has not the extension 'isv' the
    C**            is skipped. Actual the files ISVAS//'.nodes'
    C**            and ISVAS//'.elements' are written.
    C**   STORAGE = total storage of process in Mbytes.
    C**   COMP6 = handling of Dirichlet conditions, see vempat,
    C**           patvem, vemide, idevem.
    C**   NK = if you want to handle more than six components, you
    C**        have to increase the number of components NK.
    C**
          INTEGER       STORAGE,COMP6,NK
          CHARACTER*80  INPUT,PRINT,IDEAS,PATRAN,ISVAS

          PARAMETER (INPUT='mesh.unv',
         &           PRINT='meshout.prt',
         &           IDEAS='meshout.unv',
         &           PATRAN='meshout.neutral',
         &           ISVAS=' ',
         &           STORAGE=10,
         &           COMP6=0,
         &           NK=6)
    C**
    C**-----------------------------------------------------------------
    C**
    C**   special parameters explained in mesh(3):
    C**
          INTEGER    MESH,GINFO,GINFO1,DINFO,DINFO1,LOUT,DIM
          PARAMETER (MESH  =310,
         &           DIM   =3,
         &           GINFO =30,
         &           GINFO1=23+2*NK,
         &           DINFO =GINFO+GINFO1*100,
         &           DINFO1=17,
         &           LOUT  =6)
    C**
    C**-----------------------------------------------------------------
    C**
    C**   the length of the array for the mesh are set:
    C**   it will happen, that these lengths are to small for
    C**   the given mesh. then you have to enter the correct lengths
    C**   prescribed by the program into this declaration.
    C**
          INTEGER       LNODN,LNOD,LNOPRM,LNEK,LRPARM,LIPARM,
         &              LDNOD,LIDPRM,LRDPRM,LIVEM,LBIG

          PARAMETER  (LNODN =1000,
         &            LNOD  =LNODN*DIM,
         &            LNOPRM=1,

         &            LNEK  =40000,
         &            LIPARM=1000,
         &            LRPARM=50,

         &            LDNOD =1500,
         &            LIDPRM=LDNOD/2,
         &            LRDPRM=LDNOD/2,

         &            LIVEM =MESH+DINFO+DINFO1*NK)
    C**
    C**-----------------------------------------------------------------
    C**
    C**   RBIG should be as large as possible: the available
    C**   storage STORAGE is reduced by all allocated array.
    C**   the remaining storage is reserved for RBIG.
    C**
          PARAMETER ( LBIG=(STORAGE * 1 000 000)/IREAL
         &               - (LNOD+LNOPRM+LRPARM+LRDPRM)
         &               - (LIVEM+LNODN+LNEK+LIPARM+LDNOD+LIDPRM)/RPI )
    C**
    C**-----------------------------------------------------------------
    C**
    C**      variables and arrays :
    C**      --------------------
    C**
          DOUBLE PRECISION  NOD(LNOD),NOPARM(LNOPRM),RPARM(LRPARM),
         &                  RDPARM(LRDPRM),RBIG(LBIG)

          INTEGER           IVEM(LIVEM),NODNUM(LNODN),NEK(LNEK),
         &                  IPARM(LIPARM),DNOD(LDNOD),IDPARM(LIDPRM),
         &                  IBIG(RPI*LBIG)
    C**
    C**-----------------------------------------------------------------
    C**
          CHARACTER*80      NAME
          INTEGER           MYPROC,INFO,OUTFLG
    C**
    C**-----------------------------------------------------------------
    C**
    C**  The equivalence of RBIG and IBIG is very important :
    C**
          EQUIVALENCE (RBIG,IBIG)
    C**
    C**-----------------------------------------------------------------
    C**
    C**   get task ids :
    C**
          NAME='a.out'
          CALL COMBGN(IVEM(200),MYPROC,LIVEM-203,IVEM(204),NAME,INFO)
          IF (INFO.NE.0) GOTO 9999
          IVEM(201)=MYPROC
          IVEM(202)=0
          IVEM(203)=IVEM(204)
    C**
    C**-----------------------------------------------------------------
    C**
    C**   a protocol is printed only on process 1 :
    C**
          IF (MYPROC.EQ.1) THEN
    	OUTFLG=1
          ELSE
    	OUTFLG=0
          ENDIF
    C**
    C**-----------------------------------------------------------------
    C**
    C**** the parameters are copied into IVEM :
    C**   -----------------------------------
    C**
          IVEM(1)=MESH
          IVEM(MESH+ 2)=NK
          IVEM(MESH+ 3)=DIM
          IF (MYPROC.EQ.1) OPEN(99,FILE=INPUT,STATUS= 'UNKNOWN',
         &                                               FORM='FORMATTED')
    C**
    C**-----------------------------------------------------------------
    C**
    C**** read a universal file :
    C**   ----------------------
    C**
          IF (INDEX(INPUT,'.unv').GT.0) THEN
             IVEM(120)=LOUT
             IVEM(121)=OUTFLG
             IVEM(122)=99
    	 IVEM(124)=COMP6
    	 IVEM(124)=0
             CALL IDEVEM (LIVEM,IVEM,LNEK,NEK,LRPARM,RPARM,LIPARM,IPARM ,
         &                LDNOD,DNOD,LRDPRM,RDPARM,LIDPRM,IDPARM,
         &                LNODN,NODNUM,LNOD,NOD,LNOPRM,NOPARM,
         &                LBIG,RBIG,IBIG)
    C**
    C**-----------------------------------------------------------------
    C**
    C**** read a neutral file :
    C**   --------------------
    C**
          ELSEIF (INDEX(INPUT,'.neutral').GT.0) THEN
             IVEM(120)=LOUT
             IVEM(121)=OUTFLG
             IVEM(122)=99
    	 IVEM(124)=COMP6
             CALL PATVEM (LIVEM,IVEM,LNEK,NEK,LRPARM,RPARM,LIPARM,IPARM ,
         &                LDNOD,DNOD,LRDPRM,RDPARM,LIDPRM,IDPARM,
         &                LNODN,NODNUM,LNOD,NOD,LNOPRM,NOPARM,
         &                LBIG,RBIG,IBIG)
          ELSE
    C**
    C**-----------------------------------------------------------------
    C**
    C**** read a vecfem input file :
    C**   ------------------------
    C**
             IVEM(27)=LOUT
             IVEM(28)=OUTFLG
             IVEM(29)=99
             CALL VEMU02 (LIVEM,IVEM,LNEK,NEK,LRPARM,RPARM,LIPARM,IPARM ,
         &                LDNOD,DNOD,LRDPRM,RDPARM,LIDPRM,IDPARM,
         &                LNODN,NODNUM,LNOD,NOD,LNOPRM,NOPARM,
         &                LBIG,RBIG,IBIG)
          ENDIF
          IF (IVEM(2).NE.0) GOTO 9999
          CLOSE (99)
    C**
    C**-----------------------------------------------------------------
    C**
    C**** distribute mesh :
    C**   ----------------
    C**
          IVEM(80)=LOUT
          IVEM(81)=OUTFLG
          IVEM(51)=5
          CALL VEMDIS (LIVEM,IVEM,LNEK,NEK,LRPARM,RPARM,LIPARM,IPARM ,
         &             LDNOD,DNOD,LRDPRM,RDPARM,LIDPRM,IDPARM,
         &             LNODN,NODNUM,LNOD,NOD,LNOPRM,NOPARM,
         &             LBIG,RBIG,IBIG)
          IF (IVEM(2).NE.0) GOTO 9999
    C**
    C**-----------------------------------------------------------------
    C**
    C**** print mesh :
    C**   -----------
    C**
          IF (INDEX(PRINT,'.prt').GT.1) THEN
             IF (MYPROC.EQ.1) OPEN(99,FILE=PRINT,STATUS= 'UNKNOWN',
         &                                               FORM='FORMATTED')
             IVEM(20)=99
             IVEM(21)=1111*OUTFLG
             IVEM(22)=2

             CALL VEMU01(LIVEM,IVEM,LNEK,NEK,LRPARM,RPARM,LIPARM,IPARM,
         &               LDNOD,DNOD,LRDPRM,RDPARM,LIDPRM,IDPARM,
         &               LNODN,NODNUM,LNOD,NOD,LNOPRM,NOPARM,
         &               LBIG,RBIG,IBIG)
             IF (IVEM(2).NE.0) GOTO 9999
    	 CLOSE (99)
          ENDIF
    C**
    C**-----------------------------------------------------------------
    C**
    C**** write ideas universal file :
    C**   --------------------------
    C**
          IF (INDEX(IDEAS,'.unv').GT.1) THEN
             IF (MYPROC.EQ.1) OPEN(99,FILE=IDEAS,STATUS= 'UNKNOWN',
         &                                               FORM='FORMATTED')
             IVEM(120)=LOUT
             IVEM(121)=OUTFLG
             IVEM(124)=COMP6
             IVEM(125)=99

             CALL VEMIDE(IDEAS,LIVEM,IVEM,LNEK,NEK,LRPARM,RPARM,LIPARM,
         &               IPARM,LDNOD,DNOD,LRDPRM,RDPARM,LIDPRM,IDPARM,
         &               LNODN,NODNUM,LNOD,NOD,LNOPRM,NOPARM,
         &               LBIG,RBIG,IBIG)
             IF (IVEM(2).NE.0) GOTO 9999
    	 CLOSE (99)
          ENDIF
    C**
    C**-----------------------------------------------------------------
    C**
    C**** write PATRAN neutral file :
    C**   --------------------------
    C**
          IF (INDEX(PATRAN,'.neutral').GT.1) THEN
             IF (MYPROC.EQ.1) OPEN(99,FILE=PATRAN,STATUS= 'UNKNOWN',
         &                                               FORM='FORMATTED')
             IVEM(120)=LOUT
             IVEM(121)=OUTFLG
             IVEM(124)=COMP6
             IVEM(125)=99

             CALL VEMPAT(PATRAN,LIVEM,IVEM,LNEK,NEK,LRPARM,RPARM,LIPARM,
         &               IPARM,LDNOD,DNOD,LRDPRM,RDPARM,LIDPRM,IDPARM,
         &               LNODN,NODNUM,LNOD,NOD,LNOPRM,NOPARM,
         &               LBIG,RBIG,IBIG)
             IF (IVEM(2).NE.0) GOTO 9999
    	 CLOSE (99)
          ENDIF
    C**
    C**-----------------------------------------------------------------
    C**
    C**** write ISVAS data files :
    C**   -----------------------
    C**
          IF (INDEX(ISVAS,'.isv').GT.1) THEN
    	 NAME=ISVAS
    	 NAME(INDEX(ISVAS,'.isv')+4:)='.nodes'
             IF (MYPROC.EQ.1) OPEN(98,FILE=NAME,FORM='FORMATTED')
    	 NAME(INDEX(ISVAS,'.isv')+4:)='.elements'
             IF (MYPROC.EQ.1) OPEN(99,FILE=NAME,FORM='FORMATTED')
             IVEM(120)=LOUT
             IVEM(121)=OUTFLG
             IVEM(125)=98
             IVEM(126)=99

             CALL VEMISV(ISVAS,LIVEM,IVEM,LNEK,NEK,LRPARM,RPARM,LIPARM,
         &               IPARM,LDNOD,DNOD,LRDPRM,RDPARM,LIDPRM,IDPARM,
         &               LNODN,NODNUM,LNOD,NOD,LNOPRM,NOPARM,
         &               LBIG,RBIG,IBIG)
             IF (IVEM(2).NE.0) GOTO 9999
    	 CLOSE (98)
    	 CLOSE (99)
          ENDIF
    C**
    C**-----------------------------------------------------------------
    C**
    C**** end of calculation
    C**   ------------------
    C**
    9999  CALL COMEND(IVEM(200),INFO)
          E    N    D