Partitions
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