Warlord
10-07-2007, 09:36
mi trovo alle strette nella consegna di qualche porgrammino di fortran ( il bello e' che mi laureo dopo domani e l simulazioni le ho fatte con matlab quasi tutte.. ma la prof si e' convinta che sarebbe bello implementarle in fortran .. :doh: :doh: )
quindi, sfruttando il lavoro di a2000.1 che mi aveva all'epoca dato una grossisima mano :D ( ty again ) dovrei aggiungere soltanto la funzione DO al programma gia' scritto . Mi spiego meglio :
il porgramma scritto mi da 1 singolo risultato per un valore ( f nel mio caso ) che fisso a priori ...
devo fare in modo che mi esca una colonna di valori per f compreso da 0 a 0.1 ( con intervallo di 0.01 .. cioe' per 0 - 0.01 - 0.02 fino a 0.1 )
il porgramma e' questo Program Confronto_HC_KOO_PR
Implicit Real*8(a-z) ! METODO IMPLICITO
Parameter (bolz=1.381d-23, pi=3.14159, c=1d0, prh2o=6.8, preg=207d0, a=4*10**4) ! costanti
Integer*2 x
print *,"Desideri usare acqua o glicoletilenico?"; print*, "1)Acqua"; print*,"2)EG"
read*, x
print *, "Calcolo il valore con Hamilton-Crosser"
print*, "Inserisci il valore della conduttivita' termica delle nanoparticelle"
read*, kp
print*, "Inserisci la sfericita' delle nanoparticelle"
read*, n
print*, "Inserisci la frazione volumetrica delle nanoparticelle"
read*, f
print*, "Inserisci il valore della temperatura"
read*, t
print*, "Inserisci il valore del diametro medio nanoparticellare"
read*, dp
print*, "Inserisci il valore della densita' della nanoparticella"
read*, p
! scelgo b a seconda che f sia maggiore o minore dell'unità
if ( f < 1 ) then
b = bmin1
bmin1 = 0.0137*((100*f)**(-0.8229))
else
b = bmag1
bmag1 = 0.0011*((100*f)**(-0.7272))
endif
! Implementazione tutto su una sola riga (prova)
if (x==1) then; ham = hamiltoncrosser(kp,0.613d0,n,f); else; ham = hamiltoncrosser(kp,0.253d0,n,f); endif
write (1,*), ham !"Valore calcolato con la formula di Hamilton-Crosser:", ham
!Implementazione su piu' righe (prova)
if (x==1) then
ko=koo(kp, 0.613d0, t, p, 1000d0, 4186d0, dp, f, b)
else
ko=koo(kp, 0.613d0, t, p, 1000d0, 4186d0, dp, f, b)
end if
write (2,*) , ko !"Valore calcolato con la formula di Koo:", ko
if(x==1) then
rey=reynolds(t, p, dp, 0.001d0)
pra=prasher(kp,0.613d0,f,prh2o,rey,2.5d0)
else
rey=reynolds(t, p, dp, 0.0021d0);
pra=prasher(kp,0.253d0,f,preg,rey,1.6d0);
endif
write (3,*) , pra !"Valore calcolato con la formula di Prasher:", pra
CONTAINS
Function hamiltoncrosser(kp, kb, n, f)
hamiltoncrosser=((kp+(((3d0/n)-1d0)*kb)-(((3d0/n)-1)*(kb-kp)*f))/(kp+(((3d0/n)-1)*kb)+((kb-kp)*f)));
End Function
Function reynolds(t, p, dp, v)
reynolds=sqrt((18d0*(bolz*t))/(pi*p*dp))/v
End Function
Function koo(kp, kb, t, p, pl, cl, dp, f, b)
koo = ((kp+(2*kb)+2*(kp-kb)*f)/(kp+(2*kb)-(kp-kb)*f)) + (14.8479*f*((100*f)**(-0,8229)));
End Function
Function prasher(kp, kb, f, pr, rey, m)
prasher=((kp+(2*kb)+2*(kp-kb)*f)/(kp+(2*kb)-(kp-kb)*f))*(1+2.97929*f)
End Function
End Program Confronto_HC_KOO_PR
delle 60 e rotte simulazioni volevo almeno portare questo programma in fortran per dare un contentino alla prof ( magari lo scorporo in 3 programmi per ogni function + questo di confronto per aumentare il volume :D ) solo che ho fatto delle porve ma nn ne vengo fuori con l'implementare il DO
dovrebbe essere qualcosa come
do f = 0, 0.1
....
end do
MA non so come impostare l'intervallo di 0.01 come imcremento di volta in volta
Potrebbe essere , dico potrebbe :
do f = 0, 0.1 , 0.01
....
end do
???
Giuro che potrei pagare anche in natura ciunque mi dia qualche dritta entro domani a riguardo !!! sono 3 mesi che lavoro su simulazioni e dover fare ste 4 stupidissime formule sfruttando fortran ( basterebbe un foglio excel ) solo per dare contentino al mio relatore mi sta facendo impazzire!! ( mi laureo giovedi' :mbe: :mbe: in ing.mecc VO )
grazie infinite a chiunque mi puo' dare 1 dritta ... rinnovo il ringraziamento a a2000.1 che all'apoca mi aveva in pratica scritto questo programma ( uso visual fortran )
quindi, sfruttando il lavoro di a2000.1 che mi aveva all'epoca dato una grossisima mano :D ( ty again ) dovrei aggiungere soltanto la funzione DO al programma gia' scritto . Mi spiego meglio :
il porgramma scritto mi da 1 singolo risultato per un valore ( f nel mio caso ) che fisso a priori ...
devo fare in modo che mi esca una colonna di valori per f compreso da 0 a 0.1 ( con intervallo di 0.01 .. cioe' per 0 - 0.01 - 0.02 fino a 0.1 )
il porgramma e' questo Program Confronto_HC_KOO_PR
Implicit Real*8(a-z) ! METODO IMPLICITO
Parameter (bolz=1.381d-23, pi=3.14159, c=1d0, prh2o=6.8, preg=207d0, a=4*10**4) ! costanti
Integer*2 x
print *,"Desideri usare acqua o glicoletilenico?"; print*, "1)Acqua"; print*,"2)EG"
read*, x
print *, "Calcolo il valore con Hamilton-Crosser"
print*, "Inserisci il valore della conduttivita' termica delle nanoparticelle"
read*, kp
print*, "Inserisci la sfericita' delle nanoparticelle"
read*, n
print*, "Inserisci la frazione volumetrica delle nanoparticelle"
read*, f
print*, "Inserisci il valore della temperatura"
read*, t
print*, "Inserisci il valore del diametro medio nanoparticellare"
read*, dp
print*, "Inserisci il valore della densita' della nanoparticella"
read*, p
! scelgo b a seconda che f sia maggiore o minore dell'unità
if ( f < 1 ) then
b = bmin1
bmin1 = 0.0137*((100*f)**(-0.8229))
else
b = bmag1
bmag1 = 0.0011*((100*f)**(-0.7272))
endif
! Implementazione tutto su una sola riga (prova)
if (x==1) then; ham = hamiltoncrosser(kp,0.613d0,n,f); else; ham = hamiltoncrosser(kp,0.253d0,n,f); endif
write (1,*), ham !"Valore calcolato con la formula di Hamilton-Crosser:", ham
!Implementazione su piu' righe (prova)
if (x==1) then
ko=koo(kp, 0.613d0, t, p, 1000d0, 4186d0, dp, f, b)
else
ko=koo(kp, 0.613d0, t, p, 1000d0, 4186d0, dp, f, b)
end if
write (2,*) , ko !"Valore calcolato con la formula di Koo:", ko
if(x==1) then
rey=reynolds(t, p, dp, 0.001d0)
pra=prasher(kp,0.613d0,f,prh2o,rey,2.5d0)
else
rey=reynolds(t, p, dp, 0.0021d0);
pra=prasher(kp,0.253d0,f,preg,rey,1.6d0);
endif
write (3,*) , pra !"Valore calcolato con la formula di Prasher:", pra
CONTAINS
Function hamiltoncrosser(kp, kb, n, f)
hamiltoncrosser=((kp+(((3d0/n)-1d0)*kb)-(((3d0/n)-1)*(kb-kp)*f))/(kp+(((3d0/n)-1)*kb)+((kb-kp)*f)));
End Function
Function reynolds(t, p, dp, v)
reynolds=sqrt((18d0*(bolz*t))/(pi*p*dp))/v
End Function
Function koo(kp, kb, t, p, pl, cl, dp, f, b)
koo = ((kp+(2*kb)+2*(kp-kb)*f)/(kp+(2*kb)-(kp-kb)*f)) + (14.8479*f*((100*f)**(-0,8229)));
End Function
Function prasher(kp, kb, f, pr, rey, m)
prasher=((kp+(2*kb)+2*(kp-kb)*f)/(kp+(2*kb)-(kp-kb)*f))*(1+2.97929*f)
End Function
End Program Confronto_HC_KOO_PR
delle 60 e rotte simulazioni volevo almeno portare questo programma in fortran per dare un contentino alla prof ( magari lo scorporo in 3 programmi per ogni function + questo di confronto per aumentare il volume :D ) solo che ho fatto delle porve ma nn ne vengo fuori con l'implementare il DO
dovrebbe essere qualcosa come
do f = 0, 0.1
....
end do
MA non so come impostare l'intervallo di 0.01 come imcremento di volta in volta
Potrebbe essere , dico potrebbe :
do f = 0, 0.1 , 0.01
....
end do
???
Giuro che potrei pagare anche in natura ciunque mi dia qualche dritta entro domani a riguardo !!! sono 3 mesi che lavoro su simulazioni e dover fare ste 4 stupidissime formule sfruttando fortran ( basterebbe un foglio excel ) solo per dare contentino al mio relatore mi sta facendo impazzire!! ( mi laureo giovedi' :mbe: :mbe: in ing.mecc VO )
grazie infinite a chiunque mi puo' dare 1 dritta ... rinnovo il ringraziamento a a2000.1 che all'apoca mi aveva in pratica scritto questo programma ( uso visual fortran )