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;