Premetto che so praticamente nulla di programmazione purtroppo e che purtroppo in una prima ricerca trovare qualcuno competente con linguaggi "scientifici" e' stata dura ..
sta di fatto che per la Tesi mi sia stato chiesto , all'ultimo o melgio venerdi', di scrivere poche righe di codice per confrontare i risultati che si ottengono con 3 diverse funzioni ( formule ricavate sperimentalmente che dovrebbero descrivere lo stesso fenomeno fisico , nel mio caso conduttivita' di un nanofluido )
Considerando che non so nulla di programmazione, avevo gia' scritto la mia tesi, sono rimasto spiazzato dal dover imparare un linguaggio come il fortran ( specificatamente mi era stato chiesto di usare compaq visual fortran ) per implementare qualche riga di codiche ( 3 formule in croce ) entro martedi' ..
preso da buona volonta' cmq ( e nn potendo dire di no! ) mi sono fatto aiutare da 1 amico a scrivere in velocita'il programma in c++ ( unico linguaggio di cui qualcosina ricordavo anche se davvero poco ) pensando di riuscire al porting in fortran ( scoprendo che il contrario e' fattibile mentre nn C++ to Fortran ) !!
Chiedo umilmente se potete darmi qualche consiglio per riscrivere il programma ( che poi dovrei implementare anche meglio .. e' stato un lavoro fatto in fretta e male ) o come trasformarlo..
provo a postarlo ( sono poche righe ) sperando in qualche aiuto all'ultimo momento ( martedi' e' vicinissimo , nemmeno il tempo di contattare qualcuno )
--------------------------------------------------------------
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
double bolz=1.381*(pow(10.0,-23)); !costante di boltzman
double pi=3.14159; ! pigreco
double c=1;
double prh2o=5.8; ! num di prandtl x acqua
double preg=150; ! num di prandtl x glicole etilenico EG
double a=4*(pow(10.0,4));
double m=2.5;
double hamiltoncrosser(double kp,double kb,double n,double f){ !f frazione volumetrica
double x=((kp+(((3/n)-1)*kb)-(((3/n)-1)*(kb-kp)*f))/(kp+(((3/n)-1)*kb)+((kb-kp)*f)));
return x;
}
double kumar(double t,double dp,double f,double db,double kb,double v){
double x=(((((2*bolz*t)/(pi*v*dp*dp)))*((f*db/2)/(kb*(1-f)*(dp/2))))*c)+1;
return x;
}
double reynolds(double kb,double t,double p,double dp,double v){
double x=(1/v)*sqrt((18*(kb*t))/(pi*p*dp));
return x;
}
double prasher(double kp,double kb,double f,double pr,double rey){
double x=((kp+(2*kb)+2*(kp-kb)*f)/(kp+(2*kb)-(kp-kb)*f))*(a*pow(rey,m)*pow(pr,0.333)*f);
return x;
}
int main() {
double ham;
double kum;
double pra;
double rey;
cout<<"Desideri usare acqua o glicoletilenico?"<<endl<<"1)Acqua"<<endl<<"2)EG"<< endl;
int x;
cin>>x;
cout<<"Calcolo il valore con Hamilton-Crosser"<<endl;
cout<<"Inserisci il valore della conduttivita' termica delle nanoparticelle"<<endl;
double kp;
cin>>kp;
cout<<"Inserisci la sfericita' delle nanoparticelle"<<endl;
double n;
cin>>n;
cout<<"Inserisci la frazione volumetrica delle nanoparticelle"<<endl;
double f;
cin>>f;
if(x==1){ham=hamiltoncrosser(kp,0.613,n,f);}
else {ham=hamiltoncrosser(kp,0.253,n,f);}
cout<<"Valore calcolato con la formula di Hamilton-Crosser:"<<ham<<endl;
cout<<"Calcolo il valore con Kumar"<<endl;
cout<<"Inserisci il valore della temperatura"<<endl;
double t;
cin>>t;
cout<<"Inserisci il valore del diametro medio nanoparticellare"<<endl;
double dp;
cin>>dp;
cout<<"Inserisci il valore della viscosita' dinamica del fluido"<<endl;
double v;
cin>>v;
if(x==1){kum=kumar(t,dp,f,0.00,0.613,v);}
else{kum=kumar(t,dp,f,0.00,0.253,v);}
cout<<"Valore calcolato con la formula di Kumar:"<<kum<<endl;
cout<<"Calcolo il valore con Prasher"<<endl;
cout<<"Inserisci il valore della densita' della nanoparticella"<<endl;
double p;
cin>>p;
if(x==1){
rey=reynolds(0.613,t,p,dp,v);
pra=prasher(kp,0.613,f,prh2o,rey);
}
else{
rey=reynolds(0.253,t,p,dp,v);
pra=prasher(kp,0.253,f,preg,rey);
}
cout<<"Valore calcolato con la formula di Prasher:"<<pra<<endl;
}
----------------------------------------------------------------
innanzitutto c'e' da dire che lo scopo e' trovare corrispondenza tra la mia x ( per chi mastica termotecnica e' la conduttivita' della sospensione normalizzata , cioe' quella della miscela / quella del fluido base ... ) e la mia variabile f
con questo programma per trovare un valore di x devo ogni volta inserire TUTTE le variabili .... vorrei poter specificare valore di tutte le variabili e che il programma stesso ricavasse tipo 1 tabella per la mia f che varia in un range ( chenneso' nel mio caso se 0.00 < f < 2 che trovasse x corrispondente per ogni valore del campo con passo prescelto , a multiplo di 0.05 ... cioe' per f= 0 per = 0.05 per = 0.10 po 0.15 e cosi' via penso abbia reso l'idea )
E' POSSIBILE fare 1 cosa simile ( sicuramente immagino possibile , ma diciamo possibile nel senso semplice da implementare) ???
l'output puo' essere salvato in formato txt o xls o qualsiasi cosa ?? ( mi ricordo che si poteva ma fortran non lo conosco ) o occorre qualche programma particolare per fare cio'??
mi scuso in anticipo per queste domande niubbissime e quasi offensive all'intelligenza umana , ma mi trovo alle strette e qualsiasi consiglio / aiuto in questo momento fa la differenza (momento in cui nn nn ho 1 manuale x fortran F90 sintetico , o tempo di leggere quei malloppi da 1000 e rotte pagine che ho trovato in rete ) ...
ps: c'e' qualcosa di piu' isi per sviluppare che sto compaq visual fortran che mi ha dato la facolta' ?! Immagino sia 1 ottimo ambiente di sviluppo ma gia' faccio fatica ad aprirlo...
grazie ancora in anticipo per qualsiasi consiglio !!!