Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Honza1Ubuntu 01. 10. 2018, 18:26:41
-
Ahoj
Mam Fortranovsky program pro vypocet, ktery pocita urcity model a pri tom pravidelne zapisuje data na disk a spousti skript pro tvorbu grafu v Gnuplotu.
Vypis hodnot do TXT souboru - skript ve Fortranu
!Vypis hodnot pro tvorbu mapy
open(4,file='DataZVypoctu'//trim(STW)//'.txt',status='unknown', access='append')
write(4,fmt="(T1,I14,T30,E20.14,T60,E20.14,T90,E20.14,T120,E20.14,T150,E20.14,T180,E20.14,T210,E20.14,T240,E20.14,T270,E20.14,T300,E20.14,T330,E20.14,T360,E20.14, &
T390,E20.14)") &
ID,Time,TimeDay,TimeDaySyn,TimeYear,Dt,RA,DEC,T,TpartialT,Q,S,K,ForcingT ! KST jsou hodnoty, PST derivace
close(4,status='keep')
!Zavolani skriptu pro tvoreni map v Gnuplotu
call system('Bash_Skript_Pro_Vytvoreni_Mapy.sh')
Tvorba grafu v Gnuplotu - Bash_Skript_Pro_Vytvoreni_Mapy.sh
awk '{ print $'${CollA}'" "$'${CollB}'" "$'${CollC}'}'< DataZVypoctu.txt > DataDoMapy.dat ## Vybrani 3 sloupcu pro Gnuplot
## Vysledkem PNG obrazek heatmap.png, skript pro Gluplot pouzije datovy soubor DataDoMapy.dat
mv heatmap.png ${ST}_MAP_${TP}_${PR}_${VEL}.png ## Prejmenovani souboru
./Interp.out < DataDoMapy.dat > DataDoMapyInterplolovana.dat ## vytvareni dat pro interpolovanou mapu pomoci Fortranovskeho programu
gnuplot Creating_Map_Sphere.plt ## Vytvoreni interpolovane mapy, vysledkeme je PNG soubor
Datove soubory jsou velke a narocne pro zapis na disk, vysledne PNG obrazky maji cca 50-200 kB, vysledkem jsou vzdy 2 klasicke a 2 interpolovane mapy, celkem 4 PNG obrazky. Vsechny velke datove soubory se po probehnuti cyklu smazou.
DataZVypoctu.txt cca 65 MB
DataDoMapy.dat cca 15 MB
DataDoMapyInterplolovana.dat cca 90 MB
Pokud by tento cyklus bezel radove stokrat, tak by to jeste nevadilo moc, ale dany cyklus kresleni map bezi cca 300 000 krat. Datove soubory se zapisuji na disk, a pak se po vytvoreni mapy smazou. Interpolace zabere par minut CPU, coz neni tak hrozne, CPU neresim, a na RAM to taky moc narocny neni, do 500 MB.
Otazkou je, jak to udelat, aby Fortranovsky skript i bash skript nezapisoval velke datove soubory na disk, ale nejak je v RAM predal skriptu pro Gnuplot a na disk se zapsal jen vysledny PNG obrazek
-
Ramdisk - a kód může zůstat beze změn :)
-
Moznosti je nekolik:
- pojmenovana roura
- plot '<cat' using ... (a nebo jiny prikaz)
- plot /dev/stdin using ...
-
něco obdobného řešil před časem a to pomocí roury, zjednodušeně funguje :
cat data | gnuplot -p -e "plot '< cat -' using 1:2 with lines"