SICOPOLIS V5-dev  Revision 1368
oad_template_sico_lis_solver.f90
Go to the documentation of this file.
1  subroutine template()
2 
3  use oad_tape
4  use oad_rev
5  use sico_maths_m, only : sico_lis_solver_local
6  use sico_maths_m_grad, only : sico_lis_solver_grad
7 !$TEMPLATE_PRAGMA_DECLARATIONS
8 
9  type(modetype) :: our_orig_mode
10 INTEGER(4) :: nr, k, i, nmax_local, nnz_local
11 !
12 ! **** Statements ****
13 !
14 
15 
16  integer iaddr
17  external iaddr
18 
19  if (our_rev_mode%plain) then
20 ! original function
21  call sico_lis_solver_local(nmax, nnz, &
22  lgs_a_ptr, lgs_a_index, &
23  lgs_a_value%v, lgs_b_value%v, lgs_x_value%v)
24  end if
25  if (our_rev_mode%tape) then
26 ! taping
27 ! set up for plain execution
28  our_orig_mode=our_rev_mode
29  our_rev_mode%arg_store=.false.
30  our_rev_mode%arg_restore=.false.
31  our_rev_mode%plain=.true.
32  our_rev_mode%tape=.false.
33  our_rev_mode%adjoint=.false.
34  print *, "Before sico_lis_solverTP integer_tape_pointer ", oad_it_ptr
35  print *, "Before sico_lis_solverTP double_tape_pointer ", oad_dt_ptr
36  do i=1,nmax
37  if (oad_dt_sz.lt.oad_dt_ptr) call oad_dt_grow()
38  oad_dt(oad_dt_ptr) = lgs_x_value(i)%v
39  oad_dt_ptr = oad_dt_ptr+1
40  end do
41  do i=1,nnz
42  if (oad_dt_sz.lt.oad_dt_ptr) call oad_dt_grow()
43  oad_dt(oad_dt_ptr) = lgs_a_value(i)%v
44  oad_dt_ptr = oad_dt_ptr+1
45  end do
46  do i=1,nmax+1
47  if (oad_it_sz.lt.oad_it_ptr) call oad_it_grow()
48  oad_it(oad_it_ptr) = lgs_a_ptr(i)
49  oad_it_ptr = oad_it_ptr+1
50  end do
51  do i=1,nnz
52  if (oad_it_sz.lt.oad_it_ptr) call oad_it_grow()
53  oad_it(oad_it_ptr) = lgs_a_index(i)
54  oad_it_ptr = oad_it_ptr+1
55  end do
56  do i=1,nmax
57  if (oad_dt_sz.lt.oad_dt_ptr) call oad_dt_grow()
58  oad_dt(oad_dt_ptr) = lgs_b_value(i)%v
59  oad_dt_ptr = oad_dt_ptr+1
60  end do
61  call sico_lis_solver_local(nmax, nnz, &
62  lgs_a_ptr, lgs_a_index, &
63  lgs_a_value%v, lgs_b_value%v, lgs_x_value%v)
64  !do i=1,nmax
65  ! if (oad_dt_sz.lt.oad_dt_ptr) call oad_dt_grow()
66  ! oad_dt(oad_dt_ptr) = lgs_x_value(i)%v
67  ! oad_dt_ptr = oad_dt_ptr+1
68  !end do
69  if (oad_it_sz.lt.oad_it_ptr) call oad_it_grow()
70  oad_it(oad_it_ptr) = nnz
71  oad_it_ptr = oad_it_ptr+1
72  if (oad_it_sz.lt.oad_it_ptr) call oad_it_grow()
73  oad_it(oad_it_ptr) = nmax
74  oad_it_ptr = oad_it_ptr+1
75  write (*,*) "nmax", nmax, nnz
76  our_rev_mode=our_orig_mode
77  end if
78  if (our_rev_mode%adjoint) then
79 ! adjoint
80  our_orig_mode=our_rev_mode
81  our_rev_mode%arg_store=.false.
82  our_rev_mode%arg_restore=.false.
83  our_rev_mode%plain=.true.
84  our_rev_mode%tape=.false.
85  our_rev_mode%adjoint=.false.
86 
87  oad_it_ptr = oad_it_ptr-1
88  nmax_local = oad_it(oad_it_ptr)
89  oad_it_ptr = oad_it_ptr-1
90  nnz_local = oad_it(oad_it_ptr)
91  write (*,*) "nmax", nmax_local, nnz_local
92  !do i=nmax_local, 1, -1
93  ! oad_dt_ptr = oad_dt_ptr-1
94  ! lgs_x_value(i)%v = oad_dt(oad_dt_ptr)
95  !end do
96  do i=nmax_local, 1, -1
97  oad_dt_ptr = oad_dt_ptr-1
98  lgs_b_value(i)%v = oad_dt(oad_dt_ptr)
99  end do
100  do i=nnz_local, 1, -1
101  oad_it_ptr = oad_it_ptr-1
102  lgs_a_index(i) = oad_it(oad_it_ptr)
103  end do
104  do i=nmax_local+1, 1, -1
105  oad_it_ptr = oad_it_ptr-1
106  lgs_a_ptr(i) = oad_it(oad_it_ptr)
107  end do
108  do i=nnz_local, 1, -1
109  oad_dt_ptr = oad_dt_ptr-1
110  lgs_a_value(i)%v = oad_dt(oad_dt_ptr)
111  end do
112  do i=nmax_local, 1, -1
113  oad_dt_ptr = oad_dt_ptr-1
114  lgs_x_value(i)%v = oad_dt(oad_dt_ptr)
115  end do
116  call sico_lis_solver_grad(nmax_local, nnz_local, &
117  lgs_a_ptr, lgs_a_index, &
118  lgs_a_value%v, lgs_a_value%d, lgs_b_value%v,&
119  lgs_b_value%d, lgs_x_value%v, lgs_x_value%d)
120  !do i=nmax_local, 1, -1
121  ! oad_dt_ptr = oad_dt_ptr-1
122  ! lgs_x_value(i)%v = oad_dt(oad_dt_ptr)
123  !end do
124  print *, "After sico_lis_solverTP integer_tape_pointer ", oad_it_ptr
125  print *, "After sico_lis_solverTP double_tape_pointer ", oad_dt_ptr
126  our_rev_mode=our_orig_mode
127  end if
128  end subroutine template
Solvers for systems of linear equations used by SICOPOLIS.
Several mathematical tools used by SICOPOLIS.
subroutine template()