Create and copy multi-dimensional arraysΒΆ

This example focuses on creating multi-dimensional arrays, using complex type and copying IDS structures.

See also

API documentation for ids_validate()

    % create empty gyrokinetics_local
    % NOTE: gyrokinetics_local is an alpha IDS
    gyrokinetics_local = ids_init('gyrokinetics_local');

    % there is mandatory field <ids>/ids_properties/homogeneous_time
    gyrokinetics_local.ids_properties.homogeneous_time = 1; 

    % some IDS fields contain multi-dimensional arrays
    gyrokinetics_local.non_linear.fields_zonal_2d.phi_potential_perturbed_norm = ones(3,3);
    fprintf('Filled 2D array (gyrokinetics_local/non_linear/fields_zonal_2d/phi_potential_perturbed_norm):\n');
    disp(gyrokinetics_local.non_linear.fields_zonal_2d.phi_potential_perturbed_norm);

    % some fields have coordinates consistency. isd_validate() method checks for this consistency.
    % example of field of this type is gyrokinetics_local/non_linear/fields_zonal_2d/phi_potential_perturbed_norm
    % it's first dimension size must be equal to non_linear/radial_wavevector_norm size and second dimension size equal to non_linear/time_norm
    try
        ids_validate('gyrokinetics_local', gyrokinetics_local);
    catch ME
        disp('Caught exception (raised intentionally)');
    end

    % to fix this
    gyrokinetics_local.non_linear.radial_wavevector_norm = [1.0, 2.0, 3.0];
    gyrokinetics_local.non_linear.time_norm              = [1.0, 2.0, 3.0];

    % gyrokinetics_local/linear.wavevector(i1)/eigenmode(i2)/fields.phi_potential_perturbed_norm has two dimensions and stores complex numbers

    gyrokinetics_local.linear.wavevector = ids_allocate('gyrokinetics_local', 'linear/wavevector', 1);
    gyrokinetics_local.linear.wavevector{1}.eigenmode = ids_allocate('gyrokinetics_local', 'linear/wavevector/eigenmode', 1);
    gyrokinetics_local.linear.wavevector{1}.eigenmode{1}.fields.phi_potential_perturbed_norm = complex(ones(3,3),ones(3,3)); 

    % right way to copy IDS
    gyrokinetics_local_copy = gyrokinetics_local;

    gyrokinetics_local_copy.linear.wavevector{1}.eigenmode{1}.fields.phi_potential_perturbed_norm = complex(ones(2,2),ones(2,2));
    fprintf('Original value:\n');
    disp(gyrokinetics_local.linear.wavevector{1}.eigenmode{1}.fields.phi_potential_perturbed_norm);
    fprintf('Copied   value:\n');
    disp(gyrokinetics_local_copy.linear.wavevector{1}.eigenmode{1}.fields.phi_potential_perturbed_norm);

    % IDSs can be printed using fprintf() and disp() methods.
    fprintf('gyrokinetics_local.ids_properties.homogeneous_time:   %i\n', gyrokinetics_local.ids_properties.homogeneous_time);
    fprintf('gyrokinetics_local.non_linear.radial_wavevector_norm: %i %i %i\n', gyrokinetics_local.non_linear.radial_wavevector_norm);
    fprintf('gyrokinetics_local.non_linear.time_norm:              %i %i %i\n', gyrokinetics_local.non_linear.time_norm);
    fprintf('gyrokinetics_local/non_linear/fields_zonal_2d/phi_potential_perturbed_norm:\n');
    disp(gyrokinetics_local.non_linear.fields_zonal_2d.phi_potential_perturbed_norm);
    fprintf('gyrokinetics_local.linear.wavevector{1}.eigenmode{1}.fields.phi_potential_perturbed_norm:\n');
    disp(gyrokinetics_local.linear.wavevector{1}.eigenmode{1}.fields.phi_potential_perturbed_norm);

    clear gyrokinetics_local;
    clear gyrokinetics_local_copy;