OOF2: The Manual
Some of the changes in version 2.1.0 will require changes to OOF2 scripts that were saved by or written for version 2.0.5. Please contact us if you need help updating scripts.
The group names created by the Group button on the Image page,
using %c
as the name_template, are now
shorter and more manageable. OOF2 used to use its own
representation for colors, such as
RGBColor(red=0.24313725490196078,green=0.24313725490196078,blue=0.24313725490196078)
Now it uses the standard hex representation,
#rrggbb
, where rr, gg, and bb
are the RGB values as two digit hexadecimal numbers. The new
name of the above group would be
#3e3e3e
.
Scripts that create pixel groups automatically and then refer to the groups explicitly by name will have to be updated with the new group names.
OOF2 2.0.x used the ContinuumProfile
class to specify arbitrary profile functions for boundary
conditions. Now it's necessary to distinguish between
constant profiles, time-dependent profiles, and time-dependent
profiles that know their time derivatives. Different types of
boundary conditions require different kinds of profile
arguments.
-
Dirichlet boundary conditions require a
ContinuumProfileXTd
object, which is a time-dependent function and its first two time derivatives. Its arguments arefunction
,timeDerivative
, andtimeDerivative2
, which are all strings representing functions ofx
,y
,nx
,ny
,i
,s
,alpha
, and/ort
.t
is time. The rest of the variables have the same meaning as in previous versions. Here's an example:OOF.Mesh.Boundary_Conditions.New( name='bc', mesh='microstructure:skeleton:mesh', condition=DirichletBC( field=Temperature, field_component='', equation=Heat_Eqn, eqn_component='', profile=ContinuumProfileXTd(function='2*t', timeDerivative='2.0', timeDerivative2='0.0'), boundary='top'))
-
Generalized Force boundary conditions require a
ContinuumProfileXT
object which is a time-dependent function, but the time derivatives do not have to be provided. It has afunction
argument, which is a string representing a function ofx
,y
,nx
,ny
,i
,s
,alpha
, and/ort
. Example:OOF.Mesh.Boundary_Conditions.Edit( name='bc', mesh='microstructure:skeleton:mesh', condition=ForceBC( equation=Heat_Eqn, eqn_component='', profile=ContinuumProfileXT(function='2*s+t'), boundary='topleft'))
-
Floating boundary conditions must have profile functions that are not functions of time and are
ContinuumProfile
objects.ContinuumProfile
objects also take an argument namedfunction
, but it can't be a function oft
. These are unchanged from version 2.0.
Periodic boundary conditions now apply automatically to all
components of a Field, so they no longer have a
field_component
argument:
OOF.Mesh.Boundary_Conditions.New(
name='bc',
mesh='microstructure:skeleton:mesh',
condition=PeriodicBC(
field=Displacement,
equation=Force_Balance,
boundary='right left'))
The command OOF.Mesh.Initialize has been
replaced by OOF.Mesh.Set_Field_Initializer,
which has the same mesh
,
field
, and initializer
arguments as the old command. It assigns an initializer, but
doesn't actually apply it. That is, it doesn't set Field
values at the nodes of the Mesh. To actually set the values
for all Fields, use either
OOF.Mesh.Apply_Field_Initializers or
OOF.Mesh.Apply_Field_Initializers_at_Time
after calling
OOF.Mesh.Set_Field_Initializer, like this:
OOF.Mesh.Set_Field_Initializer( mesh='microstructure:skeleton:mesh', field=Temperature, initializer=ConstScalarFieldInit(value=1.0)) OOF.Mesh.Apply_Field_Initializers(mesh='microstructure:skeleton:mesh') OOF.Mesh.Apply_Field_Initializers_at_Time(mesh='microstructure:skeleton:mesh', time=0.0)
The command OOF.Solver.Solve has been replaced by the combination OOF.Subproblem.Set_Solver and OOF.Mesh.Solve. It's simplest to give an example. A typical Solve command from 2.0.5 uses a linear solver to solve the default subproblem with the CG solver:
OOF.Solver.Solve( subproblem='microstructure:skeleton:mesh:default', solver=LinearDriver( method=CGSolver( max_iterations=1000, tolerance=1e-13, preconditioner=ILUPreconditioner())))
In 2.1, this could be replaced by
OOF.Subproblem.Set_Solver( subproblem='microstructure:skeleton:mesh:default', solver_mode=BasicSolverMode( time_stepper=BasicStaticDriver(), matrix_method=BasicIterative( tolerance=1e-13, max_iterations=1000))) OOF.Mesh.Solve( mesh='microstructure:skeleton:mesh', endtime=0.0)
This combination reproduces the 2.0.5 functionality and should work
for any problem that 2.0.5 could solve, including nonlinear
problems. It will use the CG
solver to solve
symmetric matrices and GMRES
to solve
asymmetric ones.
The commands in the OOF.Mesh.Analyze menu
used to take comment_character
and
separator
arguments. Those arguments have
been replaced by global settings in the
Settings/Output Formatting menu in the
menubar in the main OOF2 window. The arguments should be
removed from scripts.