Porting continues.
authorilb@NIH.GOV <ilb@NIH.GOV@ba61647d-9d00-f842-95cd-605cb4296b96>
Mon, 18 Dec 2017 23:16:36 +0000 (23:16 +0000)
committerilb@NIH.GOV <ilb@NIH.GOV@ba61647d-9d00-f842-95cd-605cb4296b96>
Mon, 18 Dec 2017 23:16:36 +0000 (23:16 +0000)
git-svn-id: https://citdcbmipav.cit.nih.gov/repos-pub/mipav/trunk@15313 ba61647d-9d00-f842-95cd-605cb4296b96

mipav/src/gov/nih/mipav/model/algorithms/SymmsIntegralMapping.java

index 9be0122..7b4997a 100644 (file)
@@ -83,7 +83,7 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
        \r
        public SymmsIntegralMapping(ModelImage destImg, ModelImage srcImg, String FORTFL, boolean SYMTY,\r
                        boolean REFLN, double CENSY[], int NARCS, boolean NUMDER[], double STAPT[][],\r
-                       int PGM[]) {\r
+                       int PGM[], double RGM[], int PTX[]) {\r
            super(destImg, srcImg);\r
            this.FORTFL = FORTFL;\r
            this.SYMTY = SYMTY;\r
@@ -93,6 +93,8 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
            this.NUMDER = NUMDER;\r
            this.STAPT = STAPT;\r
            this.PGM = PGM;\r
+           this.RGM = RGM;\r
+           this.PTX = PTX;\r
        }\r
        \r
        public void runAlgorithm() {\r
@@ -201,8 +203,11 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
        //\r
        //     LOCAL VARIABLES\r
        //\r
-             int GMCO,IA,I,IER,J,L,ORDRG,ORDSG,SW,\r
+             int GMCO,IA,I,J,L,SW,\r
                  TXCO,TYPE;\r
+             int IER[] = new int[1];\r
+             int ORDRG[] = new int[1];\r
+             int ORDSG[] = new int[1];\r
              double ALPHA,PI,R1MACH,X,Y;\r
              //COMPLEX CENSY,RTUNI,U2\r
              double RTUNI[] = new double[2];\r
@@ -224,7 +229,6 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
              final String TABC = "     +";\r
              final int CHNL = 20;\r
              final int CHIN = 21;\r
-             int PTX[] = new int[2*MNARC];\r
              int NTX[] = new int[2*MNARC];\r
              //CHARACTER DEFN(MNARC*2)*72\r
              String DEFN[] = new String[2*MNARC];\r
@@ -251,25 +255,50 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
              else {\r
                SW=SW-6;\r
              }\r
-       \r
              \r
-       /*C**** WRITE THE SOURCE CODE FOR PARFUN\r
-       C\r
-             OPEN(CHNL,FILE=FORTFL)\r
-             CALL HEADER('PARFUN',REDD,CHNL)\r
-             IF (SYMTY) THEN\r
-               CALL SYINF1(ORDRG,ORDSG,RTUNI,U2,REFLN,CENSY,STAPT(1),\r
-            +              STAPT(NARCS+1),IER)\r
-               IF (IER.GT.0) GOTO 999\r
-               WRITE(*,'(/A,I3)') 'N O T E : THE ORDER OF THE SYMMETRY GROUP IS\r
-            +',ORDSG\r
-               IF (REFLN) THEN\r
-                  WRITE(*,*) '          ISYGP = ',-ORDSG\r
-               ELSE\r
-                  WRITE(*,*) '          ISYGP = ',ORDSG\r
-               ENDIF\r
-               CALL WRSYM1(NARCS,ORDRG,ORDSG,RTUNI,U2,CENSY,REFLN,.TRUE.,REDD,\r
-            +              CHNL)\r
+                 //**** SET UP THE EDIT DESCRIPTOR AND FORMAT SPECIFICATION FOR FLOATING \r
+                 //**** POINT OUTPUT\r
+               \r
+                 REDD="E"+WID[SW-1]+"."+SIG[SW-1]; \r
+                 FMT1="("+REDD+")";\r
+                 FMT2="(2"+REDD+")"; \r
+             \r
+             //**** WRITE THE SOURCE CODE FOR PARFUN\r
+             file = new File(fileDir + "FORTFL");\r
+             try {\r
+                 raFile = new RandomAccessFile(file, "rw");\r
+             }\r
+             catch (IOException e) {\r
+                 MipavUtil.displayError("IOException " + e + " on raFile = new RandomAccessFile(file, rw)");\r
+                 System.exit(-1);\r
+             }\r
+             // Necessary so that if this is an overwritten file there isn't any\r
+             // junk at the end\r
+             try {\r
+                 raFile.setLength(0);\r
+             }\r
+             catch (IOException e) {\r
+                 MipavUtil.displayError("IOException " + e + " on raFile.setLength(0)");\r
+                 System.exit(-1);  \r
+             }\r
+\r
+             //OPEN(CHNL,FILE=FORTFL)\r
+             HEADER("PARFUN",REDD,raFile);\r
+             /*if (SYMTY) {\r
+               SYINF1(ORDRG,ORDSG,RTUNI,U2,REFLN,CENSY,STAPT[0],\r
+                          STAPT[NARCS],IER);\r
+               if (IER[0] > 0) {\r
+                       WRTAIL(6,0,IER[0],null);\r
+                       return;\r
+               }\r
+               System.out.println("\nN O T E : THE ORDER OF THE SYMMETRY GROUP IS " + ORDSG);\r
+               if (REFLN) {\r
+                   System.out.println("          ISYGP = " + (-ORDSG[0]));     \r
+               }\r
+               else {\r
+                       System.out.println("          ISYGP = " + (ORDSG[0]));          \r
+               }\r
+               WRSYM1(NARCS,ORDRG[0],ORDSG[0],RTUNI,U2,CENSY,REFLN,true,REDD,CHNL,raFile);\r
                IF (REFLN) THEN\r
                  CH='TS'\r
                ELSE\r
@@ -278,10 +307,11 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
                CALL WRFUN1(NARCS,STAPT,ARCTY,PGM,RGM,PTX,NTX,DEFN,CHNL,\r
             +             'IB',CH,'ZETA  ',REDD)\r
                CALL WRSYM2(NARCS,ORDRG,CENSY,REFLN,CHNL)\r
-             ELSE\r
+             }\r
+             else {\r
                CALL WRFUN1(NARCS,STAPT,ARCTY,PGM,RGM,PTX,NTX,DEFN,CHNL,\r
             +             'IA','TT','PARFUN',REDD)\r
-             ENDIF\r
+             }\r
        C\r
              WRITE(CHNL,'(A1)') 'C'\r
              WRITE(CHNL,'(A9)') '      END'\r
@@ -314,6 +344,100 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
              CALL WRTAIL(6,0,IER)\r
        C*/\r
        } // public void PARGEN\r
