import static java.lang.Math.*;
import java.io.*;
import java.util.*;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication;
/**
* The main class of the application.
*/
public class VersuchApp extends SingleFrameApplication {
protected void startup() {
show(new VersuchView(this));
}
/**
* This method is to initialize the specified window by injecting resources.
* Windows shown in our application come fully initialized from the GUI
* builder, so this additional configuration is not needed.
*/
@Override protected void configureWindow(java.awt.Window root) {
}
/**
* A convenient static getter for the application instance.
* @return the instance of VersuchApp
*/
public static VersuchApp getApplication() {
return Application.getInstance(VersuchApp.class);
}
/**
* Main method launching the application.
*/
public static int Zeitzone = 1;
public static double gLaenge =15.231;
public static double gBreite = 40.871;
public static double N = 24.3778;
public static double ae=0;
public static double [][]Daten=new double[9][8760];
public static double [][] anlage=new double[8][8760];
public static double [][] Ediff=new double[8][8760];
public static double reihe= 6.5*14;
public static double b=1.65;
public static double h=0.992;
public static double Wert1(double[] d){
double Monat=0;
for (int i=0; i<1; i++){ // 1. Spalte
// for (int i=0; i<d.length-6; i++){ //
Monat = d[i];
}
return Monat;
}
public static double Wert2(double[] d){
double Tag=0;
for (int i=0; i<2; i++){ // 2. Spalte
// for (int i=0; i<d.length-6; i++){ //
Tag = d[i];
}
return Tag;
}
public static double Wert3(double[] d){
double Stunden=0;
//for (int i=0; i<3; i++){ // 3. Spalte
for (int i=0; i<d.length-4; i++){ //
Stunden = d[i];
}
return Stunden;
}
public static double Wert4(double[] d){
double Ta=0;
//for (int i=0; i<4; i++){ // 4. Spalte
for (int i=0; i<d.length-3; i++){ //
Ta = d[i];
}
return Ta;
}
public static double Wert5(double[] d){
double Strahlung=0;
// for (int i=0; i<5; i++){ // 5. Spalte
for (int i=0; i<d.length-2; i++){
Strahlung = d[i];
}
return Strahlung;
}
public static double[][] Daten () throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(new File("C:/User/Desktop/Java/Daten.txt")));
String line = null;
ArrayList<String> lines = new ArrayList<String>();
while((line = reader.readLine()) != null){
lines.add(line);
}
String[][] data = new String[lines.size()][];
for(int i = 0; i<lines.size(); i++){
data[i] = lines.get(i).split(";");
}
double[][] doubleArray = new double[data.length][];
for(int i = 0; i < data.length; i++){
doubleArray[i] = new double[data[i].length];
for(int k = 0; k < data[i].length; k++){
doubleArray[i][k] = Double.parseDouble(data[i][k]);
}
}
double Eghor [] =new double[8760];
for ( int i=0;i < 8760;i++){
Eghor [i]= VersuchApp.Wert5(doubleArray[i]);
}
double Zeit [] =new double[8760];
for ( int i=0;i < 8760;i++){
Zeit [i]= VersuchApp.Wert3(doubleArray[i]);
}
double Temp [] =new double[8760];
for ( int i=0;i < 8760;i++){
Temp [i]= VersuchApp.Wert4(doubleArray[i]);
}
int Jahr=2003;
if( Jahr % 4 ==0){
int length =8784;
}
int length =8760;
double Monat [] =new double[length];
double Tag [] =new double[length];
double j[]=new double[length];
double d[]=new double[length];
double z[]=new double[length];
double Moz[]=new double[length];
double Woz[]=new double[length];
double W[]=new double[length];
double Sonne[]=new double[length];
double Sonnenhoehe[]=new double[length];
double Az[]=new double[length];
double Azimut[]=new double[length];
double kt[]=new double[length];
double diff[]=new double[length];
double Ediffhor[]=new double[length];
double Edirhor[]=new double[length];
double Ogen[]=new double[length];
double Edirgen[]=new double[length];
double Erefl[]=new double[length];
for ( int i=0;i < length;i++){
Monat [i]= VersuchApp.Wert1(doubleArray[i]);
Tag [i]= VersuchApp.Wert2(doubleArray[i]);
if(Monat[i]==2){
Tag [i]= Tag[i]+31;
}
if(Monat[i]==3){
Tag [i]= Tag[i]+59; // +1
}
if(Monat[i]==4){
Tag [i]= Tag[i]+90;
}
if(Monat[i]==5){
Tag [i]= Tag[i]+120;
}
if(Monat[i]==6){
Tag [i]= Tag[i]+151;
}
if(Monat[i]==7){
Tag [i]= Tag[i]+181;
}
if(Monat[i]==8){
Tag [i]= Tag[i]+212;
}
if(Monat[i]==9){
Tag [i]= Tag[i]+243;
}
if(Monat[i]==10){
Tag [i]= Tag[i]+273;
}
if(Monat[i]==11){
Tag [i]= Tag[i]+304;
}
if(Monat[i]==12){
Tag [i]= Tag[i]+334;
}
j[i]=360*Tag[i]/(length/24);
d[i]= 0.3948-23.2559*cos(toRadians(j[i]+9.1))-0.3915*cos(toRadians(2*j[i]+5.4))-0.1764*cos(toRadians(3*j[i]+26));
z[i]= 0.0066+7.3525*cos(toRadians(j[i]+85.9))+ 9.9359*cos(toRadians(2*j[i]+108.9))+0.3387*cos(toRadians(3*j[i]+105.2));
Moz[i]= Zeit[i]- Zeitzone + 4*gLaenge/60;
Woz[i]=Moz[i]+z[i]/60;
W[i]=(12-Woz[i])*15;
Sonne[i]= cos(toRadians(W[i]))*cos(toRadians(gBreite))*cos(toRadians(d[i]))+sin(toRadians(gBreite))*sin(toRadians(d[i]));
if (Sonne[i] >1){
Sonne[i] =1;}
if (Sonne[i] < -1){
Sonne[i] =- 1;}
Sonnenhoehe[i]= toDegrees(asin(Sonne[i]));
Az[i]=(sin(toRadians(Sonnenhoehe[i]))*sin(toRadians(gBreite))-sin(toRadians(d[i])))/(cos(toRadians(Sonnenhoehe[i]))*cos(toRadians(gBreite)));
if (Az[i] >1){
Az[i] =1;}
if (Az[i] < -1){
Az[i] =- 1;}
if(Woz[i] >12 ||Woz[i]<0){
Az[i]=toDegrees(acos(Az[i]));
}
else {
Az[i]=-toDegrees(acos(Az[i]));
}
Azimut[i]=180+Az[i];
kt[i]=Eghor[i]/(1367*sin(toRadians(Sonnenhoehe[i])));
if(kt[i]<=0.3){
diff[i]=Eghor[i]*(1.02-0.254*kt[i]+0.0123*sin(toRadians(Sonnenhoehe[i])));
}
else if(0.3 <kt[i] && kt[i]<0.78){
diff[i]=Eghor[i]*(1.4-1.749*kt[i]+0.177*sin(toRadians(Sonnenhoehe[i])));
}
else if(kt[i] >= 0.78){
diff[i]=Eghor[i]*(0.486*kt[i]-0.182*sin(toRadians(Sonnenhoehe[i])));
}
Ediffhor[i]=diff[i];
if(Ediffhor[i]> Eghor[i]){
Ediffhor[i]= Eghor[i];
}
Edirhor[i]= Eghor[i]-Ediffhor[i];
Ogen[i]= toDegrees(acos(-cos(toRadians(Sonnenhoehe[i]))*sin(toRadians(N))*cos(toRadians(Azimut[i]-ae))+sin(toRadians(Sonnenhoehe[i]))*cos(toRadians(N))));
Edirgen[i]=Edirhor[i]*cos(toRadians(Ogen[i]))/sin(toRadians(Sonnenhoehe[i]));
if(Edirgen[i]<=0){
Edirgen[i]=0;
}
Erefl[i]=Eghor[i]*0.25*0.5*(1-cos(toRadians(N)));
Daten[0][i]=Sonnenhoehe[i];
Daten[1][i]=Azimut[i];
Daten[2][i]=Ediffhor[i];
Daten[3][i]=Edirhor[i];
Daten[4][i]=Eghor[i];
Daten[5][i]=Ogen[i];
Daten[6][i]=Edirgen[i];
Daten[7][i]=Erefl[i];
Daten[8][i]=Temp[i];
// System.out.println(Daten[8][i]);
}
return Daten;
}
public double [ ] Ediffgen() throws IOException{
int length =8760;
double Ediffgen[]=new double[length];
double [][] data = VersuchApp.Daten ();
int Index=VersuchView.l;
if(Index==0){
for ( int i=0;i <length;i++){
double Ediffhor= data[2][i];
double Sonnenhoehe = data [0][i];
Ediffgen[i]=Ediffhor/2*(1+cos(toRadians(Sonnenhoehe)));
// System.out.println (Ediffgen[i]);
}
}
if(Index==1){
for ( int i=0;i <length;i++){
double Sonnenhoehe = data [0][i];
double Ediffhor= data[2][i];
double Eghor= data[4][i];
double Ogen= data[5][i];
double F=1-pow(Ediffhor/Eghor,2);
Ediffgen[i]=Ediffhor/2*(1+cos (toRadians(N)))*(1+F*pow(sin(toRadians(N/2)),3))*(1+F*pow(cos(toRadians(Ogen)),2)*pow(cos(toRadians(Sonnenhoehe)),2));
if (Eghor==0){
Ediffgen[i]=0;
}
// System.out.println (Ediffgen[i]);
}
}
if(Index==2){
double F11 = 0, F12 = 0, F13=0, F21 = 0, F22 = 0, F23 = 0, F1, F2, a, c;
for ( int i=0;i <length;i++){
double Sonnenhoehe = data [0][i];
double Ediffhor= data[2][i];
double Edirhor= data[3][i];
double Ogen= data[5][i];
double Ohor=toRadians(90-Sonnenhoehe);
double AM=1/sin(toRadians(Sonnenhoehe));
double Ep =(((Ediffhor + Edirhor * pow(sin(toRadians(Sonnenhoehe)),-1))/Ediffhor)+1.041*pow(Ohor,3)) /(1+1.041*pow(Ohor,3));
double H=AM*Edirhor/1367;
if (Ep >= 1 && Ep <1.065 ){
F11=-0.008;
F12=0.588;
F13=-0.062;
F21=-0.06;
F22=0.072;
F23=-0.022;
}
else if (Ep >= 1.065 && Ep <1.23 ){
F11=0.13;
F12=0.683;
F13=-0.151;
F21=-0.019;
F22=0.066;
F23=-0.029;
}
else if (Ep >= 1.23 && Ep <1.5 ){
F11=0.33;
F12=0.487;
F13=-0.221;
F21=0.055;
F22=-0.064;
F23=-0.026;
}
else if (Ep >= 1.5 && Ep <1.95 ){
F11=0.568;
F12=0.187;
F13=-0.295;
F21=0.109;
F22=-0.152;
F23=-0.014;
}
else if (Ep >= 1.95 && Ep <2.8 ){
F11=0.873;
F12=-0.392;
F13=-0.362;
F21=0.226;
F22=-0.462;
F23=0.001;
}
else if (Ep >= 2.8 && Ep <4.5 ){
F11=1.132;
F12=-1.237;
F13=-0.412;
F21=0.288;
F22=-0.823;
F23=0.131;
}
else if (Ep >= 4.5 && Ep <6.2 ){
F11=1.06;
F12=-1.6;
F13=-0.359;
F21=0.264;
F22=-1.127;
F23=0.131;
}
else if (Ep <=6.2 ){
F11=0.678;
F12=-0.327;
F13=-0.25;
F21=0.156;
F22=-1.377;
F23=0.251;
}
F1=F11+F12*H+Ohor*F13;
F2=F21+F22*H+Ohor*F23;
if(cos(toRadians(Ogen))>=0){
a=cos(toRadians(Ogen));
}
else{
a=0;
}
if (sin(toRadians(Sonnenhoehe))>=0.087){
c=sin(toRadians(Sonnenhoehe));
}
else{
c=0.087;
}
Ediffgen[i]=Edirhor*(0.5*(1+cos(toRadians(N)))*(1-F1)+a/c*F1+F2*sin(toRadians(N)));
if(Ediffgen[i]<0){
Ediffgen[i]=0;
}
}
}
return Ediffgen;
}
public static double [ ] Eges() throws IOException{
int length =8760;
double Eggen[]=new double[length];
double Ediffgeneigt[]=new double[length];
Ediffgeneigt.Ediffgen();
double [][] data = VersuchApp.Daten ();
for ( int i=0;i <length;i++){
double Edirgen = data [6][i];
double Erefl= data[7][i];
Eggen[i]=Edirgen+Ediffgeneigt[i]+Erefl;
System.out.println(Eggen[i]);
}
return Eggen;
}
public static void main(String[] args) throws IOException {
launch(VersuchApp.class, args);
// VersuchApp.Eges();
}
}