Identifiers¶
The “identifier” structure is used to provide an enumerated list of options.
For a complete reference of all available identifiers, see the IMAS Data Dictionary Identifiers documentation.
Index |
Name |
Description |
|---|---|---|
2 |
NBI |
Source from Neutral Beam Injection |
3 |
EC |
Sources from heating at the electron cyclotron heating and current drive |
4 |
LH |
Sources from lower hybrid heating and current drive |
5 |
IC |
Sources from heating at the ion cyclotron range of frequencies |
6 |
fusion |
Sources from fusion reactions, e.g. alpha particle heating |
Using the identifiers library¶
Below examples illustrates how to use the identifiers in your Java programs.
Java example 1: obtain identifier information of coordinate identifier
phi¶public class identifier_example1 {
public static void main(String[] args) {
// Get coordinate identifier information for "phi"
int idx = coordinate_identifier.getIndex("phi");
// Display coordinate identifier details
System.out.println("Coordinate Identifier Information for 'phi':");
System.out.println(" Index: " + idx);
System.out.println(" Data type: " + coordinate_identifier.getName(idx));
System.out.println(" Description: " + coordinate_identifier.getDescription(idx));
}
}
// $ java -cp $CLASSPATH identifier_example1.java
// Coordinate Identifier Information for 'phi':
// Index: 5
// Data type: phi
// Description: Toroidal angle
Java example 2: Use the identifier library to fill the
NBI label in the core_sources IDS¶// Import the Access Layer and required identifiers
import java.io.*;
import imasjava.*;
public class identifier_example2 {
public static void main(String[] args) {
// Create IDS instance
imas.equilibrium equilibrium = new imas.equilibrium();
// Configure equilibrium IDS
equilibrium.ids_properties.homogeneous_time = 1;
equilibrium.ids_properties.comment = "Test equilibrium IDS";
// Setup equilibrium time slice and profiles
equilibrium.time_slice = new imas.equilibrium.time_sliceClass[1];
equilibrium.time_slice[0] = new imas.equilibrium.time_sliceClass();
equilibrium.time_slice[0].profiles_2d = new imas.equilibrium.time_sliceClass.profiles_2dClass[1];
equilibrium.time_slice[0].profiles_2d[0] = new imas.equilibrium.time_sliceClass.profiles_2dClass();
poloidal_plane_coordinates_identifier.setIdentifier(equilibrium.time_slice[0].profiles_2d[0].grid_type, "rectangular");
// // Output equilibrium grid type information
System.out.println("Equilibrium Grid Type:");
System.out.println(" Name: " + equilibrium.time_slice[0].profiles_2d[0].grid_type.name);
System.out.println(" Index: " + equilibrium.time_slice[0].profiles_2d[0].grid_type.index);
System.out.println(" Description: " + equilibrium.time_slice[0].profiles_2d[0].grid_type.description);
// Configure distribution sources IDS
imas.distribution_sources distribution_sources = new imas.distribution_sources();
distribution_sources.ids_properties.homogeneous_time = 1;
distribution_sources.ids_properties.comment = "Test distribution sources IDS";
// Setup distribution sources structure
distribution_sources.source = new imas.distribution_sources.sourceClass[1];
distribution_sources.source[0] = new imas.distribution_sources.sourceClass();
distribution_sources.source[0].process = new imas.distribution_sources.sourceClass.processClass[1];
distribution_sources.source[0].process[0] = new imas.distribution_sources.sourceClass.processClass();
// Set distribution source type identifier using reflection-based method
distribution_source_identifier.setIdentifier(distribution_sources.source[0].process[0].type, "NBI");
// Output distribution source type information
System.out.println("Distribution Source Type:");
System.out.println(" Name: " + distribution_sources.source[0].process[0].type.name);
System.out.println(" Index: " + distribution_sources.source[0].process[0].type.index);
System.out.println(" Description: " + distribution_sources.source[0].process[0].type.description);
}
}
// $ java -cp $CLASSPATH identifier_example2.java
// Equilibrium Grid Type:
// Name: rectangular
// Index: 1
// Description: Cylindrical R,Z ala eqdsk (R=dim1, Z=dim2). In this case the position arrays should not be filled since they are redundant with grid/dim1 and dim2.
// Distribution Source Type:
// Name: NBI
// Index: 1
// Description: Source from neutral beam injection
Java example 3: Use the identifier library to fill the type of coordinate system used in the
equilibrium IDS¶// Import the Access Layer and required identifiers
import java.io.*;
import imasjava.*;
public class identifier_example3 {
public static void main(String[] args) {
// Create IDS instance
imas.wall wall = new imas.wall();
wall.ids_properties.homogeneous_time = 1;
wall.ids_properties.comment = "Test wall IDS with materials";
String[] names = {"W", "C", "Be", "Cu", "SS"};
// Setup wall structure with proper array initialization
wall.description_ggd = new imas.wall.description_ggdClass[1];
wall.description_ggd[0] = new imas.wall.description_ggdClass();
wall.description_ggd[0].material = new imas.wall.description_ggdClass.materialClass[1];
wall.description_ggd[0].material[0] = new imas.wall.description_ggdClass.materialClass();
wall.description_ggd[0].material[0].grid_subset = new imas.wall.description_ggdClass.materialClass.grid_subsetClass[1];
wall.description_ggd[0].material[0].grid_subset[0] = new imas.wall.description_ggdClass.materialClass.grid_subsetClass();
materials_identifier.setIdentifier(wall.description_ggd[0].material[0].grid_subset[0].identifiers, names);
// Output material information
int numMaterials = wall.description_ggd[0].material[0].grid_subset[0].identifiers.indices.getDim();
System.out.println("Number of materials: " + numMaterials);
for (int i = 0; i < numMaterials; i++) {
System.out.println("Material " + (i + 1) + ":");
System.out.println(" Index: " + wall.description_ggd[0].material[0].grid_subset[0].identifiers.indices.getElementAt(i));
System.out.println(" Name: \"" + wall.description_ggd[0].material[0].grid_subset[0].identifiers.names.getElementAt(i) + "\"");
System.out.println(" Description: \"" + wall.description_ggd[0].material[0].grid_subset[0].identifiers.descriptions.getElementAt(i) + "\"");
}
}
}
// $ java -cp $CLASSPATH identifier_example3.java
// Number of materials: 5
// Material 1:
// Index: 2
// Name: "W"
// Description: "Tungsten"
// Material 2:
// Index: 1
// Name: "C"
// Description: "Carbon"
// Material 3:
// Index: 10
// Name: "Be"
// Description: "Beryllium"
// Material 4:
// Index: 18
// Name: "Cu"
// Description: "Copper"
// Material 5:
// Index: 4
// Name: "SS"
// Description: "Stainless steel"