-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvars.f90
More file actions
executable file
·144 lines (105 loc) · 3.94 KB
/
Copy pathvars.f90
File metadata and controls
executable file
·144 lines (105 loc) · 3.94 KB
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
module vars
!===============================================!
! En este módulo se solicitan datos !
!===============================================!
implicit none
! Declaramos las variables que pediremos.
integer evolveType, matterType
integer Nt, Nr
integer lineasT, puntosR
integer savedataT, savedataR
integer indMax
real(8) campo0, w
real(8) rmax, t, tf, courant
real(8) dr, dt
real(8) campoMax
real(8) delta, deltaFWHM
real(8) sexto, cuarto, tercio, medio
real(8) uno, dos, tres, cuatro, cero
character(len=10) dirname
character(len=10) char_campoEntero, char_campoDecimal
integer campoEntero
contains
subroutine lector
! Llamamos a los arreglos.
use arrays
! Definimos un entero para referirnos al 'input.par'.
integer fid
! Abrimos el 'input.par'.
open(newunit = fid, file = './input.par', action = 'read', position = 'rewind')
!------------------------------------------------
! Tipo de evolución: 1 -> estática (solo c.i.); 2 -> Dinámica (evolución)
read(fid,*) evolveType
!------------------------------------------------
! Tipo de materia: 1 -> KG; 2 -> Dirac; 3 -> Proca
read(fid,*) matterType
!------------------------------------------------
! Parámetro inicial de la estrella, psi0, F0 o P0.
read(fid,*) campo0
!------------------------------------------------
! Parámetro de la estrella \omega.
read(fid,*) w
!------------------------------------------------
! Límite superior espacial.
read(fid,*) rmax
!------------------------------------------------
! Tiempo de integración final (Nt = tf*(Nr/(courant*rf))).
read(fid,*) tf
!------------------------------------------------
! Tamaño de paso en la malla radial.
read(fid,*) dr
!------------------------------------------------
! Cuántas líneas temporales se quieren guardar.
read(fid,*) lineasT
!------------------------------------------------
! Cuántos puntos en la malla radial se quieren.
read(fid,*) puntosR
!------------------------------------------------
! Parámetro de Courant.
read(fid,*) courant
!------------------------------------------------
! Amplitud de la perturbación en relación al máximo.
read(fid,*) delta
!------------------------------------------------
! Anchura de la perturbación en función a la FWHM.
read(fid,*) deltaFWHM
!------------------------------------------------
! Cerramos las puertas que abrimos.
close(fid)
!------------------------------------------------
! Definimos las variables que nos interesan.
dt = courant*dr
Nr = int( rmax/dr )
Nt = int( (tf/dt) ) ! tf*( Nr/(courant*rmax) )
savedataT = int( Nt/lineasT )
savedataR = int( Nr/puntosR )
!------------------------------------------------
! Iniciamos variables
sexto = 1.0D0/6.0D0
cuarto = 1.0D0/4.0D0
tercio = 1.0D0/3.0D0
medio = 1.0D0/2.0D0
uno = 1.0D0
dos = 2.0D0
tres = 3.0D0
cuatro = 4.0D0
cero = 0.0D0
t = cero
dr = (rmax)/dble(Nr)
dt = courant*dr
indMax = 0
campoMax = cero
!------------------------------------------------
! Creamos la carpeta que guardará la información.
write(char_campoDecimal, '(F0.3)') campo0
campoEntero = int(campo0)
write(char_campoEntero, '(I1)') campoEntero
if (campoEntero == 0) then
dirname = trim( trim(char_campoEntero) // trim(char_campoDecimal) )
elseif (campoEntero > 0) then
dirname = trim( char_campoDecimal )
end if
call execute_command_line ('mkdir -p ' // trim(dirname) )
call execute_command_line ('cp ./input.par ' // './' // trim(dirname) // '/input.par')
end subroutine
end module