Files
2025-12-17 11:00:57 +08:00

168 lines
6.1 KiB
Plaintext
Executable File

.. _doping :
&nbsp_place_holder;
> **_DOPING_**
> > Interpolates between mesh object attributes or assigns values to a mesh
object attribute.
Options **constant **and **gaussian** assign values to a mesh object
attribute.&nbsp_place_holder; Options **table**, **integer1**, and **integer2
**interpolate from a reference mesh object.
The **constant **option assigns a constant value to all specified nodes.
The **gaussian **option creates a very special gaussian distribution around a
line or point.&nbsp_place_holder; The bounding box (x1,y1,z1) to (x2,y2,z2)
specifies where the peak concentration will be, Note: y2 is ignored; if z1=z2
then the distribution will be around a point.&nbsp_place_holder; All
coordinates are assumed to be given as Cartesian, **xyz** is
required.&nbsp_place_holder; The value assigned to the attribute is determined
by the Gaussian distribution:
>>
>>> value = concentration * exp(-(L/std_dev)**2)
>>
>> where L is the effective distance and can be represented as:
>>
>>> L = sqrt( dy**2 + (1/lateral_diffusion)*(dx**2 + dz**2) )
>>
>> and where
>>
>>> dy = y-y1 (y2 ignored)
dx = x-x1 if x < x1 < x2
= 0 if x1 < x < x2
= x-x2 if x1 < x2 < x
dz similar to dx.
>>
>> The **table** option interpolates an attribute from a reference mesh object
and reference attribute onto the current mesh object using** linear**, **log**
or **asinh** interpolation (the default is linear).&nbsp_place_holder; In the
case of 2D tabular interpolation, additional arguments specify the planar
correspondence for the interpolation: geom_out and geom_ref refer to the
output and reference orientation of a 2D axial distribution and may take the
values, **xy, yz, xz**,&nbsp_place_holder; .
>>
>> In all cases, field_out specifies the name of the attribute, ifirst, ilast,
istride specify a point set restriction, and **set add or subtract** indicate
if the calculated or input-value is added to, subtracted from or used to set
the existing node attribute value.
>>
>> If the values to be doped (interpolated) are integers (options **integer1
**and **integer2**), doping works in two ways.&nbsp_place_holder; For integer
doping, only the **set** option is implemented.
If the second field is **integer1**, the new nodal attributes are based on
element material types. Set field_out and attr_ref to **imt1** in this case.
The **integer1** option is implemented only for setting node material
(**imt1**). The **imt1** values of the active mesh object nodes will be set by
determining which element in the reference mesh object the node falls in. This
element's material (**itetclr**) value is then assigned to the node **imt1**.
>>
>> The **integer2** option sets node based attributes in the active mesh
object by determining which voronoi cell in the reference mesh object the node
falls in. Then the value for the node corresponding to this voronoi cell is
copied to the active node.
If the second field is **integer2**, the new nodal attributes are based on the
table attribute types using the Voronoi cells around the table nodes.
For integer doping, function can be** min** or **max** to choose what happens
if a cmo_out node falls on a boundary between two elements or Voronoi cells.
For 3d, Voronoi cell based doping, function can also be **minp** or **maxp**
which makes any cmo_out nodes that fall outside the cmo_table geometry set to
the maximum number of materials plus one. Mapset can be set to **create**,
**use**, or left blank. If **create** is used then an idop attribute is formed
that maps the cmo_table nodes to the cmo_out nodes. If **use** is used, doping
will read and use this previously formed and saved mapping. Note that doping
of integers should be done without child/parent relationships. If parents
exist, the doping results are unpredictable at interface boundaries because
the value of parent nodes are unpredictable there.
>>
>> FORMAT:
>>
>>> **doping**/**constant**/field_out/**set|add|sub/
**ifirst,ilast,istride/value
**doping/gaussian/**field_out/**set|add|sub**/ ifirst,ilast,istride/
**xyz**/x1,y1,z1/x2,y2,z2/lateral_diffusion/ concentration/standard_deviation/
**doping/table/**field_out/**set|add|sub**/cmo_ref/attr_ref/[**linear|log**|**asinh**]
**doping/table/**field_out/**set|add|sub**/cmo_ref/attr_ref/[**linear|log**|**asinh**]/ [geom_out/geom_ref]
**doping/integer1**/**imt1**/**set**/ifirst,ilast,istride/cmo_ref /**imt1**/**min**|**max**
**doping/integer2/**field_out2**/set**/ifirst,ilast,istride/cmo_ref/attr_ref/
**min**|**max**|**minp**|**maxp**/[**create**|**use**]
>>
>> EXAMPLE:
>>
>>> **doping**/**constant**/density/**set**/**pset,get**,mypset/9.73
For the current mesh object, the value of the attribute density will be set to
9.73
for all nodes in the point set mypset.
**doping/gaussian**/density/**add**/**pset**,mypset/**xyz**/
0.0,0.5,0.1/0.5,0.5,0.4/0.5/5.0e+18/0.225
For the current mesh object, for nodes in mypset, the value of the
attribute density will be augmented by
the value of the distribution as defined above.
**doping**/**table**/my_field/**set**/1,0,0/cmo_ref/attr_ref/**log**
For the current mesh object, the value of the attribute my_field will be set
by
interpolating from the reference mesh object and attribute.
**doping**/**table**/Saturation /**set**/1,0,0/cmo_course/saturation_course/**linear**/**zx**/**yx**/
In this case the yx plane from the reference cmo is interpolated onto the zx
plane of the
current mesh object
**doping/integer1**/imt1/**set**/1,0,0/cmo_old/imt1/**min**
See which element of cmo_old each node of the current mesh object falls in,
and set the imt1 attribute value to the itetclr of the element in
cmo_old.&nbsp_place_holder; If the node falls in more than one element use the
smallest itetclr.
**doping/integer2/**rad2**/set**/1,0,0/cmo_old/rad1/**min/create**
Create the voronoi cells around the nodes in cmo_old.&nbsp_place_holder; See
which voronoi cell the nodes in the current mesh object fall in and set the
value of the attribute rad2 from the value of the attribute rad1 in the
reference mesh object.&nbsp_place_holder; If there is a conflict use the
smallest value.&nbsp_place_holder; Create a new attribute called idop as
explained above.