Difference between revisions of "Partitions"
(Created page with "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 o...") |
|||
Line 4: | Line 4: | ||
The <code>ORDEr</code> for the integrator for each dof is set with the <code>ORDEr</code> command, where 0 means static, 1 first order, etc. The <code>ORDEr</code> command is given after the <code>END</code> of the mesh and before any solution commands. For example | The <code>ORDEr</code> for the integrator for each dof is set with the <code>ORDEr</code> command, where 0 means static, 1 first order, etc. The <code>ORDEr</code> command is given after the <code>END</code> of the mesh and before any solution commands. For example | ||
< | <pre> | ||
ORDEr | ORDEr | ||
1 2 2 0 | 1 2 2 0 | ||
</ | </pre> | ||
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. | 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 == | == Setting the partitions == | ||
You use the <code>PARTition</code> command in the control phase (after the <code>END</code> 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 | You use the <code>PARTition</code> command in the control phase (after the <code>END</code> 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 | ||
< | <pre> | ||
PARTition | PARTition | ||
1 0 1 | 1 0 1 | ||
1 1 0 | 1 1 0 | ||
</ | </pre> | ||
would set up a problem with two partitions. In the first dofs 1 and 3 would be active and in the second dofs one and two would be active. | would set up a problem with two partitions. In the first dofs 1 and 3 would be active and in the second dofs one and two would be active. | ||
Revision as of 12:19, 5 June 2018
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 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