Altair Compose ile CSV’den bir H3D dosyasına yeni sonuçlar nasıl eklenir?

Altair Compose, H3D* dosyaları da dahil olmak üzere model verilerini ve sonuçları içeren CAE sonuç dosyalarını işlemek için kütüphaneler içerir. Compose ile H3D dosyalarını okuyabilir, işleyebilir ve yeni bir H3D dosyası oluşturabilirsiniz.

Yaygın kullanım durumlarından biri de mevcut bir H3D dosyasına, Compose‘da sonradan işlediğiniz verileri eklemek olabilir. Bu veriler başka bir dosya biçiminde olabilir. Bu yazıda, yeni verilerimizin kaynağı olarak bir CSV kullanacağız.

Öncelikle kullanıcı H3D dosyasını ve CSV dosyalarını seçmelidir. Bunun için,

  • uigetfile işlevi, kullanıcının bir veya daha fazla dosya seçebileceği (shift tuşunu kullanarak) bir açılır menü açar ve
  • strcat, dosyanın yolunu ve adını birleştirir, böylece betiğimizin geri kalanında kullanabiliriz.

close all, clear, clc

% Select inputs
[h3dName, h3dPath, ~] = uigetfile(‘*.h3d’, ‘Select H3D File’);
cd(h3dPath);
h3dFile = strcat(h3dPath, h3dName);
[csvNames, csvPath, ~] = uigetfile(‘*.csv’, ‘Select CSV Files’);
csvFiles = strcat(csvPath, csvNames);

Girdiler belirlendikten sonra, H3D dosyasını orijinal halini de korumak için kopyalayabilir ve bunu

  • createh3dfile ile ekleme modunda açabiliriz. Ekleme modu, mevcut verilerin dosyadan silinmeyeceği anlamına gelmektedir.

% Copy H3D file & open it for appending data
h3dOutput = [h3dName(1:end-4), ‘_copy.h3d’];
copyfile(h3dFile, h3dOutput, ‘f’);
fid = createh3dfile(h3dOutput, ‘append’);

Ardından, dosyadan sıralı bir şekilde bilgi alacağız.

  • getsubcaselist ile mevcut olan tek subcase (loadstep) seçilir ve ardından mevcut her veri türü hakkında bilgi almak için bir for döngüsü kullanılır.
  • getfilteredtypelist ile zaman ve dizin verileri hariç mevcut tüm veri türlerini döndürmektedir.
  • getreqlist kullanılarak elde edilen, veri türüyle ilişkili elemanların ve node’ların, isteklere bağlı olarak, elemanlara mı yoksa node’lara mı bağlamamız gerektiğini belirleriz.

% Get subcase name
subcase = getsubcaselist(h3dFile){1};


% Go through each datatype present in H3D
datatypes = getfilteredtypelist(h3dFile, 1);
for i = 1:numel(datatypes)

% Get datatype, requests in it & assign bind accordingly
datatype = datatypes{i};
requestList = getreqlist(h3dFile, subcase, datatype);

if strncmpi(requestList{1}, ‘N’, 1)
bind = ‘node’;
else
bind = ‘elem’;
end

Şimdi CSV dosyalarından eklemek istediğimiz verileri okumalı ve buna göre düzenlemeliyiz. Bu durumda, ilk sütun istekleri içerirken, ikinci sütun değerini içerir.

% Read data from CSV
data = csvread(csvFiles);
requests = data(:,1);
values = data(:,2);

Dosyaya veri yazmadan önceki son adım, yeni veri tipi ve subcase (loadstep) ID’lerini tanımlamaktır. Bunu, yeni verilerin dosyanın hangi bölümünde saklanacağını berlitmek olarak düşünebilirsiniz. Yeni veri tiplerine ve subcase’lere (loadstep) bir isim verilir. (bu sırayla yapılmalıdır)

% Create new datatype ID and write data into it
    datatypeID = createh3ddatatype(fid, [datatype, ‘_appended’], ‘scalar’, bind);
    new_subcase = [subcase, ‘_’, datatype, ‘_appended’];
    subcaseID = createh3dsubcase(fid, new_subcase, new_subcase);

Son olarak, her bir isteğimizdeki değerlerimizi istediğimiz veri türü ve subcase’te yazmak için writeh3ddata‘yı çağırıyoruz ve for döngüsü bittiğinde H3D dosyasını kapatıyoruz.

% Write new data in file
             R = writeh3ddata(fid, new_subcase, 1, datatypeID, 0, 0, requests, values);

             end

% Close H3D file
closeh3dfile(fid);

Gördüğünüz gibi, zaten var olan bir H3D dosyasına yeni subcase’ler yazmak basittir.

Altair Compose yazılımını Altair ONE Marketplace‘den indirebilirsiniz. Öğrenciler için ücretsiz ve full versiyonu buradan talep edebiilrsiniz. Soru ve taleplerinizi iletişim formunu kullanarak iletebilirsiniz.

* .h3d dosyası, hem model hem de sonuç verilerini içeren sıkıştırılmış bir ikili (binary) dosyadır. Altair simülasyon çözümlerinin sonucunda oluşturulmaktadır.