+    private void HEADER(String TXT, String REDD, RandomAccessFile raFile) {\r
+\r
+    String TAB6="      ";\r
+\r
+    String LINE=TAB6+"COMPLEX FUNCTION "+TXT+"(IA,TT)";\r
+    try {\r
+    raFile.writeBytes(LINE);\r
+\r
+    LINE=TAB6+"IMPLICIT REAL(A-H,O-S),INTEGER(I-N),COMPLEX(T-Z)";\r
+    raFile.writeBytes(LINE);\r
+\r
+    raFile.writeBytes("      PARAMETER (PI="+Math.PI+",UI=(0.0,1.0))");\r
+    raFile.writeBytes("C");\r
+    }\r
+    catch (IOException e) {\r
+       MipavUtil.displayError("IOException " + e + " in HEADER");\r
+       System.exit(-1);\r
+    }\r
+\r
+    } // private void HEADER\r
+    \r
+    private void SYINF1(int ORDRG[],int ORDSG[],double RTUNI[], double U2[],boolean REFLN,\r
+               double Z0[], double Z1[], double Z2[], int IER[]) {\r
+    //COMPLEX RTUNI,U2,Z0,Z1,Z2\r
+\r
+//**** GIVEN Z0,THE CENTRE OF SYMMETRY, Z1 AND Z2, THE INITIAL AND FINAL\r
+//**** POINTS ON THE FUNDAMENTAL BOUNDARY SECTION, REFLN, WHICH IS TRUE\r
+//**** IF THE SYMMETRY GROUP HAS IMPROPER  ROTATIONAL ELEMENTS\r
+//**** (I.E. REFLECTIONAL SYMMETRIES), THIS ROUTINE COMPUTES \r
+//**** ORDRG - THE ORDER OF THE SUBGROUP OF PROPER ROTATIONS (THIS IS THE\r
+//****         ORDER OF THE SYMMETRY GROUP IF REFLN=.FALSE.)\r
+//**** ORDSG - THE ORDER OF THE FULL SYMMETRY GROUP,  EITHER ORDRG OR \r
+//****         2*ORDRG DEPENDING ON WHETHER REFLN IS .FALSE. OR .TRUE.\r
+//**** RTUNI - THE ROOT OF UNITY FROM WHICH THE PROPER ROTATIONAL SUBROUP\r
+//****         IS GENERATED\r
+//**** U2    - THE ADDITIONAL IN-PLANE ROTATION WHICH, WHEN COMBINED WITH\r
+//****         CONJUGATION, DEFINES THE IMPROPER ROTATION FOR THE CASE\r
+//****         REFLN=.TRUE.\r
+\r
+//     LOCAL VARIABLES\r
+\r
+    double ALPHA, PI,SQRTEPS;\r
+    //COMPLEX CT,U\r
+    double CT[] = new double[2];\r
+    double U[] = new double[2];\r
+    double cr[] = new double[1];\r
+    double ci[] = new double[1];\r
+\r
+    PI=Math.PI;\r
+    SQRTEPS=Math.sqrt(EPS);\r
+    CT[0]=Z2[0]-Z0[0];\r
+    CT[1] = Z2[1] - Z0[1];\r
+    double ABSCT = zabs(CT[0], CT[1]);\r
+    if (ABSCT < SQRTEPS) {\r
+      IER[0]=56;\r
+      return;\r
+    }\r
+    U[0]=CT[0]/ABSCT;\r
+    U[1]= CT[1]/ABSCT;\r
+    zmlt(U[0],U[1],U[0],U[1], cr, ci);\r
+    U2[0] = cr[0];\r
+    U2[1] = ci[0];\r
+\r
+    zmlt(Z1[0]-Z0[0],Z1[1]-Z0[1],U[0],-U[1],cr,ci);\r
+    CT[0] = cr[0];\r
+    CT[1] = ci[0];\r
+    ABSCT = zabs(CT[0],CT[1]);\r
+    if (ABSCT < SQRTEPS) {\r
+      IER[0]=57;\r
+      return;\r
+    }\r
+    ALPHA=Math.atan2(CT[1],CT[0]);\r
+    ALPHA=Math.abs(ALPHA);\r
+\r
+    if (REFLN) {\r
+      ORDRG[0]=(int)Math.round(PI/ALPHA);\r
+      ORDSG[0]=2*ORDRG[0];\r
+    }\r
+    else {\r
+      ORDRG[0]=2*(int)Math.round(PI/ALPHA);\r
+      ORDSG[0]=ORDRG[0];\r
+    }\r
+\r
+    ALPHA=2.0*PI/(double)(ORDRG[0]);\r
+    RTUNI[0] = Math.cos(ALPHA);\r
+    RTUNI[1] = Math.sin(ALPHA);\r
+\r
+    // NORMAL EXIT\r
+\r
+    IER[0]=0;\r
+    return;\r
+    } // private void SYINF1\r
+\r
+\r
        \r
       //COMPLEX FUNCTION PARFUN(I,T)\r
       //INTEGER I\r
