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.

Identifier examples (from part of the core_sources/source identifier)

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"