-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.f90
125 lines (73 loc) · 2.88 KB
/
utils.f90
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
module utils
implicit none
public :: save_solution, save_network_weight, save_network_beta, open_file
contains
subroutine save_solution(t, y, first, file_name_integer)
use problem, only: net_size
implicit none
real(kind=8), intent(in) :: t
real(kind=8), intent(in) :: y(net_size)
logical, intent(in) :: first
integer, intent(in) :: file_name_integer
character(len=13) :: file_name
character(len=1) :: net_size_character
character(len=1) :: file_name_integer_character
write(net_size_character, '(I1)') net_size + 1
write(file_name_integer_character, '(I1)') file_name_integer
file_name = 'data/sol' // trim(file_name_integer_character) // '.txt'
call open_file(first, file_name_integer, file_name)
write(file_name_integer, '(' // net_size_character // '(ES15.7,1X))') [t, y]
close(file_name_integer)
end subroutine save_solution
subroutine save_network_weight(weight, bias)
use problem, only: n_neurons
implicit none
real(kind=8), intent(in) :: weight(n_neurons)
real(kind=8), intent(in) :: bias(n_neurons)
integer, parameter :: unit_number = 0
integer :: i
real(kind=8) :: hn(n_neurons)
real(kind=8) :: hdn(n_neurons)
call open_file(.true., unit_number, 'data/weig.txt')
do i = 1, n_neurons
write(unit_number, '(2(ES15.7,1X))') bias(i), weight(i)
end do
close(unit_number)
end subroutine save_network_weight
subroutine save_network_beta(t, beta, first)
use problem, only: net_size, n_neurons
implicit none
real(kind=8), intent(in) :: t
real(kind=8), intent(in) :: beta(n_neurons, net_size)
logical, intent(in) :: first
real(kind=8) :: betan(net_size)
integer :: unit_number = 0
integer :: i
character(len=1) :: net_size_character
write(net_size_character, '(I1)') net_size
call open_file(first, unit_number, 'data/beta.txt')
write(unit_number, '((ES15.7,1X))') t
do i = 1, n_neurons
betan = beta(i, :)
write(unit_number, '(' // net_size_character // '(ES15.7,1X))') betan
end do
close(unit_number)
end subroutine save_network_beta
subroutine open_file(first, unit_number, file_name)
implicit none
logical, intent(in) :: first
integer, intent(in) :: unit_number
character(len=13), intent(in) :: file_name
integer :: f_status
open(unit=unit_number, file=file_name, status='old', action='write', iostat=f_status)
if (f_status .ne. 0) then
open(unit=unit_number, file=file_name, status='replace')
else if (first) then
close(unit_number)
open(unit=unit_number, file=file_name, status='unknown', action='write', iostat=f_status)
else
close(unit_number)
open(unit=unit_number, file=file_name, status='old', action='write', position='append')
end if
end subroutine open_file
end module utils