36
37
38
40
41
42
43#include "implicit_f.inc"
44
45
46
47 INTEGER IDX, IDY, IDZ, NCTRL, PX, PY, PZ, ITEL, N
49 . gaussx, gaussy, gaussz
51 . DIMENSION(*) :: aire
53 . DIMENSION(*) :: xxi,yyi,zzi,wwi
55 . DIMENSION(*) :: kx, ky, kz
56
57
58
59 INTEGER NUMLOC, I, J, K, NA, NB, NC
61 . DIMENSION(NCTRL) :: r
63 . DIMENSION(NCTRL,3) :: drdxi
65 . sumtot
67 . DIMENSION(PX+1) :: fn, dndxi
69 . DIMENSION(PY+1) :: fm, dmdxi
71 . DIMENSION(PZ+1) :: fl, dldxi
73 . DIMENSION(3) :: xi, sumxi
75 . DIMENSION(3,3) :: dxdxi, ajmat, dxidtildexi
76
77
78
79
80
81 dxdxi(:,:)=zero
82 dxidtildexi(:,:)=zero
83 ajmat(:,:)=zero
84
85
86 xi(1) = ((kx(idx+1)-kx(idx))*gaussx + (kx(idx+1)+(kx(idx))))/two
87 xi(2) = ((ky(idy+1)-ky(idy))*gaussy + (ky(idy+1)+(ky(idy))))/two
88 xi(3) = ((kz(idz+1)-kz(idz))*gaussz + (kz(idz+1)+(kz(idz))))/two
89
90
91
95
96
97
98 numloc=0
99 sumtot=zero
100 sumxi(1)=zero
101 sumxi(2)=zero
102 sumxi(3)=zero
103
104
105
106 DO k = 0,pz
107 DO j = 0,py
108 DO i = 0,px
109 numloc = numloc+1
110 r(numloc)=fn(px+1-i)*fm(py+1-j)*fl(pz+1-k)*wwi(numloc)
111 sumtot=sumtot+r(numloc)
112 drdxi(numloc,1)=dndxi(px+1-i)*fm(py+1-j)*fl(pz+1-k)*
113 . wwi(numloc)
114 sumxi(1)=sumxi(1)+drdxi(numloc,1)
115 drdxi(numloc,2)=fn(px+1-i)*dmdxi(py+1-j)*fl(pz+1-k)*
116 . wwi(numloc)
117 sumxi(2)=sumxi(2)+drdxi(numloc,2)
118 drdxi(numloc,3)=fn(px+1-i)*fm(py+1-j)*dldxi(pz+1-k)*
119 . wwi(numloc)
120 sumxi(3)=sumxi(3)+drdxi(numloc,3)
121 ENDDO
122 ENDDO
123 ENDDO
124
125
126
127 DO numloc=1,nctrl
128 r(numloc)=r(numloc)/sumtot
129 ENDDO
130
131 DO i=1,3
132 DO numloc=1,nctrl
133 drdxi(numloc,i)=(drdxi(numloc,i)-r(numloc)*sumxi(i))/sumtot
134 ENDDO
135 ENDDO
136
137
138
139 DO numloc=1,nctrl
140 DO nb=1,3
141 dxdxi(1,nb)=dxdxi(1,nb)+xxi(numloc)*drdxi(numloc,nb)
142 dxdxi(2,nb)=dxdxi(2,nb)+yyi(numloc)*drdxi(numloc,nb)
143 dxdxi(3,nb)=dxdxi(3,nb)+zzi(numloc)*drdxi(numloc,nb)
144 ENDDO
145 ENDDO
146
147
148
149 dxidtildexi(1,1)=(kx(idx+1)-kx(idx))/two
150 dxidtildexi(2,2)=(ky(idy+1)-ky(idy))/two
151 dxidtildexi(3,3)=(kz(idz+1)-kz(idz))/two
152
153 DO na=1,3
154 DO nb=1,3
155 DO nc=1,3
156 ajmat(na,nb)=ajmat(na,nb)+dxdxi(na,nc)*dxidtildexi(nc,nb)
157 ENDDO
158 ENDDO
159 ENDDO
160
161 aire(1) = sqrt(ajmat(1,1)*ajmat(1,1)+ajmat(2,1)*ajmat(2,1)
162 . +ajmat(3,1)*ajmat(3,1))
163 . *sqrt(ajmat(1,2)*ajmat(1,2)+ajmat(2,2)*ajmat(2,2)
164 . +ajmat(3,2)*ajmat(3,2))
165 aire(2) = sqrt(ajmat(1,1)*ajmat(1,1)+ajmat(2,1)*ajmat(2,1)
166 . +ajmat(3,1)*ajmat(3,1))
167 . *sqrt(ajmat(1,3)*ajmat(1,3)+ajmat(2,3)*ajmat(2,3)
168 . +ajmat(3,3)*ajmat(3,3))
169 aire(3) = sqrt(ajmat(1,2)*ajmat(1,2)+ajmat(2,2)*ajmat(2,2)
170 . +ajmat(3,2)*ajmat(3,2))
171 . *sqrt(ajmat(1,3)*ajmat(1,3)+ajmat(2,3)*ajmat(2,3)
172 . +ajmat(3,3)*ajmat(3,3))
173
174 RETURN
subroutine dersbasisfuns(idxi, pxi, xi, kxi, ders1, ders2)