Partitions

From FEAP Wiki
Jump to navigation Jump to search

Partitions allows one to use operator splitting methods to solve problems. A given dof can be active in any partition that you choose and each degree of freedom can use its own order integrator.

Setting the order of the integrator

The ORDEr for the integrator for each dof is set with the ORDEr command, where 0 means static, 1 first order, etc. The ORDEr command is given after the END of the mesh and before any solution commands. For example

ORDEr
  1 2 2 0

would set dof 1 to use a first order integrator, dofs 2 and 3 to use a second order integrator, and dof 4 to be static.

Setting the partitions

You use the PARTition command in the control phase (after the END of the mesh and before and solution commands) to set which dofs will be active in which partition (i.e. which part of the operator split). A 0 means the dof will not be active in the partition and a 1 means it will be active. You have one line of data for each partition that you will use. For example

PARTition
  1 0 1
  1 1 0

would set up a problem with two partitions. In the first partition, dofs 1 and 3 would be active, and in the second dofs one and two would be active.


Activating the partitions

In the solutions phase you use the PARTition command to switch between which partition you would like to solve. For example PARTition,,2 would activate the second partition for solution.

Programing aspects

If you are programing your own element for use with partitions, then your element needs to be programmed to assemble the equations that you have indicated with the PARTition command during the control phase. Your element does this based on the value that is passed to it in the common block variable npart which you will find in part0.h.

A good place to look to understand how this works is in elements/solid2d/solid2d.f and the routines it calls. The basic gist of it is that if the current partition number, npart the partition you are currently solving, is equal to the data currently in ndfp(dof), then you should assemble the equations for that dof. The array ndfp is also in part0.h and is set up for you each time you issue the PARTition command during the solution phase (see program/pmacr6.f and program/partpt.f). The data set by the PARTition command during the control phase is stored in ndfst( ) which is also located in common block part0.h

Example using FEAP's built-in thermo-elastic capabilities

FEAP * * Partitioned thermo-mechanical analysis
  0  0  0  2  3  9

MATErial 1
  SOLID
    ELASTIC ISOTROPIC  100    0.4995
    THERMAL ISOTROPIC  0.25   0.0
    FOURIER ISOTROPIC  10.0   1.0
    DENSITY MASS       0.10
    MIXED

BLOCK
  CARTESIAN 20 10
  QUADrilateral 9
    1  0.0  0.0
    2  5.0  0.0
    3  5.0  2.5
    4  0.0  2.5

  CBOUN
    NODE 5 0 1 1
    NODE 5 5 1 0

  EBOU
    1  0  0  0  1
 
  EDIS
    1  0  0  0  1

END

ORDER
  0  0  1

PART
  0 0 1     ! Thermal    partition
  1 1 0     ! Mechanical partition

BATCH
  OPTI
  DT,,0.005
  PART,,1
  TRANs BACK   ! For thermal problem
END


BATCH
  PLOT DEFOrm
  PLOT FACT 0.7 ! to keep plot in window
  LOOP,,20
    TIME
    PART,,1
      LOOP,,5     ! Note that at least 3 iterations
        TANG,,1   ! are needed to converge (since no
      NEXT        ! compling tangent is included)
    PART,,2
      LOOP,,5     ! Note that at least 3 iterations
        TANG,,1   ! are needed to converge (since no
      NEXT        ! compling tangent is included)
    PLOT,CLEAN
    PLOT FRAMe 1
    PLOT RANG 0.4 0.9
    PLOT CONT 3 ! Temperature contours
    PLOT FRAMe 2
    PLOT RANG -1.0 0.2
    PLOT STRE 1 ! 11-Stress contours
    PLOT FRAMe 3
    PLOT RANG -1.25 0.0
    PLOT CONT 1 ! Displacement contours
    PLOT FRAMe 4
    PLOT RANG -1.0 0.2
    PLOT STRE 2 ! 22-Stress contours
    PLOT TITLE
  NEXT
  COMM Temp-Disp_Partn
END

!INTEractive

STOP