c

C file-name               GXUTIL.HTM             190614
c
      SUBROUTINE GXRDQ1
C     SUBROUTINE GXRDQ1 is activated by setting READQ1=T in the Q1 file.
C     Data to be read must be placed between an upper line consisting of
C     word READQ1_BEGIN and a lower line consisting of the word
C     READQ1_END, starting in column numbered 3 or higher.
C
      INCLUDE 'farray'
      INCLUDE 'satear'
      INCLUDE 'grdloc'
      INCLUDE 'satgrd'
      PARAMETER ( NLG =100, NIG =200, NRG =200, NCG =100 )
      COMMON/LGRND/LG(NLG)/IGRND/IG(NIG)/RGRND/RG(NRG)/CGRND/CG(NCG)
      LOGICAL LG
      CHARACTER*4 CG
      PARAMETER ( NLSG=100, NISG=100, NRSG=150, NCSG=10 )
      INTEGER ISGD(NIG)
      REAL RSGD(NRG)
      LOGICAL LSGD(NLG)
      CHARACTER*4 CSGD(NCG)
      COMMON/LBFC/STORSA(6),STORWD(6),LBFCSP
      LOGICAL STORSA,STORWD,LBFCSP
      COMMON/LUNITS/LUNIT(60)
C
      LOGICAL WORDIS,RDWERR
      COMMON/WORDC1/WD(20),INLINE
      COMMON /NAMFN/NAMFUN,NAMSUB
      common/linsav/linesav
      CHARACTER*6 NAMFUN,NAMSUB
 
      CHARACTER WD*20,INLINE*120,LINESAV*68
      EQUIVALENCE (ISGD(1),ISG1), (RSGD(1),RSG1), (LSGD(1),LSG1),
     1            (CSGD(1),CSG1)
C
      NAMSUB = 'GXRDQ1'
      CALL OPENQ1('READQ1_BEGIN',IERR)
      IF(IERR.EQ.0) THEN
        CALL WRYT40('Q1 opened for reading of data           ')
        CALL WRITBL
        CALL WRIT40('>>> Data read in from the Q1 file    <<<')
        CALL WRITBL
    4   CALL RDLNQ1('READQ1_END',IERR)
        IF(IERR.EQ.0) THEN
          WRITE(LUNIT(14),*) LINESAV
          CALL PUT_LINE(linesav,.TRUE.)
C.... Integers
          IF(WORDIS(1,'LSWEEP')) LSWEEP=IRDZZZ(2)
          IF(WORDIS(1,'LSTEP'))  LSTEP=IRDZZZ(2)
          IF(WORDIS(1,'ISOLX'))  ISOLX=IRDZZZ(2)
          IF(WORDIS(1,'ISOLY'))  ISOLY=IRDZZZ(2)
          IF(WORDIS(1,'ISOLZ'))  ISOLZ=IRDZZZ(2)
          IF(WORDIS(1,'ISOLBK')) ISOLBK=IRDZZZ(2)
          IF(WORDIS(1,'LITER'))  LITER(IRDZZZ(2))=IRDZZZ(3)
          IF(WORDIS(1,'ITERMS')) ITERMS(IRDZZZ(2))=IRDZZZ(3)
          IF(WORDIS(1,'ISLN'))   ISLN(IRDZZZ(2))=IRDZZZ(3)
          IF(WORDIS(1,'IPRN'))   IPRN(IRDZZZ(2))=IRDZZZ(3)
          IF(WORDIS(1,'IDAT'))   IDAT(IRDZZZ(2))=IRDZZZ(3)
          IF(WORDIS(1,'IG'))     IG(IRDZZZ(2))=IRDZZZ(3)
          IF(WORDIS(1,'ISG'))    ISGD(IRDZZZ(2))=IRDZZZ(3)
          IF(WORDIS(1,'IDEB'))   IDEB(IRDZZZ(2))=IRDZZZ(3)
C.... Reals
          IF(WORDIS(1,'CMU'))    CMU=RRDZZZ(2)
          IF(WORDIS(1,'CD'))     CD =RRDZZZ(2)
          IF(WORDIS(1,'C1E'))    C1E=RRDZZZ(2)
          IF(WORDIS(1,'C2E'))    C2E=RRDZZZ(2)
          IF(WORDIS(1,'AK'))     AK= RRDZZZ(2)
          IF(WORDIS(1,'EWAL'))   EWAL=RRDZZZ(2)
          IF(WORDIS(1,'RHO1'))   RHO1=RRDZZZ(2)
          IF(WORDIS(1,'RHO2'))   RHO2=RRDZZZ(2)
          IF(WORDIS(1,'ENUL'))   ENUL=RRDZZZ(2)
          IF(WORDIS(1,'ENUT'))   ENUT=RRDZZZ(2)
          IF(WORDIS(1,'CFIPS'))  CFIPS=RRDZZZ(2)
          IF(WORDIS(1,'CMDOT'))  CMDOT=RRDZZZ(2)
          IF(WORDIS(1,'DTFALS')) DTFALS(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'PRNDTL')) PRNDTL(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'PRT'))    PRT(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'ENDIT'))  ENDIT(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'FIINIT')) FIINIT(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'PHINT'))  PHINT(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'CINT'))   CINT(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'VARMIN')) VARMIN(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'VARMAX')) VARMAX(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'RESREF')) RESREF(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'RDAT'))   RDAT(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'RDEB'))   RDEB(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'RG'))     RG(IRDZZZ(2))=RRDZZZ(3)
          IF(WORDIS(1,'RSG'))    RSGD(IRDZZZ(2))=RRDZZZ(3)
