model.coordSystem()
Add coordinate systems, perfectly matched layers, infinite elements, and absorbing layers. Perfectly matched layers, infinite elements, and absorbing layers are all available with a set of add-on products only.
The syntax that includes the component level, such as model.component(<ctag>).coordSys()... is the default and is used throughout this chapter. To use the earlier model.coordSys()... syntax, clear the Use component syntax check box on the Methods page in the Preferences dialog box.
Syntax
model.component(<ctag>).coordSystem().create(<tag>,<gtag>,type);
model.component(<ctag>).coordSystem(<tag>).set(property, <value>);
model.component(<ctag>).component(<ctag>).coordSystem(<tag>).
    setIndex(property, <value>, row);
model.component(<ctag>).coordSystem(<tag>).setIndex(property, <value>, row, col);
model.component(<ctag>).coordSystem(<tag>).selection();
 
model.component(<ctag>).coordSystem(<tag>).coord()
model.component(<ctag>).coordSystem(<tag>).isOrthonormal()
model.component(<ctag>).coordSystem(<tag>).isLinear()
model.component(<ctag>).coordSystem(<tag>).image()
Description
model.component(<ctag>).coordSystem().create(<tag>,<gtag>,type) creates a coordinate system with tag <tag> on geometry <gtag> of type type. There are the following types of coordinate systems: mapped system (Mapping), base-vector system (VectorBase), rotated system (Rotated), boundary system (Boundary), scaling system (Scaling), cylindrical system (Cylindrical), and system from geometry (SystemFromGeometry). The boundary system only applies to boundaries. In addition, the perfectly matched layers (PMLs), infinite elements, and absorbing layers are also implemented as types of coordinate systems: PML, InfiniteElement, and AbsorbingLayer, respectively.
model.component(<ctag>).coordSystem(<tag>).selection().named(<seltag>) assigns the coordinate system to the named selection <seltag>. model.component(<ctag>).coordSystem(<tag>).selection().set(...) defines a local selection that assigns the coordinate system to geometric entities. For a complete list of methods available under selection(), see Selections. The selection method is only available for coordinate systems of the following types: Scaling, PML, InfiniteElement, and AbsorbingLayer.
model.component(<ctag>).coordSystem(<tag>).set("orthonormal","on") specifies that this is a orthonormal system. This affects the internal calculation of systems, so some simplifications on expressions can be made. It is recommended to use this option when possible. Boundary systems, rotated systems, and cylindrical system are always orthonormal..
Mapping
model.component(<ctag>).coordSystem().create(<tag1>,<gtag>,"Mapping") creates a mapped system. In a mapped system you specify the coordinate mapping given in some of the available frame coordinates (usually x, y, z).
model.component(<ctag>).coordSystem(<tag1>).setIndex("map", "x+1", 0) sets the mapping of the first coordinate system coordinate to be a function of the first frame coordinate, x.
model.component(<ctag>).coordSystem(<tag1>).setIndex("map", "y+1", 2) sets the mapping of the third coordinate system coordinate to be a function of the second frame coordinate y.
VectorBase
model.component(<ctag>).coordSystem().create(<tag2>,"VectorBase") creates a base-vector system. In a base-vector system you specify the base vectors given as components of a frame system. If the components are independent of frame coordinates this is a linear system and can be applied for any frame.
this | Part Instance feature
xyplane | Work plane feature
Work Plane feature that defines the coordinate system. The default, xyplane, is the global Cartesian coordinate system.
model.component(<ctag>).coordSystem(<tag2>).setIndex("base", "1", 0, 1) sets the first base vector’s second component to one. As an alternative, it is possible to specify the full base-vector matrix using the following syntax:
model.component(<ctag>).coordSystem(<tag2>).set("base",
new String[][]{{"0","1","0"},{"0","0","1"},{"1","0","0"}})
sets the base vector matrix so the first base vector is equal to the y-axis of the frame system, the second is the z-axis, and so on. In 2D, you only use a two rows and two columns from the full base vector matrix for the in-plane base vectors. As an option, it is therefore possible to specify which of the coordinate system base vectors that corresponds to the out-of-plane axis in the frame system. Internally, this base vector always gets the components {"0","0","1"}. The third column is also set using these components. To make a general 3D system in 2D, you must use the mapped system.
model.component(<ctag>).coordSystem(<tag2>).set("outofplane", "2") sets the third base vector to represent the out-of-plane vector (z-axis in 2D). The value is zero based. In 1D the out-of-plane index is set using the syntax “1,2” to set second and third base vectors to represent the out-of-plane vector.
Rotated
model.component(<ctag>).coordSystem().create(<tag3>,"Rotated") creates a rotated system. In 3D you specify the Z-X-Z Euler angles, which corresponds to sequential rotation first about the z-axis, then the x-axis, and finally the z-axis again. In 2D you can either specify a full 3D rotation or a rotation only about a selected out-of-plane axis.
Rotation angle when method is inPlane.
this | Part Instance feature
xyplane | Work plane feature
Work Plane feature that defines the coordinate system. The default, xyplane, is the global Cartesian coordinate system.
model.component(<ctag>).coordSystem(<tag3>).setIndex("angle","12[deg]",0) sets the first rotation about the z-axis to 12 degrees. The default unit for angles are radians.
Boundary
model.component(<ctag>).coordSystem().create(<tag4>,<gtag>,"Boundary") creates a new boundary system, which is a local base vector system on 2D boundaries (t, n) and on 3D boundaries (t1t2n). There is always one boundary system added by default for each geometry.
string (mesh | material | spatial | geometry)
string (manual | globalCartesian | <tag>)
model.component(<ctag>).coordSystem(<tag4>).set("reversenormal","on") flips the normal direction for this system, so that it is opposite to the normal direction given by the geometry.
model.component(<ctag>).coordSystem(<tag4>).set("mastersystcomp","2") sets the first tangential direction from the second axis of the specified master system.
model.component(<ctag>).coordSystem(<tag4>).set("mastersystem","manual") specifies that no master system is used and that the tangential direction must be entered by the user.
model.component(<ctag>).coordSystem(<tag4>).setIndex("tangent","1") sets the first component of the first tangential direction.
In addition, you can add ReverseNormal and DomainNormal subfeatures to reverse the normal for some boundaries and switch the normal direction on the exterior of some domains, respectively.
model.component(<ctag>).coordSystem(<tag4>).create(<rntag>, "ReverseNormal") creates a ReverseNormal subfeature. To it, you then assign a boundary selection. For boundary 3, for example, use model.component(<ctag>).coordSystem(<tag4>).feature(<rntag>).selection().set(3);
model.component(<ctag>).coordSystem(<tag4>).create(<dntag>, DomainNormal") creates a DomainNormal subfeature. To it, you then assign a domain selection. For domain 2, for example, use model.component(<ctag>).coordSystem(<tag4>).feature(<dntag>).selection().set(3);. There is one property for the DomainNormal subfeature: normalDirection, which can be a string outward (the default) or inward.
Cylindrical
model.component(<ctag>).coordSystem().create(<tag5>,<gtag>,"Cylindrical") creates a cylindrical coordinate system, which you can use in 2D and 3D where rotational symmetry about the axis is required. You can specify the origin, axis direction and radial base vector.
this | Part Instance feature
xyplane | Work plane feature
Work Plane feature that defines the coordinate system. The default, xyplane, is the global Cartesian coordinate system.
model.component(<ctag>).coordSystem(<tag5>).set("origin", new String[]{"1","0","0"}) sets the origin to (1,0,0).
Spherical
model.component(<ctag>).coordSystem().create(<tag6>,<gtag>,"Spherical") creates a spherical coordinate system, which you can use in 3D to define a field or property using spherical coordinates. You can specify the origin, zenith axis (θ = 0), and azimuth axis (θ = π/2, = 0).
this | Part Instance feature
xyplane | Work plane feature
Work Plane feature that defines the coordinate system. The default, xyplane, is the global Cartesian coordinate system.
model.component(<ctag>).coordSystem(<tag6>).set("origin", new String[]{"1","0","0"}) sets the origin to (1,0,0).
FromGeometry
model.component(<ctag>).coordSystem().create(<tag7>,<gtag>,"FromGeometry") creates a coordinate system taken from a work plane in a 3D geometry or defined in a 3D geometry part that is included in the geometry as a part instance. You can specify which work plane to use:.
string (mesh | material | spatial | geometry)
this | Part Instance feature
xyplane | Work plane feature
Work Plane feature that defines the coordinate system. The default, xyplane, is the global Cartesian coordinate system.
Scaling
model.component(<ctag>).coordSystem().create(<tag8>,<gtag>,"Scaling") creates a scaling coordinate system that maps the geometry, as represented by the independent coordinates of an underlying frame, onto a virtual geometry represented by virtual scaling system coordinates. Physics interfaces that support infinite elements or perfectly matched layers accept the scaling system coordinates as being the physical domain, in which the underlying frame coordinates are seen as a parameterization. Therefore, using a scaling coordinate system you can arbitrarily deform the domain.
model.component(<ctag>).coordSystem(<tag8>).setIndex("map", "y+1", 1) sets the second coordinate mapping to y+1.
Combined
model.component(<ctag>).coordSystem().create(<tag9>,<gtag>,"Combined") creates a combined coordinate system that makes it possible to use different coordinate systems in different domains, for example. To add a coordinate system to the combined system and define it on domain 2, use
model.component(<ctag>").coordSystem(<tag9>).create(<tag91>, "VectorBase");
model.component("comp3").coordSystem(<tag9>).feature(<tag91>).selection().
      set(new int[]{2});
You can specify the frame and the coordinate names for the combined system:
string (mesh | material | spatial | geometry)
Composite
model.component(<ctag>).coordSystem().create(<tag9>,<gtag>,"Composite") creates a composite coordinate system that defines a new coordinate system by multiplying the transformation matrices of two other coordinate systems.
PML
model.component(<ctag>).coordSystem().create(<tag10>,<gtag>,"PML") creates a PML (perfectly matched layer), which acts as an artificial absorbing layer in a domain for a wave simulation. You can specify the type and scaling of the PML using the following properties:
Table 2-55: Properties for PML
none, or any defined function.
Imaginary part of stretching function when stretchingType is set to userDefined.
0; 0 (2D)
0; 0; 0 (3D)
none, or any defined function
Real part of stretching function when stretchingType is set to userDefined.
Cartesian | Cylindrical | Spherical
polynomial | rational | userDefined
fromPhysics | userDefined
InfiniteElement
model.component(<ctag>).coordSystem().create(<tag11>,<gtag>,"InfiniteElement") creates an infinite element, which acts as an unbounded domain for a simulation. You can specify the type and scaling of the infinite element using the following properties:
0; 0 (2D)
0; 0; 0 (3D)
Cartesian | Cylindrical | Spherical | userDefined
AbsorbingLayer
model.component(<ctag>).coordSystem().create(<tag12>,<gtag>,"AbsorbingLayer") creates an absorbing layer, which acts as an effective nonreflecting-like boundary condition in transient simulations using a time-explicit solver. You can specify the type and scaling of the absorbing layer using the following properties:
0; 0 (2D)
0; 0; 0 (3D)
Cartesian | Cylindrical | Spherical | userDefined
Example
Create a cylindrical coordinate system with a radial base vector direction that is (0, 1, 0); that is, a coordinate that points in the global y direction:
Code for Use with Java
model.component("comp1").coordSystem().create("sys2", "geom1", "Cylindrical");
model.component("comp1").coordSystem("sys2").setIndex("radialbasevector", "1", 1);
model.component("comp1").coordSystem("sys2").setIndex("radialbasevector", "0", 0);
Code for Use with MATLAB
model.component('comp1').coordSystem.create('sys2', 'geom1', 'Cylindrical');
model.component('comp1').coordSystem('sys2').setIndex('radialbasevector', '1', 1);
model.component('comp1').coordSystem('sys2').setIndex('radialbasevector', '0', 0);