@@ -362,7 +486,7 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
          String TXT = CPHEAD + MOD[I-1];\r
             \r
           if (CHNL == 0 || CHNL == 6) {\r
-                 System.out.println("\n\n      "+DOTS+"\n      "+TXT+"\n      "+DOTS+"\n");\r
+                 System.out.println("\n\n      "+DOTS+"\n      "+TXT+"\n      "+DOTS);\r
           }\r
           else {\r
                  try {\r
@@ -375,5 +499,443 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
           }\r
           return;\r
       } // private void WRHEAD\r
+      \r
+      private void WRTAIL(int I, int CHNL, int IER, RandomAccessFile raFile) {\r
+     \r
+//\r
+//**** WRITE A CLOSING MESSAGE FOR THE MAIN CONFPACK MODULES JAPHYC (I=1)\r
+//**** GQPHYC (I=2), JACANP (I=3), GQCANP (I=4), CNDPLT (I=5), THE PARA-\r
+//**** METRIC FUNCTION GENERATOR PARGEN (I=6), THE PARAMETRIC FUNCTION \r
+//**** TESTER TSTPLT (I=7) AND THE LEVEL CURVE ROUTINE LEVCUR (I=8).  IF \r
+//**** CHNL=0 THEN WRITE ON THE STANDARD OUTPUT CHANNEL, OTHERWISE WRITE \r
+//**** ON THE CHANNEL SPECIFIED BY CHNL.  THE TEXT OF THE MESSAGE IS \r
+//**** DETERMINED BY THE ERROR NUMBER IER VIA THE SUBROUTINE IERTXT.\r
+\r
+//     LOCAL VARIABLES\r
+     \r
+      String MOD[] = new String[]{"J A P H Y C :",       \r
+                      "G Q P H Y C :","J A C A N P :",\r
+                "G Q C A N P :","C N D P L T :","P A R G E N :",\r
+                "T S T P L T :","L E V C U R :"};\r
+     String GOOD = "  NORMAL EXIT";\r
+     String BAD= "  ABNORMAL EXIT";\r
+     String LINE = "__________________________________________________________________&";\r
+\r
+     String TXT, TXT2;\r
+     if (IER == 0) {\r
+        TXT=MOD[I-1]+GOOD;\r
+     }\r
+     else{\r
+        TXT=MOD[I-1]+BAD;\r
+     }\r
+     TXT2=IERTXT(IER);\r
+\r
+      if ((CHNL == 0) || (CHNL == 6)) {\r
+       System.out.println("\n\n      "+TXT);\r
+       System.out.println("      "+TXT2);\r
+        System.out.println(LINE);\r
+     }\r
+     else {\r
+       try {\r
+            raFile.writeBytes("\n\n      "+TXT+"\n");\r
+            raFile.writeBytes("      "+TXT2+"\n");\r
+            raFile.writeBytes(LINE+"\n");\r
+       }\r
+       catch(IOException e) {\r
+               MipavUtil.displayError("IOException " + e + " in WRTAIL");\r
+               System.exit(-1);\r
+       }\r
+     }\r
+     return;\r
+      }\r
+      \r
+      private String IERTXT(int IER) {\r
+         \r
+//**** SUPPLY ERROR MESSAGE TEXT FOR ERROR NUMBER IER\r
+      String result = null;\r
+      if (IER == 0) {\r
+          result = " ";\r
+      }\r
+      else if (IER == 1) {\r
+          result="PARAMETER IBNDS[0] IS TOO SMALL AT START OF JAPHYC";\r
+      }\r
+      else if (IER == 2) {\r
+          result = "PARAMETER IBNDS[1] IS TOO SMALL AT START OF JAPHYC";\r
+      }\r
+      else if (IER == 3) {\r
+          result = "NQPTS < 1 AT START OF JAPHYC";\r
+      }\r
+      else if (IER == 4) {\r
+          result="FAILURE TO CONVERGE IN EIGSYS; CAN''T SET UP BASIC QUADRATURE RULES";\r
+      }\r
+      else if (IER == 5) {\r
+          result="PARAMETER MNQPT IN IGNLVL MUST BE INCREASED TO AT LEAST NQPTS";\r
+      }\r
+      else if (IER == 6) {\r
+          result="FAILURE TO CONVERGE IN IMTQLH; CAN''T SET UP IGNORE LEVELS";\r
+      }\r
+      else if (IER == 7) {\r
+          result="FAILURE TO CONVERGE IN IMTQLH; CAN''T SET UP COLLOCATION POINTS";\r
+      }\r
+      else if (IER == 8) {\r
+          result="ARGUMENT MNEQN IS TOO SMALL AT START OF JAPHYC";\r
+      }\r
+      else if (IER == 9) {\r
+          result="PARAMETER IBNDS[3] IS TOO SMALL AT START OF JAPHYC";\r
+      }\r
+      else if (IER == 10) {\r
+          result="PARAMETER NMAX IN SUBIN7 MUST BE INCREASED TO AT LEAST 2*NQPTS";\r
+      }\r
+      else if (IER == 11) {\r
+          result="PARAMETER IBNDS[2] IS TOO SMALL AT START OF JAPHYC";\r
+      }\r
+      else if (IER == 12) {\r
+          result="PARAMETER NC IN DEJAC7 AND DELEG7 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 13) {\r
+          result="PARAMETER NR IN DEJAC7 AND DELEG7 MUST BE >= (NQPTS -1)";\r
+      }\r
+      else if (IER == 14) {\r
+          result="A CORNER ANGLE IS TOO SMALL; MAY CAUSE OVERFLOW IN GAMMA FUNCTION";\r
+      }\r
+      else if (IER == 15) {\r
+          result="SINGULAR COLLOCATION MATRIX";\r
+      }\r
+      else if (IER == 16) {\r
+          result="COLLOCATION MATRIX IS EFFECTIVELY SINGULAR";\r
+      }\r
+      else if (IER == 17) {\r
+          result="NUMBER OF SUBARCS EXCEEDS IBNDS[0] DURING REFINEMENT";\r
+      }\r
+      else if (IER == 18) {\r
+          result="NUMBER OF EQUATIONS EXCEEDS MNEQN DURING REFINEMENT";\r
+      }\r
+      else if (IER == 19) {\r
+          result="TOTAL NUMBER OF QUADRATURE PTS EXCEEDS IBNDS[3] DURING REFINEMENT";\r
+      }\r
+      else if (IER == 20) {\r
+          result="NUMBER OF QUADRATURE PANELS EXCEEDS IBNDS[2] DURING REFINEMENT";\r
+      }\r
+      else if (IER == 21) {\r
+          result="FAILURE TO CONVERGE IN IMTQLH; CAN''T SET UP TEST POINTS";\r
+      }\r
+      else if (IER == 22) {\r
+          result="ARGUMENT MQUPH OF GQPHYC MUST BE INCREASED";\r
+      }\r
+      else if (IER == 23) {\r
+          result="PARAMETER MNCOF IN POPQF1 MUST BE >= NQPTS";\r
+      }\r
+      else if (IER == 24) {\r
+          result="NUMBER OF QUADRATURE PANELS EXCEEDS MQIN1 IN GQPHYC";\r
+      }\r
+      else if (IER == 25) {\r
+          result="PARAMETER MNXI IN DEPPJ8 AND DEPPL8 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 26) {\r
+          result="PARAMETER MAXNZ IN DEPPJ9 AND DEPPL9 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 27) {\r
+          result="PARAMETER MXNQD IN PHTCA1 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 28) {\r
+          result="PARAMETER MXCOF IN PHTCA1 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 29) {\r
+          result="PARAMETER MQIN1 IN PHTCA1 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 30) {\r
+          result="PARAMETER MNDG IN JCFIM5 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 31) {\r
+          result="PARAMETER MNQD IN JCFIM5 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 32) {\r
+          result="ARGUMENT IBNDS[1] SUPPLIED TO JACANP MUST BE INCREASED";\r
+      }\r
+      else if (IER == 33) {\r
+          result="ARGUMENT IBNDS[0] SUPPLIED TO JACANP MUST BE INCREASED";\r
+      }\r
+      else if (IER == 34) {\r
+          result="FN HAS SAME SIGN AT INTERVAL ENDS IN BISNEW; CAN''T SOLVE BCF EQN";\r
+      }\r
+      else if (IER == 35) {\r
+          result="DERIVATIVE OF BCF IS ZERO IN BISNEW; CAN''T SOLVE BCF EQN";\r
+      }\r
+      else if (IER == 36) {\r
+          result="ELEMENT OF ARGUMENT ARRAY SVAL IN RHOFN IS +-1; CAN''T CONTINUE";\r
+      }\r
+      else if (IER == 37) {\r
+          result="PARAMETER MXNQD IN CINRAD MUST BE INCREASED";\r
+      }\r
+      else if (IER == 38) {\r
+          result="PARAMETER MXCOF IN CINRAD MUST BE INCREASED";\r
+      }\r
+      else if (IER == 39) {\r
+          result="CENTRE POINT IS PATHOLOGICALLY CLOSE TO BOUNDARY;CAN''T CONTINUE";\r
+      }\r
+      else if (IER == 40) {\r
+          result="PARAMETER MQIN1 IN CINRAD MUST BE INCREASED";\r
+      }\r
+      else if (IER == 41) {\r
+          result="ARGUMENT MQUCA OF GQCANP MUST BE INCREASED";\r
+      }\r
+      else if (IER == 42) {\r
+          result="PARAMETER MNCOF IN POPQG1 MUST BE >= NQPTS";\r
+      }\r
+      else if (IER == 43) {\r
+          result="NUMBER OF QUADRATURE PANELS EXCEEDS MQIN1 IN GQCANP";\r
+      }\r
+      else if (IER == 44) {\r
+          result="PARAMETER MNCOF IN BMPHC1 MUST BE >= NQPTS";\r
+      }\r
+      else if (IER == 45) {\r
+          result="ARGUMENTS IARC, PHYPT OF BMPHYC DON''T DEFINE A BOUNDARY POINT";\r
+      }\r
+      else if (IER == 46) {\r
+          result="PARAMETER MNCOF IN BMCAP1 MUST BE >= NQPTS";\r
+      }\r
+      else if (IER == 47) {\r
+          result="PARAMETER MXNQD IN CATPH4 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 48) {\r
+          result="PARAMETER MNCOF IN CATPH4 MUST BE >= NQPTS";\r
+      }\r
+      else if (IER == 49) {\r
+          result="PARAMETER MQIN1 IN CATPH4 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 50) {\r
+          result="PARAMETER MXCOF IN DIAGN3 MUST BE >= NQPTS";\r
+      }\r
+      else if (IER == 51) {\r
+          result="NON-ANALYTIC ARC DETECTED IN DIAGN3";\r
+      }\r
+      else if (IER == 52) {\r
+          result="PARAMETER MAXSA IN CNDPLT MUST BE INCREASED";\r
+      }\r
+      else if (IER == 53) {\r
+          result="OVERFLOW EXPECTED IN IGNLVL; A CORNER ANGLE IS TOO SMALL";\r
+      }\r
+      else if (IER == 54) {\r
+          result="PARAMETER MXCO IN AXION1 MUST BE INCREASED";\r
+      }\r
+      else if (IER == 55) {\r
+          result="NARCS ISN''T AN INTEGER MULTIPLE OF THE ORDER OF THE SYMMETRY GROUP";\r
+      }\r
+      else if (IER == 56) {\r
+          result="CENTRE OF SYMMETRY IS PATHOLOGICALLY CLOSE TO LAST POINT ON FBS";\r
+      }\r
+      else if (IER == 57) {\r
+          result="CENTRE OF SYMMETRY IS PATHOLOGICALLY CLOSE TO FIRST POINT ON FBS";\r
+      }\r
+      else if (IER == 58) {\r
+          result="NUMBER OF ARCS IS TOO BIG; INCREASE PARAMETER MNARC IN PARGEN";\r
+      }\r
+      else if (IER == 59) {\r
+          result="NUMBER OF ARCS IS TOO BIG; INCREASE PARAMETER MNARC IN TSTPLT";\r
+      }\r
+      else if (IER == 60) {\r
+          result="NON-ANALYTIC ARC (DPARFN=(0.,0.)) DETECTED IN TSTPLT";\r
+      }\r
+      else {\r
+          result="UNRECOGNIZED ERROR NUMBER IN IERTXT ROUTINE !!";\r
+      }\r
+      return result;\r
+}\r
+      \r
+      private void WRSYM1(int NARCS,int ORDRG,int ORDSG,double[] RTUNI,double[] U2,double[] CENSY,boolean REFLN,boolean PARFUN,\r
+                    String REDD,int CHNL, RandomAccessFile raFile) {\r
+                     //COMPLEX RTUNI,U2,CENSY\r
+               \r
+               //**** TO WRITE THE DIMENSION AND PARAMETER STATEMENTS AND THE CODE TO\r
+               //**** TO REDUCE A GIVEN ARC NUMBER TO ITS SYMMETRIC COUNTERPART ON THE\r
+               //**** FUNDAMENTAL BOUNDARY SECTION.\r
+               \r
+               //.......................................................................\r
+               //     AUTHOR: DAVID HOUGH, ETH, ZUERICH\r
+               //     LAST UPDATE: 4 AUG 1990\r
+               //.......................................................................C\r
+               //     LOCAL VARIABLES\r
+               \r
+               int I;\r
+               double R,A;\r
+               //COMPLEX ZT\r
+               double ZT[] = new double[2];\r
+               boolean NEEDC;\r
+               String FMT;\r
+               double cr[] = new double[1];\r
+               double ci[] = new double[1];\r
+               \r
+               FMT="(A12,"+REDD+",A1,"+REDD+",A2)";\r
+               \r
+               /*if (PARFUN) {\r
+                       NEEDC = ((CENSY[0] != 0.0) && (CENSY[1] != 0.0));\r
+                   if (NEEDC || REFLN) {\r
+                       raFile.writeBytes("      PARAMETER (\n");\r
+                       if (NEEDC && REFLN) {\r
+                           R=U2[0];\r
+                           A=U2[1];\r
+                           raFile.writeBytes("U2[0] = " + R + ";\n");\r
+                           raFile.writeBytes("U2[1] = " + A + ";\n");\r
+                           R=CENSY[0];\r
+                           A=CENSY[1];\r
+                           raFile.writeBytes("ZCEN[0] = " + R +";\n");\r
+                           raFile.writeBytes("ZCEN[1] = " + A + ";)\n");\r
+                       } // if (NEEDC && REFLN)\r
+                       else if (NEEDC && (!REFLN)) {\r
+                           R=CENSY[0];\r
+                           A=CENSY[1];\r
+                           raFile.writeBytes("ZCEN[0] = " + R + ";\n");\r
+                           raFile.writeBytes("ZCEN[1] = " + A + ";)\n");\r
+                       } // else if (NEEDC && (!REFLN)) \r
+                       else {\r
+                           R=U2[0];\r
+                           A=U2[1];\r
+                           raFile.writeBytes("U2[0] = " + R + ";\n");\r
+                           raFile.writeBytes("U2[1] = " + A + ";)\n");\r
+                       } // else\r
+                       raFile.writeBytes("//\n");\r
+                   } // if (NEEDC || REFLN)\r
+               }\r
+               else if (REFLN) {\r
+                   R=U2[0];\r
+                   A=U2[1];\r
+                   raFile.writeBytes("      PARAMETER (\n");\r
+                   raFile.writeBytes("U2[0] = " + R + ";\n");\r
+                   raFile.writeBytes("U2[1] = " + A + ";)\n");\r
+                   raFile.writeBytes("//\n");\r
+               }\r
+               \r
+               FMT="(A7,"+REDD+",A1,"+REDD+",A2)";\r
+               \r
+           if (ORDRG >= 2) {\r
+               raFile.writeBytes("double WW[] = new double["+(ORDRG-1)+"];");\r
+               ZT[0] = 1.0;\r
+               ZT[1] = 0.0;\r
+                   for (I=0; I < ORDRG-2; I++) {\r
+                       zmlt(ZT[0],ZT[1],RTUNI[0],RTUNI[1],cr,ci);\r
+                       ZT[0] = cr[0];\r
+                       ZT[1] = ci[0];\r
+                       raFile.writeBytes("WW["+I+"][0] = " + ZT[0] + "\n");\r
+                       raFile.writeBytes("WW["+I+"][1] = " + ZT[1] + "\n");\r
+                   }\r
+                   zmlt(ZT[0],ZT[1],RTUNI[0],RTUNI[1],cr,ci);\r
+                       ZT[0] = cr[0];\r
+                       ZT[1] = ci[0];\r
+                       raFile.writeBytes("WW["+I+"][0] = " + ZT[0] + "\n");\r
+                       raFile.writeBytes("WW["+I+"][1] = " + ZT[1] + ")\n");\r
+                       raFile.writeBytes("//\n");\r
+           } // if (ORDRG >= 2)\r
+           \r
+               if (ORDRG > 19) {\r
+                   System.out.println("\n");\r
+                   System.out.println("             ****WARNING****");\r
+                   System.out.println("MORE THAN 19 CONTINUTATION LINES HAVE BEEN WRITTEN");\r
+               }\r
+               \r
+               if (REFLN) {\r
+                         IF (ORDRG.GT.1) THEN\r
+                             IF (NARCS.GT.1) THEN\r
+                                 I=2*NARCS\r
+                                 WRITE(CHNL,'(A16,I3,A1)') '      IB=MOD(IA,',I,')'\r
+                                 WRITE(CHNL,'(A22,I3)') '      IF (IB.EQ.0) IB=',I\r
+                                 I=I+1\r
+                                 WRITE(CHNL,'(A16,I3,A6)') '      IF (IB.GT.',NARCS,')\r
+                    +THEN'\r
+                                 WRITE(CHNL,'(A13,I3,A3)') '          IB=',I,'-IB'\r
+                                 WRITE(CHNL,'(A23)') '          TS=-CONJG(TT)'\r
+                                 WRITE(CHNL,'(A10)') '      ELSE'\r
+                                 WRITE(CHNL,'(A15)') '          TS=TT'\r
+                                 WRITE(CHNL,'(A11)') '      ENDIF'\r
+                             ELSE\r
+                                 WRITE(CHNL,'(A30)') '      IF (MOD(IA,2).EQ.0) THEN'\r
+                                 WRITE(CHNL,'(A23)') '          TS=-CONJG(TT)'\r
+                                 WRITE(CHNL,'(A10)') '      ELSE'\r
+                                 WRITE(CHNL,'(A15)') '          TS=TT'\r
+                                 WRITE(CHNL,'(A11)') '      ENDIF'\r
+                             ENDIF\r
+                         ELSE\r
+                             IF (NARCS.GT.1) THEN\r
+                                 I=2*NARCS+1\r
+                                 WRITE(CHNL,'(A16,I3,A6)') '      IF (IA.GT.',NARCS,') \r
+                    +THEN'\r
+                                 WRITE(CHNL,'(A13,I3,A3)') '          IB=',I,'-IA'\r
+                                 WRITE(CHNL,'(A23)') '          TS=-CONJG(TT)'\r
+                                 WRITE(CHNL,'(A10)') '      ELSE'\r
+                                 WRITE(CHNL,'(A15)') '          IB=IA'\r
+                                 WRITE(CHNL,'(A15)') '          TS=TT'\r
+                                 WRITE(CHNL,'(A11)') '      ENDIF'\r
+                             ELSE\r
+                                 WRITE(CHNL,'(A23)') '      IF (IA.EQ.2) THEN'\r
+                                 WRITE(CHNL,'(A23)') '          TS=-CONJG(TT)'\r
+                                 WRITE(CHNL,'(A10)') '      ELSE'\r
+                                 WRITE(CHNL,'(A15)') '          TS=TT'\r
+                                 WRITE(CHNL,'(A11)') '      ENDIF'\r
+                             ENDIF\r
+                         ENDIF\r
+               } // if (REFLN)\r
+               else if (NARCS > 1) {\r
+                         WRITE(CHNL,'(A16,I3,A1)') '      IB=MOD(IA,',NARCS,')'\r
+                         WRITE(CHNL,'(A22,I3)') '      IF (IB.EQ.0) IB=',NARCS\r
+               }\r
+               C\r
+                     WRITE(CHNL,'(A1)') 'C'\r
+               C*/\r
+      }\r
+\r
+\r
+\r
+      \r
+      /**\r
+       * zabs computes the absolute value or magnitude of a double precision complex variable zr + j*zi.\r
+       * \r
+       * @param zr double\r
+       * @param zi double\r
+       * \r
+       * @return double\r
+       */\r
+      public double zabs(final double zr, final double zi) {\r
+          double u, v, q, s;\r
+          u = Math.abs(zr);\r
+          v = Math.abs(zi);\r
+          s = u + v;\r
+\r
+          // s * 1.0 makes an unnormalized underflow on CDC machines into a true\r
+          // floating zero\r
+          s = s * 1.0;\r
+\r
+          if (s == 0.0) {\r
+              return 0.0;\r
+          } else if (u > v) {\r
+              q = v / u;\r
+\r
+              return (u * Math.sqrt(1.0 + (q * q)));\r
+          } else {\r
+              q = u / v;\r
+\r
+              return (v * Math.sqrt(1.0 + (q * q)));\r
+          }\r
+      }\r
+      \r
+      /**\r
+       * complex multiply c = a * b.\r
+       * \r
+       * @param ar double\r
+       * @param ai double\r
+       * @param br double\r
+       * @param bi double\r
+       * @param cr double[]\r
+       * @param ci double[]\r
+       */\r
+      public void zmlt(final double ar, final double ai, final double br, final double bi, final double[] cr,\r
+              final double[] ci) {\r
+          double ca, cb;\r
+\r
+          ca = (ar * br) - (ai * bi);\r
+          cb = (ar * bi) + (ai * br);\r
+          cr[0] = ca;\r
+          ci[0] = cb;\r
+\r
+          return;\r
+      }\r
 \r
 }
\ No newline at end of file