C.... Logicals
          IF(WORDIS(1,'STEADY')) STEADY=WORDIS(2,'T')
          IF(WORDIS(1,'CARTES')) CARTES=WORDIS(2,'T')
          IF(WORDIS(1,'NONORT')) NONORT=WORDIS(2,'T')
          IF(WORDIS(1,'DEBUG'))  DEBUG=WORDIS(2,'T')
          IF(WORDIS(1,'FLAG'))   FLAG=WORDIS(2,'T')
          IF(WORDIS(1,'DBGPHI')) DBGPHI(IRDZZZ(2))=WORDIS(3,'T')
          IF(WORDIS(1,'LDAT'))   LDAT(IRDZZZ(2))=WORDIS(3,'T')
          IF(WORDIS(1,'LDEB'))   LDEB(IRDZZZ(2))=WORDIS(3,'T')
          if(WORDIS(1,'LG'))     LG(IRDZZZ(2))=WORDIS(3,'T')
          IF(WORDIS(1,'LSG'))    LSGD(IRDZZZ(2))=WORDIS(3,'T')
          if(WORDIS(1,'STORSA')) STORSA(IRDZZZ(2))=WORDIS(3,'T')
          if(WORDIS(1,'STORWD')) STORWD(IRDZZZ(2))=WORDIS(3,'T')
C.... Characters
          IF(WORDIS(1,'NAME(U2)')) NAME(U2)=WD(2)
          IF(WORDIS(1,'NAME'))   NAME(IRDZZZ(2))=WD(3)
          IF(WORDIS(1,'CG'))     CG(IRDZZZ(2))=WD(3)
          IF(WORDIS(1,'CSG'))    CSGD(IRDZZZ(2))=WD(3)
          IF(RDWERR())
     1       CALL WRYT40('!!! GREX3 failed to read data from Q1 !!')
          GO TO 4
        ENDIF
      ENDIF
      IF(.NOT.NULLPR) THEN
        CALL WRITBL
        CALL WRIT40('>>> End of data read in from Q1      <<<')
        CALL WRITST
        CALL WRITBL
        NAMSUB = 'gxrdq1'
      ENDIF
      END
c
      SUBROUTINE GXCOSA(L0VAL,L0XH,L0XV,GH0,GV0,NY)
      INCLUDE 'farray'
      INCLUDE 'grdear'
      COMMON /NAMFN/NAMFUN,NAMSUB
      CHARACTER*6 NAMFUN,NAMSUB
C... compute cos(alfa) and store in VAL
      LOGICAL LVRCEL
      NAMSUB='GXCOSA'
      IPV=0
      DO IX=IXF,IXL
        IADD=NY*(IX-1)
        DO IY=IYF,IYL
          IPV=IPV+1
          I=IY+IADD
          IF(LVRCEL(IPV)) THEN
            GDV = F(L0XV+I)-GV0
            GDH = F(L0XH+I)-GH0
            GCOSA=GDH/SQRT(GDV*GDV+GDH*GDH+1.E-10)
            F(L0VAL+I)=GCOSA
          ELSE
            F(L0VAL+I)=0.
          ENDIF
        ENDDO
      ENDDO
      NAMSUB='gxcosa'
      END
c
      SUBROUTINE GXSINA(L0VAL,L0XH,L0XV,GH0,GV0,NY)
      INCLUDE 'farray'
      INCLUDE 'grdear'
      COMMON /NAMFN/NAMFUN,NAMSUB
      CHARACTER*6 NAMFUN,NAMSUB
C... compute cos(alfa) and store in VAL
      LOGICAL LVRCEL
      NAMSUB='GXSINA'
      IPV=0
      DO 1 IX=IXF,IXL
        IADD=NY*(IX-1)
      DO 1 IY=IYF,IYL
        IPV=IPV+1
        I=IY+IADD
        IF(LVRCEL(IPV)) THEN
          GDV = F(L0XV+I)-GV0
          GDH = F(L0XH+I)-GH0
          GSINA=GDV/SQRT(GDV*GDV+GDH*GDH+1.E-10)
          F(L0VAL+I)=GSINA
        ELSE
          F(L0VAL+I)=0.
        ENDIF
1     CONTINUE
      NAMSUB='gxsina'
      END
c
      SUBROUTINE GXIPOL
      INCLUDE 'farray'
      INCLUDE 'grdloc'
      INCLUDE 'satgrd'
      INCLUDE 'grdear'
      COMMON/IDATA/NX,NY,IFL2(118)
      COMMON/RDA8/FIINIT(150)
      COMMON/NAMFN/NAMFUN,NAMSUB
      CHARACTER*6 NAMFUN,NAMSUB
C
      NAMSUB = 'GXIPOL'
c.... u's are set to fiinit(v)*sin(xu+fiinit(u)+pi/2)
c.... v's are set to fiinit(v)*cos(xg+fiinit(u))
      L0VAL=L0F(VAL)
      IF(INDVAR.EQ.U1 .OR. INDVAR.EQ.U2) THEN
        L0X=L0F(XU2D)
        ANGADD=FIINIT(INDVAR) + 3.14159*0.5
        FACTOR=FIINIT(INDVAR+2)
      ELSEIF(INDVAR.EQ.V1. OR. INDVAR.EQ.V2) THEN
        L0X=L0F(XG2D)
        ANGADD=FIINIT(INDVAR-2)
        FACTOR=FIINIT(INDVAR)
      ENDIF
      DO 10 I=1,NX*NY
        F(L0VAL+I)=FACTOR * COS(ANGADD+F(L0X+I))
   10 CONTINUE
      NAMSUB = 'gxipol'
      END
c