クラス CBlock


  • public class CBlock
    extends java.lang.Object
    spider3アルゴリズムの中心クラス
    2021.06.18 multi grading block 対応
    2021.06.06 CBlock2 をCBlockに変更した。
    BlockMeshDictからBlockMeshDictWithHornからBlockMeshDictHornExtended
    -->
    BlockMeshDict からBlockMeshDictHornExtended
    へ変更 マージをしたくないのが理由。

    p7(0,20) z= 20
    +-------------+
    | |p6(80,20)
    | |
    | |
    | |
    | |
    |p4(0,-20) |p5(80,-20)
    +-------------+

    p3(0,20) z= -20
    +-------------+
    | |p2(80,20)
    | |
    | |
    | |
    | |
    |p0(0,-20) |p1(80,-20)
    +-------------+
    作成者:
    ohno
    • フィールドの概要

      フィールド 
      修飾子とタイプ フィールド 説明
      (package private) CBlockMeshDict blockMeshDictIn
      blockMeshDictInへのポインタ
      private int divED
      新ブロックを生成するのに必要な、共通(すべての方向のブロックを生成するのに必要な)パラメータ
      拡大方向の分割数
      private int divX
      分割数 boundaryを出力するときに使う、 divX
      private int divY
      分割数 boundaryを出力するときに使う、 divY
      private int divZ
      分割数 boundaryを出力するときに使う、 divZ
      (package private) static java.util.ArrayList<CFace> F
      static マージするface pairを見つけるためのフェースリスト
      (package private) static java.util.ArrayList<org.apache.commons.math3.linear.RealVector> P
      static ブロックの点(vertices )情報
      private int[] pidx
      points index vertices上での配列順序が入る。
      private double spreadLengthBottomX
      BottomX方向の伸びしろ
      private double spreadLengthBottomY
      BottomY方向の伸びしろ
      private double spreadLengthBottomZ
      BottomZ方向の伸びしろ
      private double spreadLengthTopX
      TopX方向の伸びしろ
      private double spreadLengthTopY
      TopY方向の伸びしろ
      private double spreadLengthTopZ
      TopZ方向の伸びしろ
      (package private) BLK type
      BlockType CENTER XBTM YBTM ZBTM XTOP YTOP ZTOP
      private CBlock xBottomBlock
      xBottom方向へのブロック
      private CBlock xTopBlock
      xTop方向へのブロック
      private CBlock yBottomBlock
      yBottom方向へのブロック
      private CBlock yTopBlock
      yTop方向へのブロック
      private CBlock zBottomBlock
      zBottom方向へのブロック
      private CBlock zTopBlock
      zTop方向へのブロック
    • コンストラクタの概要

      コンストラクタ 
      コンストラクタ 説明
      CBlock​(BLK type, org.apache.commons.math3.linear.RealVector[] p, int[] pidx, double spreadLengthTopX, double spreadLengthTopY, double spreadLengthTopZ, double spreadLengthBottomX, double spreadLengthBottomY, double spreadLengthBottomZ, int divX, int divY, int divZ, int divED, CBlockMeshDict blockMeshDictIn)
      p7-- p6
      / /
      p4--p5
      | p3--p2
      | / /
      p0--p1
    • メソッドの概要

      すべてのメソッド インスタンス・メソッド concreteメソッド 
      修飾子とタイプ メソッド 説明
      (package private) void allHortsBlockInfoWrite​(CBlockMeshDict blockMeshDict, java.lang.String multiSG, java.lang.String multiSGReverse, boolean isEmpty)
      AllHorts BlockInfo copy to BlockMeshDictOut
      (package private) void allHortsBlockInfoWrite​(java.io.PrintWriter writefile, java.lang.String multiSG, java.lang.String multiSGReverse)
      AllHorts BlockInfo Write
      (package private) void allHortsVerticesWrite​(java.io.PrintWriter writefile)
      AllHorts Vertices Write
      (package private) void blockInfoWrite​(CBlockMeshDict blockMeshDict, java.lang.String multiSG, java.lang.String multiSGReverse, boolean isEmpty)
      ブロック情報のblockMeshDictOutへの引き渡し 2021.09.20
      CBlockMeshDict.isEmpty=falseの場合は、Centerのブロック情報は引き渡さない。
      (package private) void blockInfoWrite​(java.io.PrintWriter writefile, java.lang.String multiSG, java.lang.String multiSGReverse)
      ブロック情報の書き込み 2021.06.18 変更 multigrading対応
      hex (0 1 2 3 4 5 6 7) (80 40 15) simpleGrading (1 1 1) // CENTER or XBTM or
      YBTM or ZBTM or XTOP or YTOP or ZTOP
      private boolean ckOnXYRect​(org.apache.commons.math3.linear.RealVector p0, org.apache.commons.math3.linear.RealVector p1, org.apache.commons.math3.linear.RealVector p2, org.apache.commons.math3.linear.RealVector p3)
      データチェック
      p0 ->p1 ->p2 ->p3 ->p0 が x-y 平面上にあるか?
      private org.apache.commons.math3.linear.RealVector copyPoint​(org.apache.commons.math3.linear.RealVector p, int i0, int sig)  
      private void dataCheck​(java.util.ArrayList<org.apache.commons.math3.linear.RealVector> P)
      使用しない。
      private int expansionAndAddP​(org.apache.commons.math3.linear.RealVector p)
       点の拡張、CBlock.pへの追加
      private CBlock generateBlock​(int xyz, int updown, java.lang.String blockPidx)
      Block の生成
      spider3全体でのコア処理
      private CBlock generateXBottomBlock()
      x-bottom block generate this.spreadLengthBottomX== 0のときは作成しない。
      private CBlock generateXTopBlock()
      x-top block generate this.spreadLengthTopX== 0のときは作成しない。
      private CBlock generateYBottomBlock()
      y-bottom block generate this.spreadLengthBottomY== 0のときは作成しない。
      private CBlock generateYTopBlock()
      y-top block generate this.spreadLengthTopY== 0のときは作成しない。
      private CBlock generateZBottomBlock()
      z-bottom block generate this.spreadLengthBottomZ== 0のときは作成しない。
      private CBlock generateZTopBlock()
      z-up block generate this.spreadLengthTopZ== 0のときは作成しない。
      (package private) java.util.ArrayList<CFace> getBoundary()
      F 内 のboundary を抽出

      1.CFace のfrom == to をかえす。
      private boolean isCheckOnZ​(org.apache.commons.math3.linear.RealVector p, org.apache.commons.math3.linear.RealVector q)
      データチェック on Z-Line
      p.x = q.x , p.y = q.y
      (package private) void mkAllHornBlocksFace()
      All Horn Blocks Make Faces Centerブロックのみ。
      private void mkFace()
      Faceの作成

      点インデックスのみ格納、 法線は内部から外部へ、右ねじで格納
      z
      ^    y
      | p7 /---p6|
        / /
      p4- -/--p5 |
         /
      | p3----p2 |
        /   /
      p0---p1---->x
      (package private) void mkHornBlock()
      mkHornBlock 角ブロックの生成
      private void mkXBTMFace()
      BTMFaceのCBlock.Fへの登録
      private void mkXTopFace()  
      private void mkYBTMFace()  
      private void mkYTopFace()  
      private void mkZBTMFace()  
      private void mkZTopFace()  
      private org.apache.commons.math3.linear.RealVector nonlinearExpansionAndAddP​(org.apache.commons.math3.linear.RealVector p, int i0, int sig)  
      (package private) void print()
      ブロックのデータ印字
      (package private) void printBoundary​(java.io.PrintWriter writefile)
      print boundary F 内 fromType == toType をboundary として、印刷
      • クラスから継承されたメソッド java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • フィールドの詳細

      • type

        BLK type
        BlockType CENTER XBTM YBTM ZBTM XTOP YTOP ZTOP
      • blockMeshDictIn

        CBlockMeshDict blockMeshDictIn
        blockMeshDictInへのポインタ
      • P

        static java.util.ArrayList<org.apache.commons.math3.linear.RealVector> P
        static ブロックの点(vertices )情報
      • F

        static java.util.ArrayList<CFace> F
        static マージするface pairを見つけるためのフェースリスト
      • pidx

        private int[] pidx
        points index vertices上での配列順序が入る。
      • divX

        private int divX
        分割数 boundaryを出力するときに使う、 divX
      • divY

        private int divY
        分割数 boundaryを出力するときに使う、 divY
      • divZ

        private int divZ
        分割数 boundaryを出力するときに使う、 divZ
      • divED

        private int divED
        新ブロックを生成するのに必要な、共通(すべての方向のブロックを生成するのに必要な)パラメータ
        拡大方向の分割数
      • spreadLengthTopX

        private double spreadLengthTopX
        TopX方向の伸びしろ
      • spreadLengthTopY

        private double spreadLengthTopY
        TopY方向の伸びしろ
      • spreadLengthTopZ

        private double spreadLengthTopZ
        TopZ方向の伸びしろ
      • spreadLengthBottomX

        private double spreadLengthBottomX
        BottomX方向の伸びしろ
      • spreadLengthBottomY

        private double spreadLengthBottomY
        BottomY方向の伸びしろ
      • spreadLengthBottomZ

        private double spreadLengthBottomZ
        BottomZ方向の伸びしろ
      • xBottomBlock

        private CBlock xBottomBlock
        xBottom方向へのブロック
      • yBottomBlock

        private CBlock yBottomBlock
        yBottom方向へのブロック
      • zBottomBlock

        private CBlock zBottomBlock
        zBottom方向へのブロック
      • xTopBlock

        private CBlock xTopBlock
        xTop方向へのブロック
      • yTopBlock

        private CBlock yTopBlock
        yTop方向へのブロック
      • zTopBlock

        private CBlock zTopBlock
        zTop方向へのブロック
    • コンストラクタの詳細

      • CBlock

        public CBlock​(BLK type,
                      org.apache.commons.math3.linear.RealVector[] p,
                      int[] pidx,
                      double spreadLengthTopX,
                      double spreadLengthTopY,
                      double spreadLengthTopZ,
                      double spreadLengthBottomX,
                      double spreadLengthBottomY,
                      double spreadLengthBottomZ,
                      int divX,
                      int divY,
                      int divZ,
                      int divED,
                      CBlockMeshDict blockMeshDictIn)
        p7-- p6
        / /
        p4--p5
        | p3--p2
        | / /
        p0--p1
        パラメータ:
        type - ブロクタイプ BLK = CENTER XBTM XTOP ...
        p - type==CENTERのときにのみ CBlock.Pの初期設定に必要 その後は、Pで点の管理をする。
        pidx - 使用するverticesのindex
        spreadLengthTopX - TopX方向の伸びしろ
        spreadLengthTopY - TopY
        spreadLengthTopZ - TopZ
        spreadLengthBottomX - BottomX
        spreadLengthBottomY - BottomY
        spreadLengthBottomZ - BottomZ
        divX - X方向の分割数
        divY - Y方向
        divZ - Z方向
        divED - 拡張方向への分割数
        blockMeshDictIn - blockMeshDictInへのポインタ
    • メソッドの詳細

      • mkHornBlock

        void mkHornBlock()
        mkHornBlock 角ブロックの生成
      • dataCheck

        private void dataCheck​(java.util.ArrayList<org.apache.commons.math3.linear.RealVector> P)
        使用しない。
        パラメータ:
        P - RealVector 配列
      • ckOnXYRect

        private boolean ckOnXYRect​(org.apache.commons.math3.linear.RealVector p0,
                                   org.apache.commons.math3.linear.RealVector p1,
                                   org.apache.commons.math3.linear.RealVector p2,
                                   org.apache.commons.math3.linear.RealVector p3)
        データチェック
        p0 ->p1 ->p2 ->p3 ->p0 が x-y 平面上にあるか?
        パラメータ:
        p0 - 点0
        p1 - 点1
        p2 - 点2
        p3 - 点3
        戻り値:
        X-Y平面上にある場合はtrue
      • isCheckOnZ

        private boolean isCheckOnZ​(org.apache.commons.math3.linear.RealVector p,
                                   org.apache.commons.math3.linear.RealVector q)
        データチェック on Z-Line
        p.x = q.x , p.y = q.y
        パラメータ:
        p - 点p
        q - 点q
        戻り値:
        Z-line上にある場合はtrue
      • generateBlock

        private CBlock generateBlock​(int xyz,
                                     int updown,
                                     java.lang.String blockPidx)
        Block の生成
        spider3全体でのコア処理
        パラメータ:
        xyz - = 0 :x 1 :y 2 :z
        updown - = -1 down 1 up
        blockPidx - (q0 p0 p3 q3 q4 p4 p7 q7) etc.
        戻り値:
        xyz updown方向へのブロック生成
      • generateXBottomBlock

        private CBlock generateXBottomBlock()
        x-bottom block generate this.spreadLengthBottomX== 0のときは作成しない。
        step1 generate points (q0 q3 q4 q5) すでに点が作成されていれば、それを用いる。
        step2 generate block (q0 p0 p3 q3 q4 p4 p7 q7)
        q7------p7 p6
        q4-----p4 p5

        q3------p3 p2
        q0-----p0 p1

        --------------------------------------->X
        戻り値:
        XBottomBlock
      • generateYBottomBlock

        private CBlock generateYBottomBlock()
        y-bottom block generate this.spreadLengthBottomY== 0のときは作成しない。 step1 generate
        points (q0 q1 q4 q5) step2 generate block (q0 q1 p1 p0 q4 q5 p5 p4)

        p7 p6
        p4 y p5
        / / /
        / /p3 / p2
        q4 /p0 q5 p1
        -------------/------------>x
        / /
        q0 q1
        戻り値:
        YBottomBlock
      • generateZBottomBlock

        private CBlock generateZBottomBlock()
        z-bottom block generate this.spreadLengthBottomZ== 0のときは作成しない。 step1 generate
        points (q0 q1 q2 q3) step2 generate block (q0 q1 q2 q3 p0 p1 p2 p3)

        p7 p6
        p4 p5

        p3 p2 |
        p0 | p1| |
        | | | | |
        | q3 | q2 v
        q0 q1 z
        戻り値:
        ZBottomBlock
      • generateXTopBlock

        private CBlock generateXTopBlock()
        x-top block generate this.spreadLengthTopX== 0のときは作成しない。 step1 generate
        points (q1 q2 q5 q6) step2 generate block (p1 q1 q2 p2 p5 q5 q6 p6)

        p7 p6------q6
        p4 p5----q5

        p3 p2-------q2
        p0 p1-----q1
        --------------------------------------->X
        戻り値:
        XTopBlock
      • generateYTopBlock

        private CBlock generateYTopBlock()
        y-top block generate this.spreadLengthTopY== 0のときは作成しない。 step1 generate
        points (q3 q2 q6 q7) step2 generate block (p3 p2 q2 q3 p7 p6 q6 q7)

        q7 q6
        / /
        p7 p6
        p4 p5
        q3 q2
        / /
        p3 p2
        p0 p1
        -------------------------> x
        戻り値:
        YTopBlock
      • generateZTopBlock

        private CBlock generateZTopBlock()
        z-up block generate this.spreadLengthTopZ== 0のときは作成しない。 step1 generate points
        (q4 q5 q6 q7) step2 generate block (p4 p5 p6 p7 q4 q5 q6 q7)

        q7 q6
        q4 | q5 |
        | | | |
        | p7 | p6|
        p4 p5

        p3 p2
        p0 p1
        戻り値:
        ZTopBlock
      • expansionAndAddP

        private int expansionAndAddP​(org.apache.commons.math3.linear.RealVector p)
         点の拡張、CBlock.pへの追加
        パラメータ:
        p - 拡張前の点
        戻り値:
        CBlock.Pに拡張点がすでにある場合はそのインデックスを戻す。ない場合は登録をして、そのインデックスを返す。
      • copyPoint

        private org.apache.commons.math3.linear.RealVector copyPoint​(org.apache.commons.math3.linear.RealVector p,
                                                                     int i0,
                                                                     int sig)
        パラメータ:
        p - コピー元 コア領域の頂点
        i0 - 0 x-方向にコピー 1:y-方向にコピー 2:z-方向にコピー
        sig - -1 マイナス方向 +1 プラス方向
        戻り値:
        コピーした点 指定方向へ指定した座標のみ伸びしろを追加
      • nonlinearExpansionAndAddP

        private org.apache.commons.math3.linear.RealVector nonlinearExpansionAndAddP​(org.apache.commons.math3.linear.RealVector p,
                                                                                     int i0,
                                                                                     int sig)
        パラメータ:
        p - コピー元 コア領域の頂点
        i0 - 0 x-Top/Bottom 1:y-Top/Bottom 2:z-Top/Bottom
        sig - -1 Bottom +1 Top
        戻り値:
        コピーした点 対応する拡張点
      • allHortsVerticesWrite

        void allHortsVerticesWrite​(java.io.PrintWriter writefile)
        AllHorts Vertices Write
        パラメータ:
        writefile - PrintWriter
      • blockInfoWrite

        void blockInfoWrite​(java.io.PrintWriter writefile,
                            java.lang.String multiSG,
                            java.lang.String multiSGReverse)
        ブロック情報の書き込み 2021.06.18 変更 multigrading対応
        hex (0 1 2 3 4 5 6 7) (80 40 15) simpleGrading (1 1 1) // CENTER or XBTM or
        YBTM or ZBTM or XTOP or YTOP or ZTOP
        パラメータ:
        writefile - PrintWriter
        multiSG - multisimpleGradingが設定されている場合 paramaterfileの値
        multiSGReverse - multisimpleGradingが設定されている場合 そのリバース値
      • blockInfoWrite

        void blockInfoWrite​(CBlockMeshDict blockMeshDict,
                            java.lang.String multiSG,
                            java.lang.String multiSGReverse,
                            boolean isEmpty)
        ブロック情報のblockMeshDictOutへの引き渡し 2021.09.20
        CBlockMeshDict.isEmpty=falseの場合は、Centerのブロック情報は引き渡さない。
        パラメータ:
        blockMeshDict - blockMeshDict
        multiSG - multisimpleGradingが設定されている場合 paramaterfileの値
        multiSGReverse - multisimpleGradingが設定されている場合 そのリバース値
        isEmpty - blockMeshDict.in.isEmpty
      • allHortsBlockInfoWrite

        void allHortsBlockInfoWrite​(java.io.PrintWriter writefile,
                                    java.lang.String multiSG,
                                    java.lang.String multiSGReverse)
        AllHorts BlockInfo Write
        パラメータ:
        writefile - PrintWriter
        multiSG - multi grading block
        multiSGReverse - multi grading block revere
      • allHortsBlockInfoWrite

        void allHortsBlockInfoWrite​(CBlockMeshDict blockMeshDict,
                                    java.lang.String multiSG,
                                    java.lang.String multiSGReverse,
                                    boolean isEmpty)
        AllHorts BlockInfo copy to BlockMeshDictOut
        パラメータ:
        blockMeshDict - CBlockMeshDict
        multiSG - multi grading block
        multiSGReverse - multi grading block revere
        isEmpty - blockMeshDict.in.isEmptyフラグ
      • mkFace

        private void mkFace()
        Faceの作成

        点インデックスのみ格納、 法線は内部から外部へ、右ねじで格納
        z
        ^    y
        | p7 /---p6|
          / /
        p4- -/--p5 |
           /
        | p3----p2 |
          /   /
        p0---p1---->x
      • mkXBTMFace

        private void mkXBTMFace()
        BTMFaceのCBlock.Fへの登録
      • mkYBTMFace

        private void mkYBTMFace()
      • mkZBTMFace

        private void mkZBTMFace()
      • mkXTopFace

        private void mkXTopFace()
      • mkYTopFace

        private void mkYTopFace()
      • mkZTopFace

        private void mkZTopFace()
      • mkAllHornBlocksFace

        void mkAllHornBlocksFace()
        All Horn Blocks Make Faces Centerブロックのみ。
        Horn Blockがない面はそれ自体をboundary登録(CBlock.Fへの追加)する。 それ以外は、Centerブロックのface登録はしない。
        HornBLockは全ての面を登録している。
      • getBoundary

        java.util.ArrayList<CFace> getBoundary()
        F 内 のboundary を抽出

        1.CFace のfrom == to をかえす。

        2.Block.Fに登録されているfrom=Centerである面すべて。

        3.xBottomBlock==null ->to=XBTM from=Y|Z-Bottom|Top etc.
        戻り値:
        boundary
      • printBoundary

        void printBoundary​(java.io.PrintWriter writefile)
        print boundary F 内 fromType == toType をboundary として、印刷
        パラメータ:
        writefile - PrintWriter
      • print

        void print()
        ブロックのデータ印字