CG  Version 25
icnssf.h
Go to the documentation of this file.
1 c icf computes the coefficient location given an index offset m1,m2,m3, equation e, and component c
2 c icf corresponds to the M123CE macro found in many C++ files dealing with coefficient gridFunctions
3 c integer icf
4  icf (m1,m2,m3,e,c) =
5  & (off(1)+m1)+hwidth+width*((off(2)+m2)+hwidth+width3
6  & *((off(3)+m3)+hwidth)) +
7  & isten_size*((occ+c)+ncmp*(oce+e))
8 
9 c rxr,rxs,rxt are approximate second derivatives of the mapping in the parameter space (r,s,t)
10 c so rxr(i1,i2,i3,c,d) is the r-derivative of the "c"-derivative (x,y,z) of coordinate "d" (r,s,t)
11 c double precision rxr
12  rxr(i1,i2,i3,d,c)=(rx(i1+1,i2,i3,d,c)-rx(i1-1,i2,i3,d,c))*dri2(1) ! (d_c)_r
13 c double precision rxs
14  rxs(i1,i2,i3,d,c)=(rx(i1,i2+1,i3,d,c)-rx(i1,i2-1,i3,d,c))*dri2(2) ! (d_c)_s
15 c double precision rxt
16  rxt(i1,i2,i3,d,c)=(rx(i1,i2,i3-1,d,c)-rx(i1,i2,i3+1,d,c))*dri2(3) ! (d_c)_t
17 
18 c rxx is the approximate second derivative of the mapping in physical space
19 c XXX only 2D implemented
20 c double precision rxx ! e (x,y) derivative of the "c"-derivative (x,y,z) of coordinate "d"
21  ! basically you get d_{ce}
22  rxx(i1,i2,i3,d,c,e) = rx(i1,i2,i3,1,e)*rxr(i1,i2,i3,d,c)+ ! r_e * ( d_c )_r +
23  & rx(i1,i2,i3,2,e)*rxs(i1,i2,i3,d,c) ! s_e * ( d_c )_s
24 c double precision rxy
25  rxy(i1,i2,i3,d,c) = rx(i1,i2,i3,1,2)*rxr(i1,i2,i3,d,c)+ ! r_y * ( d_c )_r +
26  & rx(i1,i2,i3,2,2)*rxs(i1,i2,i3,d,c) ! s_y * ( d_c )_s
27 
28 c rxxx : third c (x,y) derivative of computational coordinate "d"
29  rxxx(i1,i2,i3,d,c) =
30  & dri2(1)*dri2(2)*(rx(i1,i2,i3,1,c)*rx(i1,i2,i3,2,c)+
31  & rx(i1,i2,i3,1,c)*rx(i1,i2,i3,2,c)) * rx(i1-1,i2-1,i3,d,c) + !-1,-1
32  & (rx(i1,i2,i3,2,c)*rx(i1,i2,i3,2,c)*dri(2)*dri(2) -
33  & rxx(i1,i2,i3,2,c,c)*dri2(2) ) * rx(i1,i2-1,i3,d,c) - ! 0,-1
34  & dri2(1)*dri2(2)*(rx(i1,i2,i3,1,c)*rx(i1,i2,i3,2,c)+
35  & rx(i1,i2,i3,1,c)*rx(i1,i2,i3,2,c)) * rx(i1+1,i2-1,i3,d,c) + !+1,-1
36  & (rx(i1,i2,i3,1,c)*rx(i1,i2,i3,1,c)*dri(1)*dri(1) -
37  & rxx(i1,i2,i3,1,c,c)*dri2(1) ) * rx(i1-1,i2,i3,d,c) - !-1, 0
38  & 2d0 * ( rx(i1,i2,i3,1,c)*rx(i1,i2,i3,1,c)*dri(1)*dri(1) +
39  & rx(i1,i2,i3,2,c)*rx(i1,i2,i3,2,c)*dri(2)*dri(2) )
40  & * rx(i1,i2,i3,d,c) + ! 0, 0
41  & (rx(i1,i2,i3,1,c)*rx(i1,i2,i3,1,c)*dri(1)*dri(1) +
42  & rxx(i1,i2,i3,1,c,c)*dri2(1) ) * rx(i1+1,i2,i3,d,c) - !+1, 0
43  & dri2(1)*dri2(2)*(rx(i1,i2,i3,1,c)*rx(i1,i2,i3,2,c)+
44  & rx(i1,i2,i3,1,c)*rx(i1,i2,i3,2,c)) * rx(i1-1,i2+1,i3,d,c) + !-1,+1
45  & (rx(i1,i2,i3,2,c)*rx(i1,i2,i3,2,c)*dri(2)*dri(2) +
46  & rxx(i1,i2,i3,2,c,c)*dri2(2) ) * rx(i1,i2+1,i3,d,c) + ! 0,+1
47  & dri2(1)*dri2(2)*(rx(i1,i2,i3,1,c)*rx(i1,i2,i3,2,c)+
48  & rx(i1,i2,i3,1,c)*rx(i1,i2,i3,2,c)) * rx(i1+1,i2+1,i3,d,c) !+1,+1
49 
50 c rxxxx : fourth c (x,y) derivative of computation coordinate "d"
51  rxxxx(i1,i2,i3,d,c) = (rxxx(i1+1,i2,i3,d,c)-rxxx(i1-1,i2,i3,d,c))*
52  & dri(1)*rx(i1,i2,i3,1,c) +
53  & (rxxx(i1,i2+1,i3,d,c)-rxxx(i1,i2+1,i3,d,c))*
54  & dri(2)*rx(i1,i2,i3,2,c)
55 
56 c ux approximates a first derivative of component c
57 c double precision ux
58  ux(i1,i2,i3,c,m1) =
59  & rx(i1,i2,i3,1,m1)*(u(i1+1,i2,i3,c)-u(i1-1,i2,i3,c))*dri2(1) + ! r_m * u_r +
60  & rx(i1,i2,i3,2,m1)*(u(i1,i2+1,i3,c)-u(i1,i2-1,i3,c))*dri2(2) ! s_m * u_s
61 
62 c ux4m D_o - a*h^2D_-D_+^2
63  ux4m(i1,i2,i3,c,m1) =
64  & rx(i1,i2,i3,1,m1)*( -alpha*u(i1+2,i2,i3,c)+
65  & (.5d0+3d0*alpha)*u(i1+1,i2,i3,c) -
66  & 3d0*alpha*u(i1,i2,i3,c) +
67  & (alpha-.5d0)*u(i1-1,i2,i3,c))*dri(1) +
68  & rx(i1,i2,i3,2,m1)*( -alpha*u(i1,i2+2,i3,c)+
69  & (.5d0+3d0*alpha)*u(i1,i2+1,i3,c) -
70  & 3d0*alpha*u(i1,i2,i3,c) +
71  & (alpha-.5d0)*u(i1,i2-1,i3,c))*dri(2)
72 
73  logux4m(i1,i2,i3,c,m1) =
74  & rx(i1,i2,i3,1,m1)*( -alpha*log(abs(u(i1+2,i2,i3,c)))+
75  & (.5d0+3d0*alpha)*log(abs(u(i1+1,i2,i3,c))) -
76  & 3d0*alpha*log(abs(u(i1,i2,i3,c))) +
77  & (alpha-.5d0)*log(abs(u(i1-1,i2,i3,c))))*dri(1)+
78  & rx(i1,i2,i3,2,m1)*( -alpha*log(abs(u(i1,i2+2,i3,c)))+
79  & (.5d0+3d0*alpha)*log(abs(u(i1,i2+1,i3,c))) -
80  & 3d0*alpha*log(abs(u(i1,i2,i3,c))) +
81  & (alpha-.5d0)*log(abs(u(i1,i2-1,i3,c))))*dri(2)
82 
83  logux(i1,i2,i3,c,m1) =
84  & rx(i1,i2,i3,1,m1)*(
85  & (.5d0)*log(abs(u(i1+1,i2,i3,c))) -
86  & (.5d0)*log(abs(u(i1-1,i2,i3,c))))*dri(1)+
87  & rx(i1,i2,i3,2,m1)*(
88  & (.5d0)*log(abs(u(i1,i2+1,i3,c))) -
89  & (.5d0)*log(abs(u(i1,i2-1,i3,c))))*dri(2)
90 
91 c ux4p D_o - a*h^2D_+D_-^2
92  ux4p(i1,i2,i3,c,m1) =
93  & rx(i1,i2,i3,1,m1)*( +alpha*u(i1-2,i2,i3,c) -
94  & (.5d0+3d0*alpha)*u(i1-1,i2,i3,c) +
95  & 3d0*alpha*u(i1,i2,i3,c) -
96  & (alpha-.5d0)*u(i1+1,i2,i3,c))*dri(1) +
97  & rx(i1,i2,i3,2,m1)*( +alpha*u(i1,i2-2,i3,c)-
98  & (.5d0+3d0*alpha)*u(i1,i2-1,i3,c) +
99  & 3d0*alpha*u(i1,i2,i3,c) -
100  & (alpha-.5d0)*u(i1,i2+1,i3,c))*dri(2)
101 
102  logux4p(i1,i2,i3,c,m1) =
103  & rx(i1,i2,i3,1,m1)*( +alpha*log(abs(u(i1-2,i2,i3,c))) -
104  & (.5d0+3d0*alpha)*log(abs(u(i1-1,i2,i3,c))) +
105  & 3d0*alpha*log(abs(u(i1,i2,i3,c))) -
106  & (alpha-.5d0)*log(abs(u(i1+1,i2,i3,c))))*dri(1)+
107  & rx(i1,i2,i3,2,m1)*( +alpha*log(abs(u(i1,i2-2,i3,c)))-
108  & (.5d0+3d0*alpha)*log(abs(u(i1,i2-1,i3,c))) +
109  & 3d0*alpha*log(abs(u(i1,i2,i3,c))) -
110  & (alpha-.5d0)*log(abs(u(i1,i2+1,i3,c))))*dri(2)
111 
112 c uxx approximates a second (possibly mixed) derivative of component c
113 c double precision uxx
114  uxx(i1,i2,i3,c,m1,m2) =
115  & dri2(1)*dri2(2)*(rx(i1,i2,i3,1,m1)*rx(i1,i2,i3,2,m2)+
116  & rx(i1,i2,i3,1,m2)*rx(i1,i2,i3,2,m1)) * u(i1-1,i2-1,i3,c) + !-1,-1
117  & (rx(i1,i2,i3,2,m1)*rx(i1,i2,i3,2,m2)*dri(2)*dri(2) -
118  & rxx(i1,i2,i3,2,m1,m2)*dri2(2) ) * u(i1,i2-1,i3,c) - ! 0,-1
119  & dri2(1)*dri2(2)*(rx(i1,i2,i3,1,m1)*rx(i1,i2,i3,2,m2)+
120  & rx(i1,i2,i3,1,m2)*rx(i1,i2,i3,2,m1)) * u(i1+1,i2-1,i3,c) + !+1,-1
121  & (rx(i1,i2,i3,1,m1)*rx(i1,i2,i3,1,m2)*dri(1)*dri(1) -
122  & rxx(i1,i2,i3,1,m1,m2)*dri2(1) ) * u(i1-1,i2,i3,c) - !-1, 0
123  & 2d0 * ( rx(i1,i2,i3,1,m1)*rx(i1,i2,i3,1,m2)*dri(1)*dri(1) +
124  & rx(i1,i2,i3,2,m1)*rx(i1,i2,i3,2,m2)*dri(2)*dri(2) )
125  & * u(i1,i2,i3,c) + ! 0, 0
126  & (rx(i1,i2,i3,1,m1)*rx(i1,i2,i3,1,m2)*dri(1)*dri(1) +
127  & rxx(i1,i2,i3,1,m1,m2)*dri2(1) ) * u(i1+1,i2,i3,c) - !+1, 0
128  & dri2(1)*dri2(2)*(rx(i1,i2,i3,1,m1)*rx(i1,i2,i3,2,m2)+
129  & rx(i1,i2,i3,1,m2)*rx(i1,i2,i3,2,m1)) * u(i1-1,i2+1,i3,c) + !-1,+1
130  & (rx(i1,i2,i3,2,m1)*rx(i1,i2,i3,2,m2)*dri(2)*dri(2) +
131  & rxx(i1,i2,i3,2,m1,m2)*dri2(2) ) * u(i1,i2+1,i3,c) + ! 0,+1
132  & dri2(1)*dri2(2)*(rx(i1,i2,i3,1,m1)*rx(i1,i2,i3,2,m2)+
133  & rx(i1,i2,i3,1,m2)*rx(i1,i2,i3,2,m1)) * u(i1+1,i2+1,i3,c) !+1,+1
134 
135 c radx4p
136  radx4p(i1,i2,i3) = rx(i1,i2,i3,1,2)*dri(1)*(
137  & alpha*xyz(i1-2,i2,i3,2)-
138  & 3d0*alpha*xyz(i1-1,i2,i3,2)+
139  & 3d0*alpha*xyz(i1,i2,i3,2)-
140  & alpha*xyz(i1+1,i2,i3,2)) +
141  & rx(i1,i2,i3,2,2)*dri(2)*(
142  & alpha*xyz(i1,i2-2,i3,2)-
143  & 3d0*alpha*xyz(i1,i2-1,i3,2)+
144  & 3d0*alpha*xyz(i1,i2,i3,2)-
145  & alpha*xyz(i1,i2+1,i3,2))
146 
147 c END OF STATEMENT FUNCTIONS