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

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

index 3bc2893..9be0122 100644 (file)
@@ -12,12 +12,87 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
        \r
        // EPS returns the distance from 1.0 to the next larger double-precision number, that is, eps = 2^-52.\r
     private double EPS;\r
+    // Filename to receive FORTRAN output code\r
+    private String FORTFL;\r
+    // Does the domain have any symmetry?\r
+    private boolean SYMTY;\r
+    // If SYMTY is true, are there any reflectional symmetries?\r
+    private boolean REFLN;\r
+    // If SYMTY is true, what are the coordinates of the center of symmetry?\r
+    private double CENSY[] = new double[2];\r
+    // If SYMTY is true, number of arcs on the fundamental boundary section\r
+    // If SYMTY is false, number of arcs on the boundary\r
+    // NARCS <= MNARC-1 = 99\r
+    private int NARCS;\r
+    // NUMDER is of length MNARC\r
+    // NUMDER is initially false\r
+    private boolean NUMDER[];\r
+    // ARCTY is of length MNARC\r
+    // Type of arc, 1 = LINE SEGMENT, 2 = CIRCULAR ARC SEGMENT, 3 = CARTESIAN PARAMETRIC FUNCTION\r
+    // 4 = POLAR FUNCTION\r
+    private int ARCTY[];\r
+    // STAPT is of length MNARC,2\r
+    // Initial point on line, initial point on circle, or initial point on curve\r
+    // IF (SYMTY) THEN\r
+    // WRITE(*,*) 'COORDINATES OF FINAL POINT ON THIS ARC?'\r
+    //STAPT[NARCS]=CMPLX(FINAL X point, FINAL Y point)\r
+    //ELSE\r
+    // STAPT[NARCS]=STAPT[1]\r
+    //ENDIF\r
+    private double STAPT[][];\r
+    // Start with GMCO = 0\r
+    // For types 2, 3, and 4 increment GMCO and put\r
+    //GMCO=GMCO+1\r
+       //PGM[IA-1]=GMCO where IA is the number of the curve from 1 to NARCS\r
+    // For type 2 circular arc:\r
+    // RGM[GMCO-1]= X center of circle\r
+       // GMCO=GMCO+1\r
+       // RGM[GMCO-1]= Y center of circle\r
+       //GMCO=GMCO+1\r
+       //RGM[GMCO-1]=ALPHA*PI where alpha is the signed angle subtended at center in units of PI\r
+    // ALPHA is positive for CCW and negative for CW.\r
+    // For type 3 CARTESIAN PARAMETRIC FUNCTION:\r
+    // RGM[GMCO-1]= initial parameter value\r
+    // GMCO=GMCO+1\r
+    // RGM[GMCO-1]= final parameter value\r
+    // For type 4 polar function:\r
+    // RGM[GMCO-1]= (initial polar angle in units of PI) *PI\r
+    // GMCO=GMCO+1\r
+    // RGM[GMCO-1]= (final polar angle in units of PI) *PI\r
+    // PGM is of length MNARC\r
+    private int PGM[];\r
+    // RGM is of length 3*MNARC\r
+    private double RGM[];\r
+    // Start with TXCO = 0\r
+    // For types 3 and 4\r
+    // For each IA = 1 to NARCS do J = 1,2\r
+    //TXCO=TXCO+1\r
+    //PTX[IA-1+(J-1)*MNARC]=TXCO\r
+    // DEFN[TXCO-1]= TXT  \r
+    // where TXT =\r
+    // for J = 1 and TYPE = 3 JAVA EXPRESSION FOR PARFUN\r
+    // for J = 2 and TYPE = 3 JAVA EXPRESSION FOR DPARFN\r
+    // for J = 1 and TYPE = 4 JAVA EXPRESSION FOR RADIUS\r
+    // for J = 2 and TYPE = 4 JAVA EXPRESSION FOR RADIUS DERIVATIVE\r
+    // PTX is of length 2*MNARC\r
+    private int PTX[];\r
+    \r
        public SymmsIntegralMapping() {\r
                \r
        }\r
        \r
