Se sei giÓ registrato           oppure    

Orario: 16/09/2019 14:51:36  

 

Energia Alternativa ed Energia Fai Da Te > Sistemi operativi, hardware e programmazione.


Codice sorgente java per progettare acceleratori lineari
FinePagina

stranger

Avatar
MegaWatt


Gruppo:Utente
Messaggi:420

Stato:



Inviato il: 2/1/2013,21:44

Qui c'Ŕ l'eseguibile
www.gencodex.com/lineare.zip
-
-
-
-
e qui di seguito c'Ŕ il codice sorgente java

CITAZIONE
import javax.swing.*;

public class ProgettaAcceleratoreLineare {

private double EnergiaFinale_arr_Mev;
private int NumElettrodi=0;
private int NumTubi=0;
private double semiperiodo=0.0d;
private double UnQuartoDiPeriodo=0.0d;
private double LaPrimaAccelazione=0.0d;
private double traferro=0.0d;
private double LarghezzaDelPrimoTubo=0.0d;
private int[] ID_tubo = new int[0];
private double[] TempoNelVuoto = new double[0];
private double[] TempoNelTubo = new double[0];
private double[] SpazioNelVuoto = new double[0];
private double[] SpazioNelTubo = new double[0];
private double[] DistIntermedie = new double[0];
private double[] DistanzeDaIdZero = new double[0];
private double[] massa = new double[0];
private double[] Velocita = new double[0];
private double[] tempo = new double[0];
private double[] AccTraTubi = new double[0];
private double[] FattoreDiLorentz = new double[0];
private double[] EnergiaElettronvolt = new double[0];

public ProgettaAcceleratoreLineare(final int OldW9, final int OldH9, final int OldX9, final int OldY9,
final String OldTitolo, final int OldWidth_disponibile, final int OldHeight_disponibile,
final int OldX1_disponibile, final int OldY1_disponibile, final double carica,
final double FromElettronvoltToJoule, final double luce, final String NomeProiettile,
final String Target, final int NumeroAtomico, final double MassaRiposo,
final double EnergiaFinaleMev, final double TensioneKv, final double FrequenzaMhz) {

boolean sw1=false;
boolean sw2=false;
boolean swInternalError=false;
double d0=0;
double d1=0;
double d2=0;
double d3=0;
double d4=0;
double d5=0;
int n1=0;
int intero=0;
int cc=0;
double picosecondi=0;
double frequenza=0;
int riporto=0;
int kmAlSec=0;
double tensione=0;
int NumElettronvoltUnSoloAnello=0;
int EnergiaFinaleInElettronvolt=0;
double NumJoule=0;
String kk1="";
String kk2="";
double speed=0;
double TempoInVuoto=0;
double TempoInTubo=0;
double totale=0;
String msg="";


try {

d1=(EnergiaFinaleMev*1000)/(TensioneKv*NumeroAtomico);

d2=Math.rint(d1);
if (d1>d2) {d2=d2+1;}

EnergiaFinale_arr_Mev=(d2*TensioneKv*NumeroAtomico)/1000;
NumTubi=(int)d2;
NumElettrodi=NumTubi+1;

if (NumElettrodi > 25000) {
msg=""+NumElettrodi+" elettrodi sono troppi n";
msg=msg+"diminuire l'energia finale n";
msg=msg+"oppure aumentare la tensione n";
msg=msg+"tra un tubo e il suo successivo n";
new ViewerMessages(OldW9, OldH9, OldX9, OldY9, OldTitolo, OldWidth_disponibile,
OldHeight_disponibile, OldX1_disponibile, OldY1_disponibile, msg);
}else{

EnergiaFinaleInElettronvolt=(int)(EnergiaFinale_arr_Mev*Math.pow(10,6));
tensione=TensioneKv*1000;
EnergiaElettronvolt = new double[NumElettrodi];



ID_tubo = new int[NumElettrodi];
TempoNelTubo = new double[NumElettrodi];
TempoNelVuoto = new double[NumElettrodi];
SpazioNelTubo = new double[NumElettrodi];
SpazioNelVuoto = new double[NumElettrodi];
DistIntermedie = new double[NumElettrodi];
DistanzeDaIdZero = new double[NumElettrodi];
massa = new double[NumElettrodi];
Velocita = new double[NumElettrodi];
tempo = new double[NumElettrodi];
AccTraTubi = new double[NumElettrodi];
FattoreDiLorentz = new double[NumElettrodi];

EnergiaElettronvolt = new double[NumElettrodi]; // non visualizzato in griglia

NumElettronvoltUnSoloAnello=(int)tensione*NumeroAtomico;

frequenza=FrequenzaMhz*Math.pow(10,6);
semiperiodo=1/(2*frequenza);
UnQuartoDiPeriodo=semiperiodo/2;

double EnergiaDataAdOgniPassaggio=NumElettronvoltUnSoloAnello*FromElettronvoltToJoule;
double CalcoloClassico=Math.sqrt(2*EnergiaDataAdOgniPassaggio/MassaRiposo);
d2=(1/Math.pow(CalcoloClassico,2))+(1/Math.pow(luce,2));

speed=1/Math.sqrt(d2);
//speed rappresenta la variazione di velocita locale, e siccome siamo fuori dal loop si parte da zero.
//Partendo da zero succede che la variazione di velocita e' in questo caso uguale alla velocita' generale

LaPrimaAccelazione=speed/UnQuartoDiPeriodo;
//qui sono fuori dal loop e quindi impongo il tempo, quando saro' dentro il ciclo imporro' lo spazio
//Non deve mai essere che quella velocita' venga raggiunta in un tempo maggiore di 1 semiperiodo,
//perche' se cosi' fosse, la particella oscillerebbe anziche' accelerare.
//Per motivi di sicurezza ho deciso che il tempo di prima accelerazione deve essere soltato 1/4 di periodo,
//in questo modo posso essere certo che quando il generatore di segnali inverte la polarita', la particella
//si trova gia' dentro il primo tubo.

traferro=0.5*LaPrimaAccelazione*Math.pow(UnQuartoDiPeriodo, 2);

picosecondi=semiperiodo*Math.pow(10,12);
TempoInVuoto=speed/LaPrimaAccelazione; // qui dovrebbe essere uguale ad 1/4 di periodo
TempoInTubo=semiperiodo-TempoInVuoto;
LarghezzaDelPrimoTubo=speed*TempoInTubo; //si applica l'equazione del moto rettilineo uniforme perche' dentro il tubo non c'e' accelerazione

EnergiaElettronvolt[0]=0;
massa[0]=MassaRiposo;
DistanzeDaIdZero[0]=0;
FattoreDiLorentz[0]=1;

//--- begin test ---
//msg="TensioneKv = "+Double.toString(TensioneKv)+" n";
//msg=msg+"EnergiaFinaleMev = "+Double.toString(EnergiaFinaleMev)+" n";
//msg=msg+"NumeroAtomico = "+Integer.toString(NumeroAtomico)+" n";
//msg=msg+"frequenza = "+Double.toString(frequenza)+" n";
//msg=msg+"NumTubi = "+Integer.toString(NumTubi)+" n";
//msg=msg+"NumElettrodi = "+Integer.toString(NumElettrodi)+" n";
//msg=msg+"EnergiaFinale_arr_Mev = "+Double.toString(EnergiaFinale_arr_Mev)+" n";
//msg=msg+"semiperiodo = "+Double.toString(semiperiodo)+" n";
//msg=msg+"UnQuartoDiPeriodo = "+Double.toString(UnQuartoDiPeriodo)+" n";
//msg=msg+"EnergiaDataAdOgniPassaggio = "+Double.toString(EnergiaDataAdOgniPassaggio)+" n";
//msg=msg+"traferro (in millimetri) = "+Double.toString(traferro*1000)+" millimetri n";

//new ViewerMessages(OldW9, OldH9, OldX9, OldY9, "TEST", OldWidth_disponibile,
// OldHeight_disponibile, OldX1_disponibile, OldY1_disponibile, msg);
//--- end test ---

for (int bb=0;bb<numelettrodi;bb++) {
ID_tubo[bb]=bb;
EnergiaElettronvolt[bb]=NumElettronvoltUnSoloAnello*bb;
tempo[bb]=semiperiodo;

//--- inizio calcolare la massa usando ovviamente la velocitÓ generale ---
if (bb < 1) {
massa[0]=MassaRiposo;
}else{
NumJoule=EnergiaElettronvolt[bb]*FromElettronvoltToJoule;
d1=Math.sqrt(2*NumJoule/MassaRiposo); //d1 e' il calcolo classico globale

d2=(1/Math.pow(d1,2))+(1/Math.pow(luce,2));

double VelocitaTotale=1/Math.sqrt(d2);
Velocita[bb]=VelocitaTotale;

massa[bb]=(2*NumJoule) / Math.pow(VelocitaTotale,2);
}
//--- fine calcolare la massa usando ovviamente la velocitÓ generale ---

d1=(2*EnergiaDataAdOgniPassaggio)/massa[bb];
AccTraTubi[bb]=Math.sqrt(d1);

//--- inizio calcolare la variazione della velocita' locale ---
CalcoloClassico=Math.sqrt(2*EnergiaDataAdOgniPassaggio/MassaRiposo);
d2=(1/Math.pow(CalcoloClassico,2))+(1/Math.pow(luce,2));
speed=1/Math.sqrt(d2);
//--- fine calcolare la variazione della velocita' locale ---

double VelocitaTotale=0.0d;
if (bb < 1) {
VelocitaTotale=speed;
}else{
VelocitaTotale=Velocita[bb-1]+speed;
}

TempoNelVuoto[bb]=2*traferro/VelocitaTotale;
TempoNelTubo[bb]=semiperiodo-TempoNelVuoto[bb];
SpazioNelVuoto[bb]=traferro;
SpazioNelTubo[bb]=speed*TempoNelTubo[bb]; //si applica l'equazione del moto rettilineo uniforme perche' dentro il tubo non c'e' accelerazione

//--- inizio calcolare le SpazioNelTubo dei tubi ---
if (bb < 1) {
DistIntermedie[bb]=0;
}else{
DistIntermedie[bb]=SpazioNelVuoto[bb]+SpazioNelTubo[bb];
totale=totale+DistIntermedie[bb];
DistanzeDaIdZero[bb]=totale;
}

//--- fine calcolare le SpazioNelTubo dei tubi ---



//--- inizio calcolare il fattore di Lorentz ---
d4=1-(Math.pow(Velocita[bb],2) / Math.pow(luce,2));
d5=Math.sqrt(d4);
FattoreDiLorentz[bb]=1/d5;
//--- fine calcolare il fattore di Lorentz ---


} // next bb

} // NumElettrodi > 25000


} //end try
catch(Exception eer) {
msg="error in "+((char)34)+OldTitolo+((char)34)+" n n";
msg=msg+eer.toString()+" n";
new ViewerMessages(OldW9, OldH9, OldX9, OldY9, "ERRORE", OldWidth_disponibile,
OldHeight_disponibile, OldX1_disponibile, OldY1_disponibile, msg);
}
}


public double getEnergiaFinale_arr_Mev() {
return EnergiaFinale_arr_Mev;
}


public int getNumElettrodi() {
return NumElettrodi;
}


public int getNumTubi() {
return NumTubi;
}


public double getSemiperiodo() {
return semiperiodo;
}


public double getUnQuartoDiPeriodo() {
return UnQuartoDiPeriodo;
}


public double getLaPrimaAccelazione() {
return LaPrimaAccelazione;
}


public double getTraferro() {
return traferro;
}


public double getLarghezzaDelPrimoTubo() {
return LarghezzaDelPrimoTubo;
}


public int[] getID_tubo() {
return ID_tubo;
}


public double[] getTempoNelVuoto() {
return TempoNelVuoto;
}


public double[] getTempoNelTubo() {
return TempoNelTubo;
}


public double[] getSpazioNelVuoto() {
return SpazioNelVuoto;
}


public double[] getSpazioNelTubo() {
return SpazioNelTubo;
}


public double[] getDistIntermedie() {
return DistIntermedie;
}


public double[] getDistanzeDaIdZero() {
return DistanzeDaIdZero;
}


public double[] getMassa() {
return massa;
}


public double[] getVelocita() {
return Velocita;
}


public double[] getTempo() {
return tempo;
}


public double[] getAccTraTubi() {
return AccTraTubi;
}


public double[] getFattoreDiLorentz() {
return FattoreDiLorentz;
}


public double[] getEnergiaElettronvolt() {
return EnergiaElettronvolt;
}


}



---------------
The worst enemies of photovoltaics are the building speculators because they build beehives of 15-storey.

 
 InizioPagina
 

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum