CANBULA Bilim Bilişim Günlüğü

9Ara/110

Çok boyutlu dizilerin parametre olarak tanımlanması

Yazdığımız programların genelinde değişmeden kullanılacak ancak gerektiği zaman tek yerden değiştirebileceğimiz sabitler kullanırız. Bu sabitler FORTRAN77'de "common block" olarak tanımlanıyordu ancak Fortran 90/95 ve sonrasında bu kullanım kaldırıldı. Bu kullanım yerine modüllerden destek alınmalıdır. Bu yazıda hem skaler değişkenlerin hem de tek ve çok boyutlu dizilerin (array) parametre olarak tanımlanmasını anlatmaya çalışacağım.

Bir çok dosyadan oluşan programlarımızda tüm dosyalarda kullanılacak ortak sabitleri bir modülde aşağıdaki gibi tanımlayabiliriz.

Selec All Code:
1
2
3
4
module sabitler
  implicit none
  real,parameter :: pi = 3.14
end module sabitler

Bu yolla tanımladığımız sabitleri ana programımızda, subroutine'lerde veya function'larda aşağıdaki gibi kullanabiliriz.

Selec All Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program deneme
  use sabitler
  real,external :: fonksiyonum
  call rutinim
  write(*,*) fonksiyonum(2.)
end program deneme
 
function fonksiyonum(x)
  use sabitler
  real,intent(in) :: x
  real :: fonksiyonum
  fonksiyonum = x*pi
end function fonksiyonum
 
subroutine rutinim
  use sabitler
  write(*,*) pi
end subroutine rutinim

Buradaki kod bir ana program, bir reel sayı ile pi sabitinin çarpımını döndüren bir fonksiyon ve pi sabitinin değerini ekrana yazdıran bir subroutine'i içeriyor. Gördüğünüz gibi her 3 öğede de sabitler modülü kullanılıyor, dolayısıyla da pi sabitinin değeri sabitler modülünde tanımlandığı gibidir. Bu 3 öğe ayrı dosyalarda da tanımlanabilirdi.

Buraya kadar yazdıklarım genel tanımlamalar, esas işin zor kısmı dizilerde. 1. dereceden bir dizi (böyle bir diziye vektör de denebilir) aşağıdaki gibi kolaylıkla parametre olarak tanımlanabilir.

Selec All Code:
1
real,dimension(1:3),parameter :: sabitvektor = (/ 0.5,1.8,2.4 /)

Bu şekilde yapılan tanımlama biçimine array constructor denilir ve görüldüğü gibi çok kullanışlı-basit bir yöntemdir. Ancak yalnızca 1. dereceden dizilerde işe yarar dolayısıyla çok boyutlu (örneğin 3x3 matris) dizilerde ufak ancak genelde bilinmeyen bir hile yapacağız.

Ben 2. dereceden bir dizi için yapılacak işlemi özetleyeceğim, aynı mantık daha yüksek derecelere de kolayca uygulanabilir. M'e N boyutlu bir dizi için M ile N'in çarpımı kadar boyutlu 1. dereceden bir dizi oluşturup daha sonra onu M'e N boyutlu bir dizi olarak şekil değiştireceğiz. Bu işlem için "reshape" fonksiyonundan faydalanacağız.

Selec All Code:
1
real,dimension(1:2,1:3),parameter :: reshape((/ 1,3,5,2,4,6 /),(/2,3/))

Bu ifade ile 6 boyutlu 1. dereceden dizinin array constructor'ı yardımıyla 2'ye 3 boyutlu 2. dereceden bir diziyi parametre olarak tanımlıyoruz.

Fortran ile ilgili çok fazla Türkçe kaynak bulunmuyor, ben burada yalnızca insanların zorlanabileceğini düşündüğüm özel noktaları paylaşıyorum ancak soru sormaktan çekinmeyin vakit buldukça cevap yazarım.

Bu yazıyı beğendiniz mi?

RSS Kaynağımıza abone olun!

Yorumlar (0) Geri izlemeler (0)

Yorum yapılmadı.


Leave a comment

(required)

Geri izleme yok.