Hello,

I recently tried to accelerate mesh refinement in my PDE toolbox Femlisp by
auto-generating the refinement code.  This worked quite well, but I
observed that compilation times increase dramatically with the size of the
code (increasing dimension of the cell).

Dimension   Size of code (#atoms in tree)   Time (secs)
  2             384                            0.4
  3            1524                            4.0
  4            5736                           61.3

The refinement itself is simple sequential code.  I have attached the case
n=2 (unit quadrangle) below.

Is this behaviour to be expected?  Adding declarations for (OPTIMIZE SPEED)
or  (OPTIMIZE COMPILATION-SPEED) did not change anything.

Thanks, Nicolas.

---------------------------------------------------------------------------

(LAMBDA (CELL SUBCELL-REFINEMENTS)
  (DECLARE (TYPE SIMPLE-VECTOR SUBCELL-REFINEMENTS))
  (LET ((MY-REFINEMENT (MAKE-ARRAY 9)))
    (SETF (AREF SUBCELL-REFINEMENTS 0) MY-REFINEMENT)
    (SETF (AREF MY-REFINEMENT 0) (MAKE-VERTEX (LOCAL->GLOBAL CELL #(0.5 0.5))))
    (SETF (AREF MY-REFINEMENT 1)
            (LET ((BOUNDARY (MAKE-ARRAY 2)))
              (SETF (AREF BOUNDARY 0)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            0))
              (SETF (AREF BOUNDARY 1)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 4))
                            0))
              (MAKE-INSTANCE #1=#<STANDARD-CLASS <1-SIMPLEX> {583060A5}>
                             . #2=(BOUNDARY BOUNDARY))))
    (SETF (AREF MY-REFINEMENT 2)
            (LET ((BOUNDARY (MAKE-ARRAY 2)))
              (SETF (AREF BOUNDARY 0)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 3))
                            0))
              (SETF (AREF BOUNDARY 1)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            0))
              (MAKE-INSTANCE #1# . #2#)))
    (SETF (AREF MY-REFINEMENT 3)
            (LET ((BOUNDARY (MAKE-ARRAY 2)))
              (SETF (AREF BOUNDARY 0)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            0))
              (SETF (AREF BOUNDARY 1)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 2))
                            0))
              (MAKE-INSTANCE #1# . #2#)))
    (SETF (AREF MY-REFINEMENT 4)
            (LET ((BOUNDARY (MAKE-ARRAY 4)))
              (SETF (AREF BOUNDARY 0)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            1))
              (SETF (AREF BOUNDARY 1)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 2))
                            1))
              (SETF (AREF BOUNDARY 2)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            3))
              (SETF (AREF BOUNDARY 3)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 4))
                            1))
              (MAKE-INSTANCE #3=#<STANDARD-CLASS <1-1-TENSORIAL> {583061E5}>
                             . #2#)))
    (SETF (AREF MY-REFINEMENT 5)
            (LET ((BOUNDARY (MAKE-ARRAY 4)))
              (SETF (AREF BOUNDARY 0)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            2))
              (SETF (AREF BOUNDARY 1)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 2))
                            2))
              (SETF (AREF BOUNDARY 2)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 3))
                            1))
              (SETF (AREF BOUNDARY 3)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            3))
              (MAKE-INSTANCE #3# . #2#)))
    (SETF (AREF MY-REFINEMENT 6)
            (LET ((BOUNDARY (MAKE-ARRAY 2)))
              (SETF (AREF BOUNDARY 0)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 1))
                            0))
              (SETF (AREF BOUNDARY 1)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            0))
              (MAKE-INSTANCE #1# . #2#)))
    (SETF (AREF MY-REFINEMENT 7)
            (LET ((BOUNDARY (MAKE-ARRAY 4)))
              (SETF (AREF BOUNDARY 0)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 1))
                            1))
              (SETF (AREF BOUNDARY 1)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            1))
              (SETF (AREF BOUNDARY 2)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            6))
              (SETF (AREF BOUNDARY 3)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 4))
                            2))
              (MAKE-INSTANCE #3# . #2#)))
    (SETF (AREF MY-REFINEMENT 8)
            (LET ((BOUNDARY (MAKE-ARRAY 4)))
              (SETF (AREF BOUNDARY 0)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 1))
                            2))
              (SETF (AREF BOUNDARY 1)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            2))
              (SETF (AREF BOUNDARY 2)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 3))
                            2))
              (SETF (AREF BOUNDARY 3)
                      (AREF (THE SIMPLE-VECTOR (AREF SUBCELL-REFINEMENTS 0))
                            6))
              (MAKE-INSTANCE #3# . #2#)))))

              


Reply via email to