Das glättende Feld

Hallo neues an der Fortranbaustelle.

Nun ja das Feld hat mich quasi in seinen Bann gezogen und so habe ich heute Version 0.1 fertig programmiert und das ging schon mal mächtig daneben war aber ganz interesannt. 🙂

Nun ja die Bedingung für das Feld ist ja das wenn ich eine Zelle mit den Kordinaten (z,s) habe

so ist ihr Inhalt das arithmetische Mitte der vier Nachbarzellen:

also f(z,s) = 0.25[ f(z+1,s) + f(z-1,s) + f(z,s-1) + f(z,s+1) ]

Think about it 😉

Nun ja der Punkt ist nun, ich dachte ich gebe einen Rand vor und dann muss der Computer die restlichen Felder bestimmen, nur wie? Gendanke war unächst analytisch. Es gab sich ein wunderbar lösbares Gleichungssystem. aber mir erschien einfach der aufwand als unglaublich groß einen gausalgorithmus zu implmentieren und dazu habe ich noch keine ahnung wie 😉

Ich dachte mir ok wie setzen einfach null als startwert und berechnen einfach feld für feld immer und immer wieder.

Gesagt getan und was kam heraus oh wunder. alle werte namen die werte des rand an.

Spannen ist es nun vlt das ganze über die Zeit zu plotten und zu sehen wie sich langsam der Inhalt des Feldes dem Rand annähred oder wenn der Rand aus verschiedenen Werte besteht oder nicht um das Array herum geht. Hier soweit der Code zum nach kompelieren.

_______

program field
!Veriablendeklaration
real::feld(10,10)
integer::z=1 !Zeilenlaufvariable
integer::s=1 !Spaltenlaufvariable
integer::i=100 !Interationszähler
real::rand
!Hauptprogramm
print *,”Das ist das Fritzsche Feldberechnungsprogramm 0.1″
!Feld mit Null befüllen
do while (z<11)
do while(s<11)
feld(z,s)=0
s=s+1
end do
s=1
z=z+1
end do

!Randbedingung aufgeben
print *, ” Welchen Rand wollen sie auf geben?”
read *, rand

!Zuerst die Zeilen
z=1
do while(z<11)
feld(z,1)=rand
feld(z,10)=rand
z=z+1
end do
s=1
z=1
!dann die Spaöten beschreiben
do while(s<11)
feld(1,s)=rand
feld(10,s)=rand
s=s+1
end do
i=1
do while(i<100)
s=2
z=2
do while (z<10)
do while(s<10)
feld(z,s)=(feld(z+1,s)+feld(z-1,s)+feld(z,s+1)+feld(z,s-1))/4

s=s+1
end do
s=2
z=z+1
end do
print *, feld(5,5)
i=i+1
end do

!Nun werden wir mit den Interationen beginnen
print *, feld
end program field

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s