|
| 1 | +! ---------------------------------------------------------------------- |
| 2 | +! ---------------------------------------------------------------------- |
| 3 | +! |
| 4 | +! This file is part of the Test Set for IVP solvers |
| 5 | +! http://www.dm.uniba.it/~testset/ |
| 6 | +! |
| 7 | +! Beam (ODE case) |
| 8 | +! ODE of dimension 80 |
| 9 | +! |
| 10 | +! DISCLAIMER: see |
| 11 | +! http://www.dm.uniba.it/~testset/disclaimer.php |
| 12 | +! |
| 13 | +! The most recent version of this source file can be found at |
| 14 | +! http://www.dm.uniba.it/~testset/src/problems/beam.f |
| 15 | +! |
| 16 | +! This is revision |
| 17 | +! $Id: beam.F,v 1.2 2006/10/02 10:29:13 testset Exp $ |
| 18 | +! |
| 19 | +! ---------------------------------------------------------------------- |
| 20 | +subroutine beam_init(neqn, y, yprime, consis) |
| 21 | + use const_def, only: dp |
| 22 | + integer :: neqn |
| 23 | + real(dp) :: y(neqn), yprime(neqn) |
| 24 | + logical :: consis |
| 25 | + |
| 26 | + integer :: i |
| 27 | + |
| 28 | + do i = 1, neqn |
| 29 | + y(i) = 0d0 |
| 30 | + end do |
| 31 | + |
| 32 | +end subroutine beam_init |
| 33 | +! ---------------------------------------------------------------------- |
| 34 | +subroutine beam_feval(nvar, t, th, df, ierr, rpar, ipar) |
| 35 | + use const_def, only: dp |
| 36 | + use math_lib |
| 37 | + implicit real(dp) (A - H, O - Z) |
| 38 | + integer :: ierr, nvar, i, ipar(*) |
| 39 | + integer, parameter :: N = 40, NN = 2*N, NSQ = N*N, NQUATR = NSQ*NSQ |
| 40 | + real(dp) :: rpar(*), an, deltas |
| 41 | + dimension DF(NN), TH(150), U(150), V(150), W(150) |
| 42 | + dimension ALPHA(150), BETA(150), STH(150), CTH(150) |
| 43 | +! --- SET DEFAULT VALUES |
| 44 | + if (nvar /= nn) stop 'bad nvar for beam_feval' |
| 45 | + AN = N |
| 46 | + DELTAS = 1.0D+0/AN |
| 47 | +! ----- CALCUL DES TH(I) ET DES SIN ET COS ------------- |
| 48 | + do I = 2, N |
| 49 | + THDIFF = TH(I) - TH(I - 1) |
| 50 | + STH(I) = sin(THDIFF) |
| 51 | + CTH(I) = cos(THDIFF) |
| 52 | + end do |
| 53 | +! -------- CALCUL DU COTE DROIT DU SYSTEME LINEAIRE ----- |
| 54 | + IF (T > 3.14159265358979324D0) THEN |
| 55 | +! --------- CASE T GREATER PI ------------ |
| 56 | +! ---------- I=1 ------------ |
| 57 | + TERM1 = (-3.D0*TH(1) + TH(2))*NQUATR |
| 58 | + V(1) = TERM1 |
| 59 | +! -------- I=2,..,N-1 ----------- |
| 60 | + DO I = 2, N - 1 |
| 61 | + TERM1 = (TH(I - 1) - 2.D0*TH(I) + TH(I + 1))*NQUATR |
| 62 | + V(I) = TERM1 |
| 63 | + end do |
| 64 | +! ----------- I=N ------------- |
| 65 | + TERM1 = (TH(N - 1) - TH(N))*NQUATR |
| 66 | + V(N) = TERM1 |
| 67 | + else |
| 68 | +! --------- CASE T LESS EQUAL PI ------------ |
| 69 | + FABS = 1.5D0*sin(T)*sin(T) |
| 70 | + FX = -FABS |
| 71 | + FY = FABS |
| 72 | +! ---------- I=1 ------------ |
| 73 | + TERM1 = (-3.D0*TH(1) + TH(2))*NQUATR |
| 74 | + TERM2 = NSQ*(FY*cos(TH(1)) - FX*sin(TH(1))) |
| 75 | + V(1) = TERM1 + TERM2 |
| 76 | +! -------- I=2,..,N-1 ----------- |
| 77 | + DO I = 2, N - 1 |
| 78 | + TERM1 = (TH(I - 1) - 2.D0*TH(I) + TH(I + 1))*NQUATR |
| 79 | + TERM2 = NSQ*(FY*cos(TH(I)) - FX*sin(TH(I))) |
| 80 | + V(I) = TERM1 + TERM2 |
| 81 | + end do |
| 82 | +! ----------- I=N ------------- |
| 83 | + TERM1 = (TH(N - 1) - TH(N))*NQUATR |
| 84 | + TERM2 = NSQ*(FY*cos(TH(N)) - FX*sin(TH(N))) |
| 85 | + V(N) = TERM1 + TERM2 |
| 86 | + end if |
| 87 | +! -------- COMPUTE PRODUCT DV=W ------------ |
| 88 | + W(1) = STH(2)*V(2) |
| 89 | + DO I = 2, N - 1 |
| 90 | + W(I) = -STH(I)*V(I - 1) + STH(I + 1)*V(I + 1) |
| 91 | + end do |
| 92 | + W(N) = -STH(N)*V(N - 1) |
| 93 | +! -------- TERME 3 ----------------- |
| 94 | + DO I = 1, N |
| 95 | + W(I) = W(I) + TH(N + I)*TH(N + I) |
| 96 | + end do |
| 97 | +! ------- SOLVE SYSTEM CW=W --------- |
| 98 | + ALPHA(1) = 1.D0 |
| 99 | + DO I = 2, N |
| 100 | + ALPHA(I) = 2.D0 |
| 101 | + BETA(I - 1) = -CTH(I) |
| 102 | + end do |
| 103 | + ALPHA(N) = 3.D0 |
| 104 | + DO I = N - 1, 1, -1 |
| 105 | + Q = BETA(I)/ALPHA(I + 1) |
| 106 | + W(I) = W(I) - W(I + 1)*Q |
| 107 | + ALPHA(I) = ALPHA(I) - BETA(I)*Q |
| 108 | + end do |
| 109 | + W(1) = W(1)/ALPHA(1) |
| 110 | + DO I = 2, N |
| 111 | + W(I) = (W(I) - BETA(I - 1)*W(I - 1))/ALPHA(I) |
| 112 | + end do |
| 113 | +! -------- COMPUTE U=CV+DW --------- |
| 114 | + U(1) = V(1) - CTH(2)*V(2) + STH(2)*W(2) |
| 115 | + DO I = 2, N - 1 |
| 116 | + U(I) = 2.D0*V(I) - CTH(I)*V(I - 1) - CTH(I + 1)*V(I + 1) - STH(I)*W(I - 1) + STH(I + 1)*W(I + 1) |
| 117 | + end do |
| 118 | + U(N) = 3.D0*V(N) - CTH(N)*V(N - 1) - STH(N)*W(N - 1) |
| 119 | +! -------- PUT DERIVATIVES IN RIGHT PLACE ------------- |
| 120 | + DO I = 1, N |
| 121 | + DF(I) = TH(N + I) |
| 122 | + DF(N + I) = U(I) |
| 123 | + end do |
| 124 | +end subroutine beam_feval |
| 125 | +! ---------------------------------------------------------------------- |
| 126 | +subroutine beam_jeval(ldim, neqn, t, y, yprime, dfdy, ierr, rpar, ipar) |
| 127 | + use const_def, only: dp |
| 128 | + integer :: ldim, neqn, ierr, ipar(*) |
| 129 | + real(dp) :: t, y(neqn), yprime(neqn), dfdy(ldim, neqn), rpar(*) |
| 130 | +! |
| 131 | +! dummy subroutine |
| 132 | +! |
| 133 | +end subroutine beam_jeval |
| 134 | +! ---------------------------------------------------------------------- |
| 135 | +subroutine beam_solut(neqn, t, y) |
| 136 | + use const_def, only: dp |
| 137 | + integer :: neqn |
| 138 | + real(dp), intent(in) :: t |
| 139 | + real(dp), intent(out) :: y(neqn) |
| 140 | + |
| 141 | +! computed using real(dp) RADAU on an |
| 142 | +! Alphaserver DS20E, with a 667 MHz EV67 processor. |
| 143 | +! |
| 144 | +! uround = 1.01d-19 |
| 145 | +! rtol = atol = h0 = 1.1d-18 |
| 146 | + |
| 147 | + y(1) = -0.5792366591285007D-002 |
| 148 | + y(2) = -0.1695298550721735D-001 |
| 149 | + y(3) = -0.2769103312973094D-001 |
| 150 | + y(4) = -0.3800815655879158D-001 |
| 151 | + y(5) = -0.4790616859743763D-001 |
| 152 | + y(6) = -0.5738710435274594D-001 |
| 153 | + y(7) = -0.6645327313454617D-001 |
| 154 | + y(8) = -0.7510730581979037D-001 |
| 155 | + y(9) = -0.8335219765414992D-001 |
| 156 | + y(10) = -0.9119134654647947D-001 |
| 157 | + y(11) = -0.9862858700132091D-001 |
| 158 | + y(12) = -0.1056682200378002D+000 |
| 159 | + y(13) = -0.1123150395409595D+000 |
| 160 | + y(14) = -0.1185743552727245D+000 |
| 161 | + y(15) = -0.1244520128755561D+000 |
| 162 | + y(16) = -0.1299544113264161D+000 |
| 163 | + y(17) = -0.1350885180610398D+000 |
| 164 | + y(18) = -0.1398618819194422D+000 |
| 165 | + y(19) = -0.1442826441015242D+000 |
| 166 | + y(20) = -0.1483595472463012D+000 |
| 167 | + y(21) = -0.1521019429001447D+000 |
| 168 | + y(22) = -0.1555197978061129D+000 |
| 169 | + y(23) = -0.1586236993420229D+000 |
| 170 | + y(24) = -0.1614248603702127D+000 |
| 171 | + y(25) = -0.1639351238193223D+000 |
| 172 | + y(26) = -0.1661669673440852D+000 |
| 173 | + y(27) = -0.1681335081778558D+000 |
| 174 | + y(28) = -0.1698485080602243D+000 |
| 175 | + y(29) = -0.1713263782440888D+000 |
| 176 | + y(30) = -0.1725821847462537D+000 |
| 177 | + y(31) = -0.1736316537975654D+000 |
| 178 | + y(32) = -0.1744911773840049D+000 |
| 179 | + y(33) = -0.1751778187863392D+000 |
| 180 | + y(34) = -0.1757093178712902D+000 |
| 181 | + y(35) = -0.1761040960228576D+000 |
| 182 | + y(36) = -0.1763812607175549D+000 |
| 183 | + y(37) = -0.1765606097564671D+000 |
| 184 | + y(38) = -0.1766626352260565D+000 |
| 185 | + y(39) = -0.1767085270807460D+000 |
| 186 | + y(40) = -0.1767201761075488D+000 |
| 187 | + y(41) = 0.3747362681329794D-001 |
| 188 | + y(42) = 0.1099117880217593D+000 |
| 189 | + y(43) = 0.1798360474312799D+000 |
| 190 | + y(44) = 0.2472427305442391D+000 |
| 191 | + y(45) = 0.3121293820596567D+000 |
| 192 | + y(46) = 0.3744947377019500D+000 |
| 193 | + y(47) = 0.4343386073492798D+000 |
| 194 | + y(48) = 0.4916620354601748D+000 |
| 195 | + y(49) = 0.5464677854586807D+000 |
| 196 | + y(50) = 0.5987609702624270D+000 |
| 197 | + y(51) = 0.6485493611110740D+000 |
| 198 | + y(52) = 0.6958435169132503D+000 |
| 199 | + y(53) = 0.7406572668520808D+000 |
| 200 | + y(54) = 0.7830081747813241D+000 |
| 201 | + y(55) = 0.8229176659201515D+000 |
| 202 | + y(56) = 0.8604110305190560D+000 |
| 203 | + y(57) = 0.8955175502377805D+000 |
| 204 | + y(58) = 0.9282708263127953D+000 |
| 205 | + y(59) = 0.9587089334522034D+000 |
| 206 | + y(60) = 0.9868747821728363D+000 |
| 207 | + y(61) = 0.1012816579961883D+001 |
| 208 | + y(62) = 0.1036587736679858D+001 |
| 209 | + y(63) = 0.1058246826481355D+001 |
| 210 | + y(64) = 0.1077857811433353D+001 |
| 211 | + y(65) = 0.1095490222005369D+001 |
| 212 | + y(66) = 0.1111219164294898D+001 |
| 213 | + y(67) = 0.1125125269286501D+001 |
| 214 | + y(68) = 0.1137294526609229D+001 |
| 215 | + y(69) = 0.1147818025153607D+001 |
| 216 | + y(70) = 0.1156792132004482D+001 |
| 217 | + y(71) = 0.1164318845130183D+001 |
| 218 | + y(72) = 0.1170505992596124D+001 |
| 219 | + y(73) = 0.1175467424299550D+001 |
| 220 | + y(74) = 0.1179323003228859D+001 |
| 221 | + y(75) = 0.1182198586299667D+001 |
| 222 | + y(76) = 0.1184226111223146D+001 |
| 223 | + y(77) = 0.1185543909805575D+001 |
| 224 | + y(78) = 0.1186297084203716D+001 |
| 225 | + y(79) = 0.1186637618908127D+001 |
| 226 | + y(80) = 0.1186724615113034D+001 |
| 227 | + |
| 228 | +end subroutine beam_solut |
0 commit comments