-       public SymmsIntegralMapping(ModelImage destImg, ModelImage srcImg) {\r
-           super(destImg, srcImg);     \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
+           super(destImg, srcImg);\r
+           this.FORTFL = FORTFL;\r
+           this.SYMTY = SYMTY;\r
+           this.REFLN = REFLN;\r
+           this.CENSY = CENSY;\r
+           this.NARCS = NARCS;\r
+           this.NUMDER = NUMDER;\r
+           this.STAPT = STAPT;\r
+           this.PGM = PGM;\r
        }\r
        \r
        public void runAlgorithm() {\r
@@ -126,14 +201,13 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
        //\r
        //     LOCAL VARIABLES\r
        //\r
-             int GMCO,IA,I,IER,J,L,NARCS,ORDRG,ORDSG,SW,\r
+             int GMCO,IA,I,IER,J,L,ORDRG,ORDSG,SW,\r
                  TXCO,TYPE;\r
              double ALPHA,PI,R1MACH,X,Y;\r
              //COMPLEX CENSY,RTUNI,U2\r
-             double CENSY[] = new double[2];\r
              double RTUNI[] = new double[2];\r
              double U2[] = new double[2];\r
-             boolean CHRIN,REFLN,SYMTY,CHCK;\r
+             boolean CHRIN,CHCK;\r
             // CHARACTER TXT*72,TABC*6,FORTFL*72,CH*2,SIG(10)*2,WID(10)*2,REDD*6,\r
             //+FMT1*8,FMT2*9\r
              String TXT;\r
@@ -150,14 +224,8 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
              final String TABC = "     +";\r
              final int CHNL = 20;\r
              final int CHIN = 21;\r
-             int ARCTY[] = new int[MNARC];\r
-             int PGM[] = new int[MNARC];\r
              int PTX[] = new int[2*MNARC];\r
              int NTX[] = new int[2*MNARC];\r
-             double RGM[] = new double[3*MNARC];\r
-             //COMPLEX STAPT(MNARC)\r
-             double STAPT[][] = new double[MNARC][2];\r
-             boolean NUMDER[] = new boolean[MNARC];\r
              //CHARACTER DEFN(MNARC*2)*72\r
              String DEFN[] = new String[2*MNARC];\r
              File file;\r
@@ -169,217 +237,23 @@ public class SymmsIntegralMapping extends AlgorithmBase  {
              WRHEAD(6,0, null);\r
        \r
              PI= Math.PI;\r
-             file = new File(fileDir + "pgenin");\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
-             //OPEN(CHIN,FILE='pgenin')\r
-       \r
+             \r
              //**** DETERMINE NUMBER OF SIGNIFICANT FIGURES REQUIRED TO MATCH MACHINE \r
           //**** PRECISION AND SET UP POINTER SW TO SIG AND WID\r
        \r
              SW=(int)(-Math.log10(EPS))+2;\r
-             /*IF (SW.LE.7) THEN\r
-               SW=1\r
-             ELSE IF (SW.GE.16) THEN\r
-               SW=10\r
-             ELSE\r
-               SW=SW-6\r
-             ENDIF\r
-       C\r
-       C**** SET UP THE EDIT DESCRIPTOR AND FORMAT SPECIFICATION FOR FLOATING \r
-       C**** POINT OUTPUT\r
-       C\r
-             REDD='E'//WID(SW)//'.'//SIG(SW) \r
-             FMT1='('//REDD//')'\r
-             FMT2='(2'//REDD//')'   \r
-       C\r
-             WRITE(*,*) 'FILENAME TO RECEIVE OUTPUT FORTRAN CODE?'\r
-             READ(*,'(A)') FORTFL\r
-             WRITE(CHIN,'(A)') FORTFL\r
-       C\r
-             WRITE(*,*) 'DOES THE DOMAIN HAVE ANY SYMMETRY?'\r
-             SYMTY=CHRIN('Y','y')\r
-             IF (SYMTY) THEN\r
-               WRITE(CHIN,*) 'Y','      ..SYMMETRY'\r
-             ELSE\r
-               WRITE(CHIN,*) 'N','      ..SYMMETRY'\r
-             ENDIF\r
-             IF (SYMTY) THEN\r
-               WRITE(*,*) 'ARE THERE ANY REFLECTIONAL SYMMETRIES?'\r
-               REFLN=CHRIN('Y','y')\r
-               IF (REFLN) THEN\r
-                 WRITE(CHIN,*) 'Y','      ..REFLECTIONAL SYMMETRY'\r
-               ELSE\r
-                 WRITE(CHIN,*) 'N','      ..REFLECTIONAL SYMMETRY'\r
-               ENDIF\r
-               WRITE(*,*) 'WHAT ARE THE COORDINATES OF THE CENTRE OF SYMMETRY?'\r
-               READ(*,*) X,Y\r
-               WRITE(CHIN,FMT2) X,Y\r
-               CENSY=CMPLX(X,Y)\r
-               WRITE(*,*) 'HOW MANY ARCS ARE THERE ON THE FUNDAMENTAL BOUNDARY\r
-            +SECTION?'\r
-               READ(*,*) NARCS\r
-               WRITE(CHIN,*) NARCS,'      ..NUMBER OF ARCS ON FBS'\r
-             ELSE\r
-               WRITE(*,*) 'HOW MANY ARCS ARE THERE ON THE BOUNDARY?'\r
-               READ(*,*) NARCS\r
-               WRITE(CHIN,*) NARCS,'      ..NUMBER OF ARCS ON BOUNDARY'\r
-             ENDIF\r
-       C\r
-             IF (NARCS.GT.MNARC-1) THEN\r
-               IER=58\r
-               GOTO 999 \r
-             ENDIF \r
-       C\r
-             GMCO=0\r
-             TXCO=0\r
-       C\r
-             DO 100 IA=1,NARCS\r
-               NUMDER(IA)=.FALSE.\r
-       5       CONTINUE\r
-               WRITE(*,'(//A,I2,A)') 'TYPE OF ARC ',IA,'?'\r
-               READ(*,*) TYPE\r
-               WRITE(CHIN,*) TYPE,'      ..TYPE FOR ARC',IA\r
-               IF (TYPE.EQ.1) THEN\r
-                 ARCTY(IA)=TYPE\r
-                 WRITE(*,*) 'COORDINATES OF INITIAL POINT ON LINE?'\r
-                 READ(*,*) X,Y\r
-                 WRITE(CHIN,FMT2) X,Y\r
-                 STAPT(IA)=CMPLX(X,Y)\r
-               ELSE IF (TYPE.EQ.2) THEN\r
-                 ARCTY(IA)=TYPE\r
-                 WRITE(*,*) 'COORDINATES OF INITIAL POINT ON CIRCLE?'\r
-                 READ(*,*) X,Y\r
-                 WRITE(CHIN,FMT2) X,Y\r
-                 STAPT(IA)=CMPLX(X,Y)\r
-                 WRITE(*,*) 'COORDINATES OF CENTRE OF CIRCLE?'\r
-                 READ(*,*) X,Y\r
-                 WRITE(CHIN,FMT2) X,Y\r
-                 WRITE(*,*)'SIGNED ANGLE SUBTENDED AT CENTRE (IN UNITS OF PI)?'\r
-                 READ(*,*) ALPHA\r
-                 WRITE(CHIN,FMT1) ALPHA\r
-                 GMCO=GMCO+1\r
-                 PGM(IA)=GMCO\r
-                 RGM(GMCO)=X\r
-                 GMCO=GMCO+1\r
-                 RGM(GMCO)=Y\r
-                 GMCO=GMCO+1\r
-                 RGM(GMCO)=ALPHA*PI\r
-               ELSE IF (TYPE.EQ.3 .OR. TYPE.EQ.4) THEN\r
-                 ARCTY(IA)=TYPE\r
-                 WRITE(*,*) 'COORDINATES OF INITIAL POINT ON CURVE?'\r
-                 READ(*,*) X,Y\r
-                 WRITE(CHIN,FMT2) X,Y\r
-                 STAPT(IA)=CMPLX(X,Y)\r
-                 IF (TYPE.EQ.3) THEN\r
-                   WRITE(*,*) 'INITIAL AND FINAL PARAMETER VALUES?'\r
-                 ELSE\r
-                   WRITE(*,*)'INITIAL AND FINAL POLAR ANGLES (IN UNITS OF PI)?'\r
-                 ENDIF\r
-                 READ(*,*) X,Y\r
-                 WRITE(CHIN,FMT2) X,Y\r
-                 GMCO=GMCO+1\r
-                 PGM(IA)=GMCO\r
-                 IF (TYPE.EQ.4) THEN\r
-                   RGM(GMCO)=X*PI\r
-                   GMCO=GMCO+1\r
-                   RGM(GMCO)=Y*PI\r
-                 ELSE\r
-                   RGM(GMCO)=X\r
-                   GMCO=GMCO+1\r
-                   RGM(GMCO)=Y\r
-                 ENDIF\r
-                 DO 50 J=1,2\r
-                   IF (J.EQ.1 .AND. TYPE.EQ.3) THEN\r
-                     WRITE(*,*) 'FORTRAN EXPRESSION FOR PARFUN?'\r
-                   ELSE IF (J.EQ.2 .AND. TYPE.EQ.3) THEN          \r
-                     WRITE(*,*) 'FORTRAN EXPRESSION FOR DPARFN?'\r
-                   ELSE IF (J.EQ.1 .AND. TYPE.EQ.4) THEN\r
-                     WRITE(*,*) 'FORTRAN EXPRESSION FOR RADIUS?'\r
-                   ELSE\r
-                     WRITE(*,*) 'FORTRAN EXPRESSION FOR RADIUS DERIVATIVE?'\r
-                   ENDIF\r
-       C\r
-                   TXCO=TXCO+1\r
-                   PTX(IA+(J-1)*MNARC)=TXCO\r
-                   I=1\r
-       C\r
-       10          CONTINUE\r
-                   READ(*,'(A72)') TXT\r
-                   WRITE(CHIN,'(A72)') TXT\r
-                   L=INDEX(TXT,'//')\r
-                   IF (L.EQ.0) THEN\r
-                     IF (TXT(67:72) .NE. '      ') THEN\r
-                       WRITE(*,*) 'THIS LINE IS MORE THAN 66CH LONG.'\r
-                       WRITE(*,*) 'PLEASE SPLIT AND ENTER AS SEPERATE LINES.'\r
-                       GOTO 10\r
-                     ENDIF\r
-                     DEFN(TXCO)=TABC//TXT\r
-                     I=I+1\r
-                     TXCO=TXCO+1\r
-                     GOTO 10\r
-                   ELSE\r
-                     IF (L.GT.67) THEN\r
-                       WRITE(*,*) 'THIS LINE IS MORE THAN 66CH LONG.'\r
-                       WRITE(*,*) 'PLEASE SPLIT AND ENTER AS SEPERATE LINES.'\r
-                       GOTO 10\r
-                     ENDIF\r
-                     NTX(IA+(J-1)*MNARC)=I\r
-                     IF (L.EQ.1) THEN\r
-                       DEFN(TXCO)=TABC\r
-                       NUMDER(IA)=.TRUE.\r
-                     ELSE \r
-                       DEFN(TXCO)=TABC//TXT(1:L-1)\r
-                     ENDIF\r
-                   ENDIF\r
-                   IF (J.EQ.1 .AND. TYPE.EQ.4) THEN\r
-                     WRITE(*,*) '(... = ZRAD)'\r
-                   ENDIF\r
-       50        CONTINUE\r
-               ELSE\r
-                 WRITE(*,*) 'TYPE MUST BE EITHER 1,2,3 OR 4'\r
-                 GOTO 5\r
-               ENDIF\r
-       100   CONTINUE  \r
-       C\r
-             IF (SYMTY) THEN\r
-               WRITE(*,*) 'COORDINATES OF FINAL POINT ON THIS ARC?'\r
-               READ(*,*) X,Y\r
-               WRITE(CHIN,FMT2) X,Y\r
-               STAPT(NARCS+1)=CMPLX(X,Y)\r
-             ELSE\r
-               STAPT(NARCS+1)=STAPT(1)\r
-             ENDIF\r
-       C\r
-       C**** CHECK WITH THE USER THAT THE INPUT DATA IS OK\r
-       C\r
-             IER=0\r
-             WRITE(*,*)\r
-             WRITE(*,*) 'END OF INPUT PHASE; CONTINUE WITH PROCESSING?'\r
-             CHCK=CHRIN('Y','y')\r
-             IF (.NOT.CHCK) THEN\r
-               WRITE(CHIN,*) 'N','      ..CONTINUE PROCESSING'\r
-               GOTO 999\r
-             ELSE\r
-               WRITE(CHIN,*) 'Y','      ..CONTINUE PROCESSING'\r
-             ENDIF\r
-             CLOSE(CHIN) \r
-       C\r
-       C**** WRITE THE SOURCE CODE FOR PARFUN\r
+             if (SW <= 7) {\r
+               SW=1;\r
+             }\r
+             else if (SW >= 16) {\r
+               SW=10;\r
+             }\r
+             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