New Exgrid.f
Changes that I've made (soon will be committed) to Exgrid.f
EXGRID.f
—
Fortran source code,
49 KB (50460 bytes)
File contents
SUBROUTINE EXGRID(NEELEM,NLATNE,NQLIST,NQNLAT,NQS,NQSCNB,NQXI,
& NRLIST,NWQ,NXQ,XQ,YQ,STRING,ERROR,*)
C#### Subroutine: EXGRID
C### Description:
C### EXGRID creates an exelem file using grid point
C### connectivity where the nodes are created using
C### export points grid. Elements are exported as (2/4/8)
C### noded elements with linear basis functions.
C*** Written by Martin Buist, June 1998
C*** Adding FieldML - Greg Sands, Sept 2003
IMPLICIT NONE
INCLUDE 'mxch.inc'
INCLUDE 'b01.cmn'
INCLUDE 'call00.cmn'
INCLUDE 'cbdi02.cmn'
INCLUDE 'cbdi10.cmn'
INCLUDE 'file00.cmn'
INCLUDE 'geom00.cmn'
INCLUDE 'grid00.cmn'
INCLUDE 'loc00.cmn'
INCLUDE 'loc00.inc'
! Parameter List
INTEGER NEELEM(0:NE_R_M,0:NRM),NLATNE(NEQM+1),NQLIST(0:NQM),
& NQNLAT(NEQM*NQEM),NQS(NEQM),NQSCNB(NQSCM),NQXI(0:NIM,NQSCM),
& NRLIST(0:NRM),NWQ(8,0:NQM,NAM),NXQ(-NIM:NIM,0:4,0:NQM,NAM)
REAL*8 XQ(NJM,NQM),YQ(NYQM,NIQM,NAM,NXM)
CHARACTER ERROR*(*),STRING*(MXCH)
! Local Variables
INTEGER ELEMENT,FACE(24),IBEG,IBEG1,IBEG2,IBEG3,IBEG4,IEND,IEND1,
& IEND2,IEND3,IEND4,IFROMC,mq,mq2,mq3,mq4,mq5,mq6,mq7,mq8,N3CO,nb,
& ne,nf,ni,nj,nk,nl,nn,no_nrlist,nq,nqq,nr,NUMFIELDS,
& offset_elem,offset_node,offset_line,offset_face,SCHEME
REAL*8 SCALEFACTOR
CHARACTER BASES*54,CHAR1*5,CHAR2*5,CHAR3*5,CHAR4*20,ELEM_NAME*50,
& FILE*100
LOGICAL ACTIVATION_TIME,ALL_REGIONS,CBBREV,ELASTIC_TUBE,FACE1,
& FACE2,FACE3,FIELDML,LIBMESH,PATH,POTENTIAL,PRESSURE,RADIUS,
& SURFACE,VELOCITY,XI1XI2,XI1XI3,XI2XI3
DATA FACE/3,7,2,10,5,8,4,11,1,9,3,5,
& 6,12,7,8,2,4,1,6,10,11,9,12/
CALL ENTERS('EXGRID',*9999)
1 IF(CO(noco+1).EQ.'?') THEN
CALL STRING_TRIM(STRING,IBEG,IEND)
CALL STRING_TRIM(FILE00,IBEG1,IEND1)
WRITE(CHAR2,'(I5)') NQT
WRITE(CHAR3,'(I5)') NQT
CALL STRING_TRIM(CHAR2,IBEG2,IEND2)
CALL STRING_TRIM(CHAR3,IBEG3,IEND3)
CHAR4=CHAR2(IBEG2:IEND2)//'..'//CHAR3(IBEG3:IEND3)
CALL STRING_TRIM(CHAR4,IBEG4,IEND4)
C---------------------------------------------------------------------
C#### Command: FEM export grid<;FILENAME[default]>
C### Description:
C### This command calculates linear elements between grid points
C### and outputs the information in an exelem file to be used
C### along with an exnode file generated from export points in
C### Cmgui.
C### Parameter: <as NAME[0...0]>
C### Name the field.
C### Parameter: <fieldml>
C### Export as a FieldML file.
C### Parameter: <offset_elem OFFSET[0]>
C#### Add OFFSET to element numbers.
C### Parameter: <offset_node OFFSET[offset_elem]>
C### Add OFFSET to node numbers
C### Parameter: <offset_line OFFSET[offset_elem]>
C#### Add OFFSET to line numbers.
C### Parameter: <offset_face OFFSET[offset_elem]>
C#### Add OFFSET to face numbers.
C### Parameter: <region (#s/all)[1]>
C### Specify the regions.
C### Parameter: <surface>
C### In 3D only make bilinear surface elements, not trilinear
C### volume elements
C### Parameter: <activation_time>
C### Export the activation time field for activation problems
C### Parameter: <potential>
C### Export the potential field for activation problems
C### Parameter: <pressure>
C### Export the pressure field for coronary problems
C### Parameter: <radius>
C### Export the radius field
C### Parameter: <velocity>
C### Export the velocity field for coronary problems
C### Parameter: <path>
C### Export the path field for coronary problems
C### Parameter: <libmesh>
C### Only export highest-order elements for libmesh
OP_STRING(1)=STRING(1:IEND)
& //'<;FILENAME['//FILE00(IBEG1:IEND1)//']>'
OP_STRING(2)=BLANK(1:15)//'<as NAME['//CHAR4(IBEG4:IEND4)//']>'
OP_STRING(3)=BLANK(1:15)//'<fieldml>'
OP_STRING(4)=BLANK(1:15)//'<offset_elem OFFSET[0]>'
OP_STRING(5)=BLANK(1:15)//'<offset_node OFFSET[offset_elem]>'
OP_STRING(6)=BLANK(1:15)//'<offset_line OFFSET[offset_elem]>'
OP_STRING(7)=BLANK(1:15)//'<offset_face OFFSET[offset_elem]>'
OP_STRING(8)=BLANK(1:15)//'<region #[1]>'
OP_STRING(9)=BLANK(1:15)//'<surface>'
OP_STRING(10)=BLANK(1:15)//'<activation_time>'
OP_STRING(11)=BLANK(1:15)//'<potential>'
OP_STRING(12)=BLANK(1:15)//'<pressure>'
OP_STRING(13)=BLANK(1:15)//'<radius>'
OP_STRING(14)=BLANK(1:15)//'<velocity>'
OP_STRING(15)=BLANK(1:15)//'<path>'
OP_STRING(16)=BLANK(1:15)//'<libmesh>'
CALL WRITES(IOH1,OP_STRING,ERROR,*9999)
C---------------------------------------------------------------------
ELSE IF(CO(noco+1).EQ.'??') THEN
CALL DOCUM('fe26','doc','EXGRID',ERROR,*9999)
ELSE
CALL ASSERT(USE_GRID.EQ.1,' Set USE_GRID to 1 in ippara',
& ERROR,*9999)
CALL ASSERT(CALL_GRID,' Must define grid first',ERROR,*9999)
CALL PARSE_REGIONS(NRLIST,noco,NTCO,CO,ALL_REGIONS,ERROR,*9999)
IF(CBBREV(CO,'FIELDML',1,noco+1,NTCO,N3CO)) THEN
CALL ASSERT(USE_LAT.EQ.1,'FieldML export only coded for '
& //'lattice-based grids',ERROR,*9999)
FIELDML=.TRUE.
ELSE
FIELDML=.FALSE.
ENDIF
IF(CBBREV(CO,'ACTIVATION_TIME',3,noco+1,NTCO,N3CO)) THEN
ACTIVATION_TIME=.TRUE.
ELSE
ACTIVATION_TIME=.FALSE.
ENDIF
IF(CBBREV(CO,'POTENTIAL',3,noco+1,NTCO,N3CO)) THEN
POTENTIAL=.TRUE.
ELSE
POTENTIAL=.FALSE.
ENDIF
IF(CBBREV(CO,'PRESSURE',3,noco+1,NTCO,N3CO)) THEN
PRESSURE=.TRUE.
ELSE
PRESSURE=.FALSE.
ENDIF
IF(CBBREV(CO,'RADIUS',3,noco+1,NTCO,N3CO)) THEN
RADIUS=.TRUE.
ELSE
RADIUS=.FALSE.
ENDIF
IF(CBBREV(CO,'VELOCITY',3,noco+1,NTCO,N3CO)) THEN
VELOCITY=.TRUE.
ELSE
VELOCITY=.FALSE.
ENDIF
IF(CBBREV(CO,'PATH',3,noco+1,NTCO,N3CO)) THEN
PATH=.TRUE.
ELSE
PATH=.FALSE.
ENDIF
C PM 26-JUL-01
IF(CBBREV(CO,'ELASTIC_TUBE',3,noco+1,NTCO,N3CO)) THEN
ELASTIC_TUBE=.TRUE.
ELSE
ELASTIC_TUBE=.FALSE.
ENDIF
IF(CBBREV(CO,'OFFSET_ELEM',8,noco+1,NTCO,N3CO)) THEN
offset_elem=IFROMC(CO(N3CO+1))
ELSE
offset_elem=0
ENDIF
IF(CBBREV(CO,'OFFSET_NODE',8,noco+1,NTCO,N3CO)) THEN
offset_node=IFROMC(CO(N3CO+1))
ELSE
offset_node=offset_elem
ENDIF
IF(CBBREV(CO,'OFFSET_LINE',8,noco+1,NTCO,N3CO)) THEN
offset_line=IFROMC(CO(N3CO+1))
ELSE
offset_line=offset_elem
ENDIF
IF(CBBREV(CO,'OFFSET_FACE',8,noco+1,NTCO,N3CO)) THEN
offset_face=IFROMC(CO(N3CO+1))
ELSE
offset_face=offset_elem
ENDIF
IF(CBBREV(CO,'SURFACE',3,noco+1,NTCO,N3CO)) THEN
SURFACE=.TRUE.
ELSE
SURFACE=.FALSE.
ENDIF
IF(CBBREV(CO,'LIBMESH',3,noco+1,NTCO,N3CO)) THEN
LIBMESH=.TRUE.
ELSE
LIBMESH=.FALSE.
ENDIF
IF(CBBREV(CO,'AS',1,noco+1,NTCO,N3CO)) THEN
CALL STRING_TRIM(CO(N3CO+1),IBEG1,IEND1)
ELEM_NAME=CO(N3CO+1)(IBEG1:IEND1)
ELSE
WRITE(CHAR1,'(I5)') offset_node+1
WRITE(CHAR2,'(I5)') offset_node+NQT
CALL STRING_TRIM(CHAR1,IBEG1,IEND1)
CALL STRING_TRIM(CHAR2,IBEG2,IEND2)
ELEM_NAME=CHAR1(IBEG1:IEND1)//'..'//CHAR2(IBEG2:IEND2)
ENDIF
CALL CHECKF(1,noco,NTCOQU,CO,COQU,FILE,STRING,*1)
IF(FIELDML) THEN
CALL STRING_TRIM(FILE,IBEG,IEND)
CALL OPENF(IFILE,'DISK',FILE(IBEG:IEND)//'.fml','NEW',
& 'SEQUEN','FORMATTED',132,ERROR,*9999)
WRITE(IFILE,'(''<?xml version="1.0" '
& //'encoding="iso-8859-1"?>'')')
WRITE(IFILE,'(''<!-- Generated by Cmiss(cm) -->'')')
WRITE(IFILE,'(''<fieldml xmlns:fieldml='
& //'"http://www.physiome.org.nz/fieldml/0.1#"'
& //' xmlns="http://www.physiome.org.nz/fieldml/0.1#">'')')
CALL EXGRID_FIELDML(NLATNE,NQNLAT,NQS,NQSCNB,NQXI,NRLIST,
& offset_elem,offset_node,XQ,YQ,
& ACTIVATION_TIME,ELASTIC_TUBE,PATH,POTENTIAL,PRESSURE,RADIUS,
& VELOCITY,ERROR,*9999)
WRITE(IFILE,'(''</fieldml>'')')
CALL CLOSEF(IFILE,ERROR,*9999)
ELSEIF(NQT.GT.0) THEN !grid points defined
CALL STRING_TRIM(FILE,IBEG,IEND)
CALL OPENF(IFILE,'DISK',FILE(IBEG:IEND)//'.exelem','NEW',
& 'SEQUEN','FORMATTED',132,ERROR,*9999)
CALL STRING_TRIM(ELEM_NAME,IBEG,IEND)
WRITE(IFILE,'( '' Group name: '',A)') ELEM_NAME(IBEG:IEND)
DO no_nrlist=1,NRLIST(0)
nr=NRLIST(no_nrlist)
SCHEME=NQS(NEELEM(1,nr))
nb=NQSCNB(SCHEME)
IF(NQXI(0,SCHEME).EQ.1) THEN
WRITE(BASES,'(A)') 'l.Lagrange'
CALL STRING_TRIM(BASES,IBEG,IEND)
WRITE(IFILE,'( '' Shape. Dimension=1'' )')
WRITE(IFILE,'( '' #Scale factor sets= 1'')')
WRITE(IFILE,'(3X,A,'', #Scale factors='',I2)')
& BASES(IBEG:IEND),NNT(nb)
WRITE(IFILE,'( '' #Nodes='',I2)') NNT(nb)
NUMFIELDS=1
IF(ACTIVATION_TIME) NUMFIELDS=NUMFIELDS+1
IF(POTENTIAL) NUMFIELDS=NUMFIELDS+1
IF(PRESSURE) NUMFIELDS=NUMFIELDS+1
IF(RADIUS) NUMFIELDS=NUMFIELDS+1
IF(VELOCITY) NUMFIELDS=NUMFIELDS+1
IF(PATH) NUMFIELDS=NUMFIELDS+1
C PM 26-JUL-01
IF(ELASTIC_TUBE) NUMFIELDS=4
CALL ASSERT(NUMFIELDS.LT.10,' >>Too many fields',
& ERROR,*9999) !fields written into I1
WRITE(IFILE,'(1X,''#Fields='',I1)') NUMFIELDS
WRITE(IFILE,'(1X,''1) coordinates, coordinate, '
& //'rectangular cartesian, #Components='',I1)')
& NJ_LOC(NJL_GEOM,0,nr)
DO nj=1,NJ_LOC(NJL_GEOM,0,nr)
IF(nj.EQ.1) THEN
WRITE(CHAR1,'(A)') 'x'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSE IF(nj.EQ.2) THEN
WRITE(CHAR1,'(A)') 'y'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSE IF(nj.EQ.3) THEN
WRITE(CHAR1,'(A)') 'z'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSE
CALL ASSERT(.FALSE.,' Incorrect number on njs',
& ERROR,*9999)
ENDIF
WRITE(IFILE,'(3X,A,''. '',A,'', no modify, '
& //'standard node based.'')') CHAR1(IBEG2:IEND2),
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
ENDDO
NUMFIELDS=2
IF(ACTIVATION_TIME) THEN
WRITE(IFILE,'(1X,I1,'') activation_time, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''activation_time. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(POTENTIAL) THEN
WRITE(IFILE,'(1X,I1,'') potential, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''potential. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(PRESSURE) THEN
WRITE(IFILE,'(1X,I1,'') pressure, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''pressure. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(RADIUS) THEN
WRITE(IFILE,'(1X,I1,'') radius, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''radius. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(VELOCITY) THEN
WRITE(IFILE,'(1X,I1,'') velocity, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''velocity. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(PATH) THEN
WRITE(IFILE,'(1X,I1,'') path, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''path. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
C PM 26-JUL-01 : flow in elastic tube
IF(ELASTIC_TUBE) THEN
WRITE(IFILE,'(1X,I1,'') pressure, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''pressure. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
WRITE(IFILE,'(1X,I1,'') radius, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS+1
WRITE(IFILE,'(3X,''radius. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
WRITE(IFILE,'(1X,I1,'') velocity, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS+2
WRITE(IFILE,'(3X,''velocity. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
C NUMFIELDS=NUMFIELDS+1
ENDIF
ELEMENT=1
SCALEFACTOR=1.0d0
DO nq=NQR(1,nr),NQR(2,nr)
IF(NXQ(1,0,nq,1).GT.0) THEN
DO nqq=1,NXQ(1,0,nq,1)
mq=NXQ(1,nqq,nq,1)
WRITE(IFILE,'(1X,''Element: '',I6,'' 0 0'' )')
& ELEMENT+offset_elem
ELEMENT=ELEMENT+1
WRITE(IFILE,'(3X,''Nodes:'' )')
WRITE(IFILE,'(4X,2(1X,I6))') nq+offset_node,
& mq+offset_node
WRITE(IFILE,'(3X,''Scale factors:'' )')
WRITE(IFILE,'(4X,5(1X,E24.16))') SCALEFACTOR,
& SCALEFACTOR
ENDDO
ENDIF
ENDDO
ELSE IF(NQXI(0,SCHEME).EQ.2) THEN
NQLIST(0)=0
DO nq=NQR(1,nr),NQR(2,nr)
IF((NXQ(1,0,nq,1).GT.0).AND.(NXQ(2,0,nq,1).GT.0)) THEN
IF(NXQ(1,0,NXQ(2,1,nq,1),1).GT.0) THEN
NQLIST(0)=NQLIST(0)+1
NQLIST(NQLIST(0))=nq
ENDIF
ENDIF
ENDDO
CALL ASSERT(NQLIST(0).GT.0,' No grid elements created',
& ERROR,*9999)
IF( .NOT.LIBMESH ) THEN
WRITE(IFILE,'( '' Shape. Dimension=1'' )')
DO nl=1,NLE(nb)*NQLIST(0)
WRITE(IFILE,'( '' Element: 0 0 '',I6)')
& nl+offset_line
ENDDO
ENDIF
WRITE(BASES,'(A)') 'l.Lagrange*l.Lagrange'
CALL STRING_TRIM(BASES,IBEG,IEND)
WRITE(IFILE,'( '' Shape. Dimension=2'' )')
WRITE(IFILE,'( '' #Scale factor sets= 1'')')
WRITE(IFILE,'(3X,A,'', #Scale factors='',I2)')
& BASES(IBEG:IEND),NNT(nb)
WRITE(IFILE,'( '' #Nodes='',I2)') NNT(nb)
NUMFIELDS=1
IF(ACTIVATION_TIME) NUMFIELDS=NUMFIELDS+1
IF(POTENTIAL) NUMFIELDS=NUMFIELDS+1
IF(PRESSURE) NUMFIELDS=NUMFIELDS+1
IF(RADIUS) NUMFIELDS=NUMFIELDS+1
IF(VELOCITY) NUMFIELDS=NUMFIELDS+1
IF(PATH) NUMFIELDS=NUMFIELDS+1
CALL ASSERT(NUMFIELDS.LT.10,' >>Too many fields',
& ERROR,*9999) !fields written into I1
WRITE(IFILE,'(1X,''#Fields='',I1)') NUMFIELDS
WRITE(IFILE,'(1X,''1) coordinates, coordinate, '
& //'rectangular cartesian, #Components='',I1)')
& NJ_LOC(NJL_GEOM,0,nr)
DO nj=1,NJ_LOC(NJL_GEOM,0,nr)
IF(nj.EQ.1) THEN
WRITE(CHAR1,'(A)') 'x'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSEIF(nj.EQ.2) THEN
WRITE(CHAR1,'(A)') 'y'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSEIF(nj.EQ.3) THEN
WRITE(CHAR1,'(A)') 'z'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSE
CALL ASSERT(.FALSE.,' Incorrect number on njs',
& ERROR,*9999)
ENDIF
WRITE(IFILE,'(3X,A,''. '',A,'', no modify, '
& //'standard node based.'')') CHAR1(IBEG2:IEND2),
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
ENDDO
NUMFIELDS=2
IF(ACTIVATION_TIME) THEN
WRITE(IFILE,'(1X,I1,'') activation_time, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''activation_time. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(POTENTIAL) THEN
WRITE(IFILE,'(1X,I1,'') potential, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''potential. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(PRESSURE) THEN
WRITE(IFILE,'(1X,I1,'') pressure, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''pressure. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(RADIUS) THEN
WRITE(IFILE,'(1X,I1,'') radius, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''radius. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(VELOCITY) THEN
WRITE(IFILE,'(1X,I1,'') velocity, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''velocity. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(PATH) THEN
WRITE(IFILE,'(1X,I1,'') path, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''path. '',A,'', no '
& //'modify, standard node based.'')') BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
ELEMENT=1
SCALEFACTOR=1.0d0
DO nq=1,NQLIST(0)
mq=NQLIST(nq)
mq2=NXQ(1,1,mq,1)
mq3=NXQ(2,1,mq,1)
mq4=NXQ(1,1,NXQ(2,1,mq,1),1)
WRITE(IFILE,'(1X,''Element: '',I6,'' 0 0'' )')
& ELEMENT+offset_elem
WRITE(IFILE,'(3X,''Faces:'' )')
DO nl=1,NLE(nb)
WRITE(IFILE,'(3X,''0 0 '',I6)')
& nl+(NLE(nb)*(ELEMENT-1))+offset_line
ENDDO
WRITE(IFILE,'(3X,''Nodes:'' )')
WRITE(IFILE,'(4X,4(1X,I6))') mq+offset_node,
& mq2+offset_node,mq3+offset_node,mq4+offset_node
WRITE(IFILE,'(3X,''Scale factors:'' )')
WRITE(IFILE,'(4X,5(1X,E24.16))') SCALEFACTOR,
& SCALEFACTOR,SCALEFACTOR,SCALEFACTOR
ELEMENT=ELEMENT+1
ENDDO
ELSEIF(NQXI(0,SCHEME).EQ.3) THEN
IF(SURFACE) THEN
NQLIST(0)=0
DO nq=NQR(1,nr),NQR(2,nr)
IF(NWQ(1,nq,1).NE.0) THEN
IF((NXQ(1,0,nq,1).GT.0).AND.(NXQ(2,0,nq,1).GT.0))
& THEN
IF(NXQ(1,0,NXQ(2,1,nq,1),1).GT.0) THEN
IF((NWQ(1,NXQ(1,1,nq,1),1).NE.0).AND.
& (NWQ(1,NXQ(2,1,nq,1),1).NE.0).AND.
& (NWQ(1,NXQ(1,1,NXQ(2,1,nq,1),1),1).NE.0)) THEN
NQLIST(0)=NQLIST(0)+1
NQLIST(NQLIST(0))=nq
ENDIF
ENDIF
ENDIF
IF((NXQ(1,0,nq,1).GT.0).AND.(NXQ(3,0,nq,1).GT.0))
& THEN
IF(NXQ(1,0,NXQ(3,1,nq,1),1).GT.0) THEN
IF((NWQ(1,NXQ(1,1,nq,1),1).NE.0).AND.
& (NWQ(1,NXQ(3,1,nq,1),1).NE.0).AND.
& (NWQ(1,NXQ(1,1,NXQ(3,1,nq,1),1),1).NE.0)) THEN
NQLIST(0)=NQLIST(0)+1
NQLIST(NQLIST(0))=nq
ENDIF
ENDIF
ENDIF
IF((NXQ(2,0,nq,1).GT.0).AND.(NXQ(3,0,nq,1).GT.0))
& THEN
IF(NXQ(2,0,NXQ(3,1,nq,1),1).GT.0) THEN
IF((NWQ(1,NXQ(2,1,nq,1),1).NE.0).AND.
& (NWQ(1,NXQ(3,1,nq,1),1).NE.0).AND.
& (NWQ(1,NXQ(2,1,NXQ(3,1,nq,1),1),1).NE.0)) THEN
NQLIST(0)=NQLIST(0)+1
NQLIST(NQLIST(0))=nq
ENDIF
ENDIF
ENDIF
ENDIF
ENDDO
CALL ASSERT(NQLIST(0).GT.0,' No grid elements created',
& ERROR,*9999)
WRITE(IFILE,'( '' Shape. Dimension=1'' )')
DO nl=1,4*NQLIST(0)
WRITE(IFILE,'( '' Element: 0 0 '',I6)')
& nl+offset_line
ENDDO
WRITE(BASES,'(A)') 'l.Lagrange*l.Lagrange'
CALL STRING_TRIM(BASES,IBEG,IEND)
WRITE(IFILE,'( '' Shape. Dimension=2'' )')
WRITE(IFILE,'( '' #Scale factor sets= 1'')')
WRITE(IFILE,'(3X,A,'', #Scale factors= 4'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'( '' #Nodes= 4'')')
NUMFIELDS=1
IF(ACTIVATION_TIME) NUMFIELDS=NUMFIELDS+1
IF(POTENTIAL) NUMFIELDS=NUMFIELDS+1
IF(PRESSURE) NUMFIELDS=NUMFIELDS+1
IF(RADIUS) NUMFIELDS=NUMFIELDS+1
IF(VELOCITY) NUMFIELDS=NUMFIELDS+1
IF(PATH) NUMFIELDS=NUMFIELDS+1
CALL ASSERT(NUMFIELDS.LT.10,' >>Too many fields',
& ERROR,*9999) !fields written into I1
WRITE(IFILE,'(1X,''#Fields='',I1)') NUMFIELDS
WRITE(IFILE,'(1X,''1) coordinates, coordinate, '
& //'rectangular cartesian, #Components='',I1)')
& NJ_LOC(NJL_GEOM,0,nr)
DO nj=1,NJ_LOC(NJL_GEOM,0,nr)
IF(nj.EQ.1) THEN
WRITE(CHAR1,'(A)') 'x'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSEIF(nj.EQ.2) THEN
WRITE(CHAR1,'(A)') 'y'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSEIF(nj.EQ.3) THEN
WRITE(CHAR1,'(A)') 'z'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSE
CALL ASSERT(.FALSE.,' Incorrect number on njs',
& ERROR,*9999)
ENDIF
WRITE(IFILE,'(3X,A,''. '',A,'', no modify, '
& //'standard node based.'')') CHAR1(IBEG2:IEND2),
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes= 4'')')
DO nn=1,4
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
ENDDO
NUMFIELDS=2
IF(ACTIVATION_TIME) THEN
WRITE(IFILE,'(1X,I1,'') activation_time, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''activation_time. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes= 4'')')
DO nn=1,4
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(POTENTIAL) THEN
WRITE(IFILE,'(1X,I1,'') potential, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''potential. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes= 4'')')
DO nn=1,4
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(PRESSURE) THEN
WRITE(IFILE,'(1X,I1,'') pressure, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''pressure. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes= 4'')')
DO nn=1,4
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(RADIUS) THEN
WRITE(IFILE,'(1X,I1,'') radius, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''radius. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes= 4'')')
DO nn=1,4
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(VELOCITY) THEN
WRITE(IFILE,'(1X,I1,'') velocity, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''velocity. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes= 4'')')
DO nn=1,4
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(PATH) THEN
WRITE(IFILE,'(1X,I1,'') path, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''path. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes= 4'')')
DO nn=1,4
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
ELEMENT=1
SCALEFACTOR=1.0d0
DO nq=1,NQLIST(0)
XI1XI2=.FALSE.
XI1XI3=.FALSE.
XI2XI3=.FALSE.
IF(NQLIST(nq-1).NE.NQLIST(nq)) THEN
FACE1=.FALSE.
FACE2=.FALSE.
FACE3=.FALSE.
ENDIF
mq=NQLIST(nq)
IF(NWQ(1,mq,1).NE.0) THEN
IF((NXQ(1,0,mq,1).GT.0).AND.(NXQ(2,0,mq,1).GT.0))
& THEN
IF(NXQ(1,0,NXQ(2,1,mq,1),1).GT.0) THEN
IF((NWQ(1,NXQ(1,1,mq,1),1).NE.0).AND.
& (NWQ(1,NXQ(2,1,mq,1),1).NE.0).AND.
& (NWQ(1,NXQ(1,1,NXQ(2,1,mq,1),1),1).NE.0)) THEN
IF(.NOT.FACE1) THEN
XI1XI2=.TRUE.
FACE1=.TRUE.
GOTO 100
ENDIF
ENDIF
ENDIF
ENDIF
IF((NXQ(1,0,mq,1).GT.0).AND.(NXQ(3,0,mq,1).GT.0))
& THEN
IF(NXQ(1,0,NXQ(3,1,mq,1),1).GT.0) THEN
IF((NWQ(1,NXQ(1,1,mq,1),1).NE.0).AND.
& (NWQ(1,NXQ(3,1,mq,1),1).NE.0).AND.
& (NWQ(1,NXQ(1,1,NXQ(3,1,mq,1),1),1).NE.0)) THEN
IF(.NOT.FACE2) THEN
XI1XI3=.TRUE.
FACE2=.TRUE.
GOTO 100
ENDIF
ENDIF
ENDIF
ENDIF
IF((NXQ(2,0,mq,1).GT.0).AND.(NXQ(3,0,mq,1).GT.0))
& THEN
IF(NXQ(2,0,NXQ(3,1,mq,1),1).GT.0) THEN
IF((NWQ(1,NXQ(2,1,mq,1),1).NE.0).AND.
& (NWQ(1,NXQ(3,1,mq,1),1).NE.0).AND.
& (NWQ(1,NXQ(2,1,NXQ(3,1,mq,1),1),1).NE.0)) THEN
IF(.NOT.FACE3) THEN
XI2XI3=.TRUE.
FACE3=.TRUE.
GOTO 100
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
100 IF(XI1XI2) THEN
mq2=NXQ(1,1,mq,1)
mq3=NXQ(2,1,mq,1)
mq4=NXQ(1,1,NXQ(2,1,mq,1),1)
ELSEIF(XI1XI3) THEN
mq2=NXQ(1,1,mq,1)
mq3=NXQ(3,1,mq,1)
mq4=NXQ(1,1,NXQ(3,1,mq,1),1)
ELSEIF(XI2XI3) THEN
mq2=NXQ(2,1,mq,1)
mq3=NXQ(3,1,mq,1)
mq4=NXQ(2,1,NXQ(3,1,mq,1),1)
ENDIF
WRITE(IFILE,'(1X,''Element: '',I6,'' 0 0'' )')
& ELEMENT+offset_elem
WRITE(IFILE,'(3X,''Faces:'' )')
DO nl=1,4
WRITE(IFILE,'(3X,''0 0 '',I6)')
& nl+(4*(ELEMENT-1))+offset_line
ENDDO
WRITE(IFILE,'(3X,''Nodes:'' )')
WRITE(IFILE,'(4X,4(1X,I6))') mq+offset_node,
& mq2+offset_node,mq3+offset_node,mq4+offset_node
WRITE(IFILE,'(3X,''Scale factors:'' )')
WRITE(IFILE,'(4X,5(1X,E24.16))') SCALEFACTOR,
& SCALEFACTOR,SCALEFACTOR,SCALEFACTOR
ELEMENT=ELEMENT+1
ENDDO
ELSE
NQLIST(0)=0
IF(USE_LAT.EQ.0) THEN
DO nq=NQR(1,nr),NQR(2,nr)
IF((NXQ(1,0,nq,1).GT.0).AND.(NXQ(2,0,nq,1).GT.0)
& .AND.(NXQ(3,0,nq,1).GT.0)) THEN
IF((NXQ(1,0,NXQ(2,1,nq,1),1).GT.0)
& .AND.(NXQ(1,0,NXQ(3,1,nq,1),1).GT.0)
& .AND.(NXQ(2,0,NXQ(3,1,nq,1),1).GT.0)) THEN
IF(NXQ(2,0,NXQ(1,1,NXQ(3,1,nq,1),1),1).GT.0)THEN
NQLIST(0)=NQLIST(0)+1
NQLIST(NQLIST(0))=nq
ENDIF
ENDIF
ENDIF
ENDDO
ELSE !Lattice-based grid
DO ne=1,NEQM
C*** Loop over subelements (if any)
DO nk=0,MAX(NQXI(3,SCHEME)-2,0)
DO nj=0,MAX(NQXI(2,SCHEME)-2,0)
DO ni=0,MAX(NQXI(1,SCHEME)-2,0)
NQLIST(0)=NQLIST(0)+1
NQLIST(NQLIST(0))=NLATNE(ne)+ni+
& nj*NQXI(1,SCHEME)+
& nk*NQXI(1,SCHEME)*NQXI(2,SCHEME)
ENDDO
ENDDO
ENDDO
ENDDO
ENDIF
CALL ASSERT(NQLIST(0).GT.0,' No grid elements created',
& ERROR,*9999)
IF( .NOT.LIBMESH ) THEN
WRITE(IFILE,'( '' Shape. Dimension=1'' )')
DO nl=1,NLE(nb)*NQLIST(0)
WRITE(IFILE,'( '' Element: 0 0 '',I6)')
& nl+offset_line
ENDDO
WRITE(IFILE,'( '' Shape. Dimension=2'' )')
DO nq=1,NQLIST(0)
DO nf=1,NFE(nb)
WRITE(IFILE,'( '' Element: 0 '',I6,'' 0'' )')
& nf+((nq-1)*NFE(nb))+offset_face
WRITE(IFILE,'( '' Faces:'' )')
WRITE(IFILE,'( '' 0 0 '',I6)')(FACE(1+4*(nf-1))+
& (NLE(nb)*(nq-1)))+offset_line
WRITE(IFILE,'( '' 0 0 '',I6)')(FACE(2+4*(nf-1))+
& (NLE(nb)*(nq-1)))+offset_line
WRITE(IFILE,'( '' 0 0 '',I6)')(FACE(3+4*(nf-1))+
& (NLE(nb)*(nq-1)))+offset_line
WRITE(IFILE,'( '' 0 0 '',I6)')(FACE(4+4*(nf-1))+
& (NLE(nb)*(nq-1)))+offset_line
ENDDO
ENDDO
ENDIF
WRITE(BASES,'(A)') 'l.Lagrange*l.Lagrange*l.Lagrange'
CALL STRING_TRIM(BASES,IBEG,IEND)
WRITE(IFILE,'( '' Shape. Dimension=3'' )')
WRITE(IFILE,'( '' #Scale factor sets= 1'')')
WRITE(IFILE,'(3X,A,'', #Scale factors='',I2)')
& BASES(IBEG:IEND),NNT(nb)
WRITE(IFILE,'( '' #Nodes='',I2)') NNT(nb)
NUMFIELDS=1
IF(ACTIVATION_TIME) NUMFIELDS=NUMFIELDS+1
IF(POTENTIAL) NUMFIELDS=NUMFIELDS+1
IF(PRESSURE) NUMFIELDS=NUMFIELDS+1
IF(RADIUS) NUMFIELDS=NUMFIELDS+1
IF(VELOCITY) NUMFIELDS=NUMFIELDS+1
IF(PATH) NUMFIELDS=NUMFIELDS+1
CALL ASSERT(NUMFIELDS.LT.10,' >>Too many fields',
& ERROR,*9999) !fields written into I1
WRITE(IFILE,'(1X,''#Fields='',I1)') NUMFIELDS
WRITE(IFILE,'(1X,''1) coordinates, coordinate, '
& //'rectangular cartesian, #Components='',I1)')
& NJ_LOC(NJL_GEOM,0,nr)
DO nj=1,NJ_LOC(NJL_GEOM,0,nr)
IF(nj.EQ.1) THEN
WRITE(CHAR1,'(A)') 'x'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSEIF(nj.EQ.2) THEN
WRITE(CHAR1,'(A)') 'y'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSEIF(nj.EQ.3) THEN
WRITE(CHAR1,'(A)') 'z'
CALL STRING_TRIM(CHAR1,IBEG2,IEND2)
ELSE
CALL ASSERT(.FALSE.,' Incorrect number on njs',
& ERROR,*9999)
ENDIF
WRITE(IFILE,'(3X,A,''. '',A,'', no modify, '
& //'standard node based.'')') CHAR1(IBEG2:IEND2),
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
ENDDO
NUMFIELDS=2
IF(ACTIVATION_TIME) THEN
WRITE(IFILE,'(1X,I1,'') activation_time, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''activation_time. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(POTENTIAL) THEN
WRITE(IFILE,'(1X,I1,'') potential, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''potential. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(PRESSURE) THEN
WRITE(IFILE,'(1X,I1,'') pressure, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''pressure. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(RADIUS) THEN
WRITE(IFILE,'(1X,I1,'') radius, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''radius. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(VELOCITY) THEN
WRITE(IFILE,'(1X,I1,'') velocity, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''velocity. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
IF(PATH) THEN
WRITE(IFILE,'(1X,I1,'') path, field, '
& //'rectangular cartesian, #Components=1'')')
& NUMFIELDS
WRITE(IFILE,'(3X,''path. '',A,'', no '
& //'modify, standard node based.'')')
& BASES(IBEG:IEND)
WRITE(IFILE,'(5X,''#Nodes='',I2)') NNT(nb)
DO nn=1,NNT(nb)
WRITE(IFILE,'(5X,I2,''. #Values=1'')') nn
WRITE(IFILE,'(7X,''Value indices: 1'')')
WRITE(IFILE,'(7X,''Scale factor indices: '',I3)') nn
ENDDO
NUMFIELDS=NUMFIELDS+1
ENDIF
ELEMENT=1
SCALEFACTOR=1.0d0
DO nq=1,NQLIST(0)
IF(USE_LAT.EQ.0.AND.(.NOT.LIBMESH)) THEN
mq=NQLIST(nq)
mq2=NXQ(1,1,mq,1)
mq3=NXQ(2,1,mq,1)
mq4=NXQ(1,1,NXQ(2,1,mq,1),1)
mq5=NXQ(3,1,mq,1)
mq6=NXQ(1,1,NXQ(3,1,mq,1),1)
mq7=NXQ(2,1,NXQ(3,1,mq,1),1)
mq8=NXQ(1,1,NXQ(2,1,NXQ(3,1,mq,1),1),1)
ELSEIF(USE_LAT.EQ.0.AND.LIBMESH) THEN
mq=NQLIST(nq)
mq2=NXQ(1,1,mq,1)
mq3=NXQ(1,1,NXQ(2,1,mq,1),1)
mq4=NXQ(2,1,mq,1)
mq5=NXQ(3,1,mq,1)
mq6=NXQ(1,1,NXQ(3,1,mq,1),1)
mq7=NXQ(1,1,NXQ(2,1,NXQ(3,1,mq,1),1),1)
mq8=NXQ(2,1,NXQ(3,1,mq,1),1)
ELSE !Lattice-based grid
mq=NQNLAT(NQLIST(nq))
mq2=NQNLAT(NQLIST(nq)+1)
mq3=NQNLAT(NQLIST(nq)+NQXI(1,SCHEME))
mq4=NQNLAT(NQLIST(nq)+1+NQXI(1,SCHEME))
mq5=NQNLAT(NQLIST(nq)+
& NQXI(1,SCHEME)*NQXI(2,SCHEME))
mq6=NQNLAT(NQLIST(nq)+1+
& NQXI(1,SCHEME)*NQXI(2,SCHEME))
mq7=NQNLAT(NQLIST(nq)+NQXI(1,SCHEME)+
& NQXI(1,SCHEME)*NQXI(2,SCHEME))
mq8=NQNLAT(NQLIST(nq)+1+NQXI(1,SCHEME)+
& NQXI(1,SCHEME)*NQXI(2,SCHEME))
ENDIF
WRITE(IFILE,'(1X,''Element: '',I6,'' 0 0'' )')
& ELEMENT+offset_elem
WRITE(IFILE,'(3X,''Faces:'' )')
DO nf=1,NFE(nb)
WRITE(IFILE,'(5X,''0 '',I6,'' 0'' )')
& nf+(NFE(nb)*(ELEMENT-1))+offset_face
ENDDO
WRITE(IFILE,'(3X,''Nodes:'' )')
WRITE(IFILE,'(4X,8(1X,I6))') mq+offset_node,
& mq2+offset_node,mq3+offset_node,mq4+offset_node,
& mq5+offset_node,mq6+offset_node,mq7+offset_node,
& mq8+offset_node
WRITE(IFILE,'(3X,''Scale factors:'' )')
WRITE(IFILE,'(4X,5(1X,E24.16))') SCALEFACTOR,
& SCALEFACTOR,SCALEFACTOR,SCALEFACTOR,SCALEFACTOR
WRITE(IFILE,'(2X,5(1X,E24.16))') SCALEFACTOR,
& SCALEFACTOR,SCALEFACTOR
ELEMENT=ELEMENT+1
ENDDO
ENDIF
ELSE
CALL ASSERT(.FALSE.,' Incorrect number of xi directions',
& ERROR,*9999)
ENDIF
ENDDO
CALL CLOSEF(IFILE,ERROR,*9999)
ENDIF
ENDIF
CALL EXITS('EXGRID')
RETURN
9999 CALL ERRORS('EXGRID',ERROR)
CALL EXITS('EXGRID')
RETURN 1
END
