about summary refs log tree commit diff
path: root/src/gen.py
blob: 837e5b3012e819e59a5bdde279fa7ae64f11811a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from numpy import genfromtxt
import numpy as np
import math
import os
import socket
host = socket.gethostname()

# variables
sigma = 200
f_0 = 0.1
R_s = 1e4

# M..
Mxx = 0
Mxy = 8e-6
Myy = 0

# constants
pi = math.pi
e = math.e
G = 4.302e-3

# rho function
def rho(x, y, z):
    r = math.sqrt(x**2 + y**2 + z**2)
    a = (1) / (math.sqrt( 2 * pi ) * sigma )
    b = math.exp( - (phi(r) / sigma ** 2 ) )
    c = a * b
    return c

def rho_new(x, y, z):
    a = (1 - ((1) / (2 * (sigma ** 2))) * ( Mxx * x**2 + 2 * Mxy * x * y + Myy * y**2 ) )
    return rho(x, y, z) * a

# phi function
def phi(x):
    if x == 0:
        return -4 * pi * f_0 * G * R_s**2

    a = - ( 4 * pi * G * f_0 * R_s ** 3 ) / x
    b = np.log(1. + (x / R_s) )
    c = a * b
    return c

def gen_stars(stars):
    stars = int(stars)

    time_start = time.time()

    # lists
    listrho = []

    # create new file for every calculation
    path = "data/" + str(host) + "_" + str(os.getpid()) + ".csv"
    print("path: " + str(path))

    # define the size of the galaxy
    length = 1.5e6

    # define the borders
    range_min = -int(length)
    range_max = int(length)

    # define the rho range
    rand_min = rho_new(0, 0, 0)
    rand_max = rho_new(length, 0, 0)

    # create random stars
    for r in range(0, stars):
        x = np.random.uniform(range_min, range_max, size=1)
        y = np.random.uniform(range_min, range_max, size=1)
        z = np.random.uniform(range_min, range_max, size=1)
        rand_val = np.random.uniform(rand_min, rand_max, size=1)

        # if the random value is smaller than the rho value, generate a star
        if rand_val < rho(x, y, z):

            # open a file to write to
            with open(path, "a") as data:

                # write the data to the file
                data.write(str(x).strip("[]") + "," + str(y).strip("[]") + "," + str(z).strip("[]") + "\n")

# generate n stars
gen_stars(5e7)