1 /* Automatically generated functional code: becke86
2    Maxima input:
3     >> BETA:0.00787;
4     >> GAMMA:0.004;
5     >> PI:3.14159265358979312;
6     >> PREF:3/4*(6/PI)^(1/3);
7     >> ra43:rhoa^(4/3);
8     >> rb43:rhob^(4/3);
9     >> denoma:1+GAMMA*xa*xa;
10     >> denomb:1+GAMMA*xb*xb;
11     >>
12     >> Exa: -PREF*ra43*(1 + BETA*xa*xa)/denoma;
13     >> Exb: -PREF*rb43*(1 + BETA*xb*xb)/denomb;
14     >>
15     >> K(rhoa,grada,rhob,gradb,gradab) := Exa + Exb;
16 */
17 
18 // add "extern Functional becke86Functional;" to 'functionals.h'
19 // add "&becke86Functional," to 'functionals.c'
20 // add "fun-becke86.c" to 'Makefile.in'
21 
22 #include <math.h>
23 #include <stddef.h>
24 #include "general.h"
25 
26 #define __CVERSION__
27 
28 #include "functionals.h"
29 #define LOG log
30 #define ABS fabs
31 #define ASINH asinh
32 #define SQRT sqrt
33 
34 /* INTERFACE PART */
becke86_isgga(void)35 static integer becke86_isgga(void) {return 1;}
36 static integer becke86_read(const char* conf_line);
37 static real becke86_energy(const FunDensProp* dp);
38 static void becke86_first(FunFirstFuncDrv *ds, real factor,
39                            const FunDensProp* dp);
40 static void becke86_second(FunSecondFuncDrv *ds, real factor,
41                             const FunDensProp* dp);
42 static void becke86_third(FunThirdFuncDrv *ds, real factor,
43                            const FunDensProp* dp);
44 
45 static void becke86_fourth(FunFourthFuncDrv *ds, real factor,
46                            const FunDensProp* dp);
47 
48 //static integer fun_true(void) { return 1; }
49 Functional B86xFunctional = {
50   "B86x",
51   becke86_isgga,
52   3,
53   becke86_read,
54   NULL,
55   becke86_energy,
56   becke86_first,
57   becke86_second,
58   becke86_third,
59   becke86_fourth
60 };
61 
62 /* IMPLEMENTATION PART */
63 static integer
becke86_read(const char * conf_line)64 becke86_read(const char* conf_line)
65 {
66     fun_set_hf_weight(0);
67     return 1;
68 }
69 
70 
71 static real
becke86_energy(const FunDensProp * dp)72 becke86_energy(const FunDensProp* dp)
73 {
74     real t[5],zk;
75     real rhoa = dp->rhoa;
76     real rhob = dp->rhob;
77     real grada = dp->grada;
78     real gradb = dp->gradb;
79     real gradab = dp->gradab;
80 
81     t[1] = pow(grada,2.0);
82     t[2] = 1/pow(rhoa,2.666666666666667);
83     t[3] = pow(gradb,2.0);
84     t[4] = 1/pow(rhob,2.666666666666667);
85     zk = -0.9305257363491*(0.00787*t[3]*t[4]+1.0)*pow(rhob,1.333333333333333)/(0.004*t[3]*t[4]+1.0)-0.9305257363491*(0.00787*t[1]*t[2]+1.0)*pow(rhoa,1.333333333333333)/(0.004*t[1]*t[2]+1.0);
86     return zk;
87 }
88 
89 static void
becke86_first(FunFirstFuncDrv * ds,real factor,const FunDensProp * dp)90 becke86_first(FunFirstFuncDrv *ds, real factor, const FunDensProp* dp)
91 {
92     real t[17];
93     real dfdra, dfdrb, dfdga, dfdgb, dfdab;
94     real rhoa = dp->rhoa;
95     real rhob = dp->rhob;
96     real grada = dp->grada;
97     real gradb = dp->gradb;
98     real gradab = dp->gradab;
99 
100     t[1] = pow(grada,2.0);
101     t[2] = 1/pow(rhoa,2.666666666666667);
102     t[3] = 0.004*t[1]*t[2]+1.0;
103     t[4] = 1/t[3];
104     t[5] = 1/pow(rhoa,2.333333333333333);
105     t[6] = 1/pow(t[3],2.0);
106     t[7] = 0.00787*t[1]*t[2]+1.0;
107     t[8] = pow(gradb,2.0);
108     t[9] = 1/pow(rhob,2.666666666666667);
109     t[10] = 0.004*t[8]*t[9]+1.0;
110     t[11] = 1/t[10];
111     t[12] = 1/pow(rhob,2.333333333333333);
112     t[13] = 1/pow(t[10],2.0);
113     t[14] = 0.00787*t[8]*t[9]+1.0;
114     t[15] = 1/pow(rhoa,1.333333333333333);
115     t[16] = 1/pow(rhob,1.333333333333333);
116     dfdra = -1.2407009817988*t[4]*t[7]*pow(rhoa,.3333333333333333)-0.0099256078543904*t[1]*t[6]*t[7]*t[5]+.01952863345351311*t[1]*t[4]*t[5];
117     dfdrb = -1.2407009817988*t[11]*t[14]*pow(rhob,.3333333333333333)-0.0099256078543904*t[8]*t[13]*t[14]*t[12]+.01952863345351311*t[8]*t[11]*t[12];
118     dfdga = 0.0074442058907928*grada*t[6]*t[7]*t[15]-.01464647509013483*grada*t[4]*t[15];
119     dfdgb = 0.0074442058907928*gradb*t[13]*t[14]*t[16]-.01464647509013483*gradb*t[11]*t[16];
120     dfdab = 0.0;
121     ds->df1000 += factor*dfdra;
122     ds->df0100 += factor*dfdrb;
123     ds->df0010 += factor*dfdga;
124     ds->df0001 += factor*dfdgb;
125     ds->df00001 += factor*dfdab;
126 }
127 
128 static void
becke86_second(FunSecondFuncDrv * ds,real factor,const FunDensProp * dp)129 becke86_second(FunSecondFuncDrv *ds, real factor, const FunDensProp* dp)
130 {
131     real t[31];
132     real dfdra, dfdrb, dfdga, dfdgb, dfdab;
133     real d2fdraga, d2fdrara, d2fdrarb, d2fdragb, d2fdrbrb;
134     real d2fdrbgb, d2fdgaga, d2fdgbgb, d2fdrbga;
135     real d2fdraab, d2fdrbab;
136     real d2fdgaab, d2fdgbab, d2fdabab, d2fdgagb;
137     real rhoa = dp->rhoa;
138     real rhob = dp->rhob;
139     real grada = dp->grada;
140     real gradb = dp->gradb;
141     real gradab = dp->gradab;
142 
143     t[1] = pow(grada,2.0);
144     t[2] = 1/pow(rhoa,2.666666666666667);
145     t[3] = 0.004*t[1]*t[2]+1.0;
146     t[4] = 1/t[3];
147     t[5] = 1/pow(rhoa,2.333333333333333);
148     t[6] = 1/pow(t[3],2.0);
149     t[7] = 0.00787*t[1]*t[2]+1.0;
150     t[8] = pow(gradb,2.0);
151     t[9] = 1/pow(rhob,2.666666666666667);
152     t[10] = 0.004*t[8]*t[9]+1.0;
153     t[11] = 1/t[10];
154     t[12] = 1/pow(rhob,2.333333333333333);
155     t[13] = 1/pow(t[10],2.0);
156     t[14] = 0.00787*t[8]*t[9]+1.0;
157     t[15] = 1/pow(rhoa,1.333333333333333);
158     t[16] = 1/pow(rhob,1.333333333333333);
159     t[17] = pow(grada,4.0);
160     t[18] = 1/pow(rhoa,6.0);
161     t[19] = 1/pow(t[3],3.0);
162     t[20] = 1/pow(rhoa,3.333333333333333);
163     t[21] = pow(grada,3.0);
164     t[22] = 1/pow(rhoa,5.0);
165     t[23] = pow(gradb,4.0);
166     t[24] = 1/pow(rhob,6.0);
167     t[25] = 1/pow(t[10],3.0);
168     t[26] = 1/pow(rhob,3.333333333333333);
169     t[27] = pow(gradb,3.0);
170     t[28] = 1/pow(rhob,5.0);
171     t[29] = 1/pow(rhoa,4.0);
172     t[30] = 1/pow(rhob,4.0);
173     dfdra = -1.2407009817988*t[4]*t[7]*pow(rhoa,.3333333333333333)-0.0099256078543904*t[1]*t[6]*t[7]*t[5]+.01952863345351311*t[1]*t[4]*t[5];
174     dfdrb = -1.2407009817988*t[11]*t[14]*pow(rhob,.3333333333333333)-0.0099256078543904*t[8]*t[13]*t[14]*t[12]+.01952863345351311*t[8]*t[11]*t[12];
175     dfdga = 0.0074442058907928*grada*t[6]*t[7]*t[15]-.01464647509013483*grada*t[4]*t[15];
176     dfdgb = 0.0074442058907928*gradb*t[13]*t[14]*t[16]-.01464647509013483*gradb*t[11]*t[16];
177     dfdab = 0.0;
178     d2fdrara = -.4135669939329333*t[4]*t[7]/pow(rhoa,.6666666666666666)+.009925607854390403*t[1]*t[6]*t[7]*t[20]-.01952863345351312*t[1]*t[4]*t[20]-2.1174630089366187E-4*t[17]*t[19]*t[7]*t[18]+4.166108470082797E-4*t[17]*t[6]*t[18];
179     d2fdrarb = 0.0;
180     d2fdraga = -0.0099256078543904*grada*t[6]*t[7]*t[5]+.01952863345351311*grada*t[4]*t[5]+1.588097256702464E-4*t[21]*t[19]*t[7]*t[22]-3.124581352562098E-4*t[21]*t[6]*t[22];
181     d2fdragb = 0.0;
182     d2fdraab = 0.0;
183     d2fdrbrb = -.4135669939329333*t[11]*t[14]/pow(rhob,.6666666666666666)+.009925607854390403*t[8]*t[13]*t[14]*t[26]-.01952863345351312*t[8]*t[11]*t[26]-2.1174630089366187E-4*t[23]*t[25]*t[14]*t[24]+4.166108470082797E-4*t[23]*t[13]*t[24];
184     d2fdrbga = 0.0;
185     d2fdrbgb = -0.0099256078543904*gradb*t[13]*t[14]*t[12]+.01952863345351311*gradb*t[11]*t[12]+1.588097256702464E-4*t[27]*t[25]*t[14]*t[28]-3.124581352562098E-4*t[27]*t[13]*t[28];
186     d2fdrbab = 0.0;
187     d2fdgaga = 0.0074442058907928*t[6]*t[7]*t[15]-.01464647509013483*t[4]*t[15]-1.1910729425268479E-4*t[1]*t[19]*t[7]*t[29]+2.3434360144215735E-4*t[1]*t[6]*t[29];
188     d2fdgagb = 0.0;
189     d2fdgaab = 0.0;
190     d2fdgbgb = 0.0074442058907928*t[13]*t[14]*t[16]-.01464647509013483*t[11]*t[16]-1.1910729425268479E-4*t[8]*t[25]*t[14]*t[30]+2.3434360144215735E-4*t[8]*t[13]*t[30];
191     d2fdgbab = 0.0;
192     d2fdabab = 0.0;
193     ds->df1000 += factor*dfdra;
194     ds->df0100 += factor*dfdrb;
195     ds->df0010 += factor*dfdga;
196     ds->df0001 += factor*dfdgb;
197     ds->df00001 += factor*dfdab;
198     ds->df2000 += factor*d2fdrara;
199     ds->df1100 += factor*d2fdrarb;
200     ds->df1010 += factor*d2fdraga;
201     ds->df1001 += factor*d2fdragb;
202     ds->df10001 += factor*d2fdraab;
203     ds->df0200 += factor*d2fdrbrb;
204     ds->df0110 += factor*d2fdrbga;
205     ds->df0101 += factor*d2fdrbgb;
206     ds->df01001 += factor*d2fdrbab;
207     ds->df0020 += factor*d2fdgaga;
208     ds->df0011 += factor*d2fdgagb;
209     ds->df00101+= factor*d2fdgaab;
210     ds->df0002 += factor*d2fdgbgb;
211     ds->df00011+= factor*d2fdgbab;
212     ds->df00002+= factor*d2fdabab;
213 }
214 
215 static void
becke86_third(FunThirdFuncDrv * ds,real factor,const FunDensProp * dp)216 becke86_third(FunThirdFuncDrv *ds, real factor, const FunDensProp* dp)
217 {
218     real t[49];
219     real dfdra, dfdrb, dfdga, dfdgb, dfdab;
220     real d2fdrara , d2fdrarb , d2fdraga , d2fdragb ;
221     real d2fdraab , d2fdrbrb , d2fdrbga , d2fdrbgb ;
222     real d2fdrbab , d2fdgaga , d2fdgagb , d2fdgaab ;
223     real d2fdgbgb , d2fdgbab , d2fdabab ;
224     real d3fdrarara , d3fdrararb , d3fdraraga , d3fdraragb ;
225     real d3fdraraab , d3fdrarbrb , d3fdrarbga , d3fdrarbgb ;
226     real d3fdrarbab , d3fdragaga , d3fdragagb , d3fdragaab ;
227     real d3fdragbgb , d3fdragbab , d3fdraabab , d3fdrbrbrb ;
228     real d3fdrbrbga , d3fdrbrbgb , d3fdrbrbab , d3fdrbgaga ;
229     real d3fdrbgagb , d3fdrbgaab , d3fdrbgbgb , d3fdrbgbab ;
230     real d3fdrbabab , d3fdgagaga , d3fdgagagb , d3fdgagaab ;
231     real d3fdgagbgb , d3fdgagbab , d3fdgaabab , d3fdgbgbgb ;
232     real d3fdgbgbab , d3fdgbabab , d3fdababab ;
233     real rhoa = dp->rhoa;
234     real rhob = dp->rhob;
235     real grada = dp->grada;
236     real gradb = dp->gradb;
237     real gradab = dp->gradab;
238 
239     t[1] = pow(grada,2.0);
240     t[2] = 1/pow(rhoa,2.666666666666667);
241     t[3] = 0.004*t[1]*t[2]+1.0;
242     t[4] = 1/t[3];
243     t[5] = 1/pow(rhoa,2.333333333333333);
244     t[6] = 1/pow(t[3],2.0);
245     t[7] = 0.00787*t[1]*t[2]+1.0;
246     t[8] = pow(gradb,2.0);
247     t[9] = 1/pow(rhob,2.666666666666667);
248     t[10] = 0.004*t[8]*t[9]+1.0;
249     t[11] = 1/t[10];
250     t[12] = 1/pow(rhob,2.333333333333333);
251     t[13] = 1/pow(t[10],2.0);
252     t[14] = 0.00787*t[8]*t[9]+1.0;
253     t[15] = 1/pow(rhoa,1.333333333333333);
254     t[16] = 1/pow(rhob,1.333333333333333);
255     t[17] = pow(grada,4.0);
256     t[18] = 1/pow(rhoa,6.0);
257     t[19] = 1/pow(t[3],3.0);
258     t[20] = 1/pow(rhoa,3.333333333333333);
259     t[21] = pow(grada,3.0);
260     t[22] = 1/pow(rhoa,5.0);
261     t[23] = pow(gradb,4.0);
262     t[24] = 1/pow(rhob,6.0);
263     t[25] = 1/pow(t[10],3.0);
264     t[26] = 1/pow(rhob,3.333333333333333);
265     t[27] = pow(gradb,3.0);
266     t[28] = 1/pow(rhob,5.0);
267     t[29] = 1/pow(rhoa,4.0);
268     t[30] = 1/pow(rhob,4.0);
269     t[31] = pow(grada,6.0);
270     t[32] = 1/pow(rhoa,9.666666666666666);
271     t[33] = 1/pow(t[3],4.0);
272     t[34] = 1/pow(rhoa,7.0);
273     t[35] = 1/pow(rhoa,4.333333333333333);
274     t[36] = pow(grada,5.0);
275     t[37] = 1/pow(rhoa,8.666666666666666);
276     t[38] = 1/pow(rhoa,7.666666666666667);
277     t[39] = pow(gradb,6.0);
278     t[40] = 1/pow(rhob,9.666666666666666);
279     t[41] = 1/pow(t[10],4.0);
280     t[42] = 1/pow(rhob,7.0);
281     t[43] = 1/pow(rhob,4.333333333333333);
282     t[44] = pow(gradb,5.0);
283     t[45] = 1/pow(rhob,8.666666666666666);
284     t[46] = 1/pow(rhob,7.666666666666667);
285     t[47] = 1/pow(rhoa,6.666666666666667);
286     t[48] = 1/pow(rhob,6.666666666666667);
287     dfdra = -1.2407009817988*t[4]*t[7]*pow(rhoa,.3333333333333333)-0.0099256078543904*t[1]*t[6]*t[7]*t[5]+.01952863345351311*t[1]*t[4]*t[5];
288     dfdrb = -1.2407009817988*t[11]*t[14]*pow(rhob,.3333333333333333)-0.0099256078543904*t[8]*t[13]*t[14]*t[12]+.01952863345351311*t[8]*t[11]*t[12];
289     dfdga = 0.0074442058907928*grada*t[6]*t[7]*t[15]-.01464647509013483*grada*t[4]*t[15];
290     dfdgb = 0.0074442058907928*gradb*t[13]*t[14]*t[16]-.01464647509013483*gradb*t[11]*t[16];
291     dfdab = 0.0;
292     d2fdrara = -.4135669939329333*t[4]*t[7]/pow(rhoa,.6666666666666666)+.009925607854390403*t[1]*t[6]*t[7]*t[20]-.01952863345351312*t[1]*t[4]*t[20]-2.1174630089366187E-4*t[17]*t[19]*t[7]*t[18]+4.166108470082797E-4*t[17]*t[6]*t[18];
293     d2fdrarb = 0.0;
294     d2fdraga = -0.0099256078543904*grada*t[6]*t[7]*t[5]+.01952863345351311*grada*t[4]*t[5]+1.588097256702464E-4*t[21]*t[19]*t[7]*t[22]-3.124581352562098E-4*t[21]*t[6]*t[22];
295     d2fdragb = 0.0;
296     d2fdraab = 0.0;
297     d2fdrbrb = -.4135669939329333*t[11]*t[14]/pow(rhob,.6666666666666666)+.009925607854390403*t[8]*t[13]*t[14]*t[26]-.01952863345351312*t[8]*t[11]*t[26]-2.1174630089366187E-4*t[23]*t[25]*t[14]*t[24]+4.166108470082797E-4*t[23]*t[13]*t[24];
298     d2fdrbga = 0.0;
299     d2fdrbgb = -0.0099256078543904*gradb*t[13]*t[14]*t[12]+.01952863345351311*gradb*t[11]*t[12]+1.588097256702464E-4*t[27]*t[25]*t[14]*t[28]-3.124581352562098E-4*t[27]*t[13]*t[28];
300     d2fdrbab = 0.0;
301     d2fdgaga = 0.0074442058907928*t[6]*t[7]*t[15]-.01464647509013483*t[4]*t[15]-1.1910729425268479E-4*t[1]*t[19]*t[7]*t[29]+2.3434360144215735E-4*t[1]*t[6]*t[29];
302     d2fdgagb = 0.0;
303     d2fdgaab = 0.0;
304     d2fdgbgb = 0.0074442058907928*t[13]*t[14]*t[16]-.01464647509013483*t[11]*t[16]-1.1910729425268479E-4*t[8]*t[25]*t[14]*t[30]+2.3434360144215735E-4*t[8]*t[13]*t[30];
305     d2fdgbab = 0.0;
306     d2fdabab = 0.0;
307     d3fdrarara= .2757113292886222*t[4]*t[7]/pow(rhoa,1.666666666666667)-.03749674078325263*t[1]*t[6]*t[7]*t[35]+.07377483749104954*t[1]*t[4]*t[35]+.001482224106255633*t[17]*t[19]*t[7]*t[34]-.002916275929057958*t[17]*t[6]*t[34]-6.77588162859718E-6*t[31]*t[33]*t[7]*t[32]+1.333154710426495E-5*t[31]*t[19]*t[32];
308     d3fdrararb = 0.0;
309     d3fdraraga = .02315975166024427*grada*t[6]*t[7]*t[20]-0.0455668113915306*grada*t[4]*t[20]-.001005794929244894*t[21]*t[19]*t[7]*t[18]+.001978901523289329*t[21]*t[6]*t[18]+5.081911221447886E-6*t[36]*t[33]*t[7]*t[37]-9.998660328198714E-6*t[36]*t[19]*t[37];
310     d3fdraragb = 0.0;
311     d3fdraraab = 0.0;
312     d3fdrarbrb = 0.0;
313     d3fdrarbga = 0.0;
314     d3fdrarbgb = 0.0;
315     d3fdrarbab = 0.0;
316     d3fdragaga = -0.0099256078543904*t[6]*t[7]*t[5]+.01952863345351311*t[4]*t[5]+6.352389026809856E-4*t[1]*t[19]*t[7]*t[22]-.001249832541024839*t[1]*t[6]*t[22]-3.8114334160859137E-6*t[17]*t[33]*t[7]*t[38]+7.498995246149036E-6*t[17]*t[19]*t[38];
317     d3fdragagb = 0.0;
318     d3fdragaab = 0.0;
319     d3fdragbgb = 0.0;
320     d3fdragbab = 0.0;
321     d3fdraabab = 0.0;
322     d3fdrbrbrb = .2757113292886222*t[11]*t[14]/pow(rhob,1.666666666666667)-.03749674078325263*t[8]*t[13]*t[14]*t[43]+.07377483749104954*t[8]*t[11]*t[43]+.001482224106255633*t[23]*t[25]*t[14]*t[42]-.002916275929057958*t[23]*t[13]*t[42]+1.333154710426495E-5*t[39]*t[25]*t[40]-6.77588162859718E-6*t[39]*t[41]*t[14]*t[40];
323     d3fdrbrbga = 0.0;
324     d3fdrbrbgb = .02315975166024427*gradb*t[13]*t[14]*t[26]-0.0455668113915306*gradb*t[11]*t[26]-.001005794929244894*t[27]*t[25]*t[14]*t[24]+.001978901523289329*t[27]*t[13]*t[24]+5.081911221447886E-6*t[44]*t[41]*t[14]*t[45]-9.998660328198714E-6*t[44]*t[25]*t[45];
325     d3fdrbrbab = 0.0;
326     d3fdrbgaga= 0.0;
327     d3fdrbgagb = 0.0;
328     d3fdrbgaab = 0.0;
329     d3fdrbgbgb = -0.0099256078543904*t[13]*t[14]*t[12]+.01952863345351311*t[11]*t[12]+6.352389026809856E-4*t[8]*t[25]*t[14]*t[28]-.001249832541024839*t[8]*t[13]*t[28]-3.8114334160859137E-6*t[23]*t[41]*t[14]*t[46]+7.498995246149036E-6*t[23]*t[25]*t[46];
330     d3fdrbgbab = 0.0;
331     d3fdrbabab = 0.0;
332     d3fdgagaga = -3.573218827580544E-4*grada*t[19]*t[7]*t[29]+7.030308043264719E-4*grada*t[6]*t[29]+2.858575062064435E-6*t[21]*t[33]*t[7]*t[47]-5.624246434611776E-6*t[21]*t[19]*t[47];
333     d3fdgagagb = 0.0;
334     d3fdgagaab = 0.0;
335     d3fdgagbgb = 0.0;
336     d3fdgagbab = 0.0;
337     d3fdgaabab = 0.0;
338     d3fdgbgbgb = -3.573218827580544E-4*gradb*t[25]*t[14]*t[30]+7.030308043264719E-4*gradb*t[13]*t[30]+2.858575062064435E-6*t[27]*t[41]*t[14]*t[48]-5.624246434611776E-6*t[27]*t[25]*t[48];
339     d3fdgbgbab = 0.0;
340     d3fdgbabab = 0.0;
341     d3fdababab = 0.0;
342     ds->df1000 += factor*dfdra;
343     ds->df0100 += factor*dfdrb;
344     ds->df0010 += factor*dfdga;
345     ds->df0001 += factor*dfdgb;
346     ds->df00001 += factor*dfdab;
347     ds->df2000 += factor*d2fdrara;
348     ds->df1100 += factor*d2fdrarb;
349     ds->df1010 += factor*d2fdraga;
350     ds->df1001 += factor*d2fdragb;
351     ds->df10001 += factor*d2fdraab;
352     ds->df0200 += factor*d2fdrbrb;
353     ds->df0110 += factor*d2fdrbga;
354     ds->df0101 += factor*d2fdrbgb;
355     ds->df01001 += factor*d2fdrbab;
356     ds->df0020 += factor*d2fdgaga;
357     ds->df0011 += factor*d2fdgagb;
358     ds->df00101+= factor*d2fdgaab;
359     ds->df0002 += factor*d2fdgbgb;
360     ds->df00011+= factor*d2fdgbab;
361     ds->df00002+= factor*d2fdabab;
362     ds->df3000 += factor*d3fdrarara;
363     ds->df2100 += factor*d3fdrararb;
364     ds->df2010 += factor*d3fdraraga;
365     ds->df2001 += factor*d3fdraragb;
366     ds->df20001 += factor*d3fdraraab;
367     ds->df1200 += factor*d3fdrarbrb;
368     ds->df1110 += factor*d3fdrarbga;
369     ds->df1101 += factor*d3fdrarbgb;
370     ds->df11001 += factor*d3fdrarbab;
371     ds->df1020 += factor*d3fdragaga;
372     ds->df1011 += factor*d3fdragagb;
373     ds->df10101+= factor*d3fdragaab;
374     ds->df1002 += factor*d3fdragbgb;
375     ds->df10011+= factor*d3fdragbab;
376     ds->df10002+= factor*d3fdraabab;
377     ds->df0300 += factor*d3fdrbrbrb;
378     ds->df0210 += factor*d3fdrbrbga;
379     ds->df0201 += factor*d3fdrbrbgb;
380     ds->df02001 += factor*d3fdrbrbab;
381     ds->df0120 += factor*d3fdrbgaga;
382     ds->df0111 += factor*d3fdrbgagb;
383     ds->df01101+= factor*d3fdrbgaab;
384     ds->df0102 += factor*d3fdrbgbgb;
385     ds->df01011+= factor*d3fdrbgbab;
386     ds->df01002+= factor*d3fdrbgbab;
387     ds->df0030 += factor*d3fdgagaga;
388     ds->df0021 += factor*d3fdgagagb;
389     ds->df00201+= factor*d3fdgagaab;
390     ds->df0012 += factor*d3fdgagbgb;
391     ds->df00111+= factor*d3fdgagbab;
392     ds->df00102+= factor*d3fdgaabab;
393     ds->df0003 += factor*d3fdgbgbgb;
394     ds->df00021+= factor*d3fdgbgbab;
395     ds->df00012+= factor*d3fdgbabab;
396     ds->df00003+= factor*d3fdababab;
397 }
398 
399 static void
becke86_fourth(FunFourthFuncDrv * ds,real factor,const FunDensProp * dp)400 becke86_fourth(FunFourthFuncDrv *ds, real factor, const FunDensProp* dp)
401 {
402     real t[71];
403     real dfdra, dfdrb, dfdga, dfdgb, dfdab;
404     real d2fdrara , d2fdrarb , d2fdraga , d2fdragb ;
405     real d2fdraab , d2fdrbrb , d2fdrbga , d2fdrbgb ;
406     real d2fdrbab , d2fdgaga , d2fdgagb , d2fdgaab ;
407     real d2fdgbgb , d2fdgbab , d2fdabab ;
408     real d3fdrarara , d3fdrararb , d3fdraraga , d3fdraragb ;
409     real d3fdraraab , d3fdrarbrb , d3fdrarbga , d3fdrarbgb ;
410     real d3fdrarbab , d3fdragaga , d3fdragagb , d3fdragaab ;
411     real d3fdragbgb , d3fdragbab , d3fdraabab , d3fdrbrbrb ;
412     real d3fdrbrbga , d3fdrbrbgb , d3fdrbrbab , d3fdrbgaga ;
413     real d3fdrbgagb , d3fdrbgaab , d3fdrbgbgb , d3fdrbgbab ;
414     real d3fdrbabab , d3fdgagaga , d3fdgagagb , d3fdgagaab ;
415     real d3fdgagbgb , d3fdgagbab , d3fdgaabab , d3fdgbgbgb ;
416     real d3fdgbgbab , d3fdgbabab , d3fdababab ;
417     real d4fdrararara , d4fdrarararb , d4fdrararaga , d4fdrararagb ;
418     real d4fdrararaab , d4fdrararbrb , d4fdrararbga , d4fdrararbgb ;
419     real d4fdrararbab , d4fdraragaga , d4fdraragagb , d4fdraragaab ;
420     real d4fdraragbgb , d4fdraragbab , d4fdraraabab , d4fdrarbrbrb ;
421     real d4fdrarbrbga , d4fdrarbrbgb , d4fdrarbrbab , d4fdrarbgaga ;
422     real d4fdrarbgagb , d4fdrarbgaab , d4fdrarbgbgb , d4fdrarbgbab ;
423     real d4fdrarbabab , d4fdragagaga , d4fdragagagb , d4fdragagaab ;
424     real d4fdragagbgb , d4fdragagbab , d4fdragaabab , d4fdragbgbgb ;
425     real d4fdragbgbab , d4fdragbabab , d4fdraababab , d4fdrbrbrbrb ;
426     real d4fdrbrbrbga , d4fdrbrbrbgb , d4fdrbrbrbab , d4fdrbrbgaga ;
427     real d4fdrbrbgagb , d4fdrbrbgaab , d4fdrbrbgbgb , d4fdrbrbgbab ;
428     real d4fdrbrbabab , d4fdrbgagaga , d4fdrbgagagb , d4fdrbgagaab ;
429     real d4fdrbgagbgb , d4fdrbgagbab , d4fdrbgaabab , d4fdrbgbgbgb ;
430     real d4fdrbgbgbab , d4fdrbgbabab , d4fdrbababab , d4fdgagagaga ;
431     real d4fdgagagagb , d4fdgagagaab , d4fdgagagbgb , d4fdgagagbab ;
432     real d4fdgagaabab , d4fdgagbgbgb , d4fdgagbgbab , d4fdgagbabab ;
433     real d4fdgaababab , d4fdgbgbgbgb , d4fdgbgbgbab , d4fdgbgbabab ;
434     real d4fdgbababab , d4fdabababab ;
435     real rhoa = dp->rhoa;
436     real rhob = dp->rhob;
437     real grada = dp->grada;
438     real gradb = dp->gradb;
439     real gradab = dp->gradab;
440 
441     t[1] = pow(grada,2.0);
442     t[2] = 1/pow(rhoa,2.666666666666667);
443     t[3] = 0.004*t[1]*t[2]+1.0;
444     t[4] = 1/t[3];
445     t[5] = 1/pow(rhoa,2.333333333333333);
446     t[6] = 1/pow(t[3],2.0);
447     t[7] = 0.00787*t[1]*t[2]+1.0;
448     t[8] = pow(gradb,2.0);
449     t[9] = 1/pow(rhob,2.666666666666667);
450     t[10] = 0.004*t[8]*t[9]+1.0;
451     t[11] = 1/t[10];
452     t[12] = 1/pow(rhob,2.333333333333333);
453     t[13] = 1/pow(t[10],2.0);
454     t[14] = 0.00787*t[8]*t[9]+1.0;
455     t[15] = 1/pow(rhoa,1.333333333333333);
456     t[16] = 1/pow(rhob,1.333333333333333);
457     t[17] = pow(grada,4.0);
458     t[18] = 1/pow(rhoa,6.0);
459     t[19] = 1/pow(t[3],3.0);
460     t[20] = 1/pow(rhoa,3.333333333333333);
461     t[21] = pow(grada,3.0);
462     t[22] = 1/pow(rhoa,5.0);
463     t[23] = pow(gradb,4.0);
464     t[24] = 1/pow(rhob,6.0);
465     t[25] = 1/pow(t[10],3.0);
466     t[26] = 1/pow(rhob,3.333333333333333);
467     t[27] = pow(gradb,3.0);
468     t[28] = 1/pow(rhob,5.0);
469     t[29] = 1/pow(rhoa,4.0);
470     t[30] = 1/pow(rhob,4.0);
471     t[31] = pow(grada,6.0);
472     t[32] = 1/pow(rhoa,9.666666666666666);
473     t[33] = 1/pow(t[3],4.0);
474     t[34] = 1/pow(rhoa,7.0);
475     t[35] = 1/pow(rhoa,4.333333333333333);
476     t[36] = pow(grada,5.0);
477     t[37] = 1/pow(rhoa,8.666666666666666);
478     t[38] = 1/pow(rhoa,7.666666666666667);
479     t[39] = pow(gradb,6.0);
480     t[40] = 1/pow(rhob,9.666666666666666);
481     t[41] = 1/pow(t[10],4.0);
482     t[42] = 1/pow(rhob,7.0);
483     t[43] = 1/pow(rhob,4.333333333333333);
484     t[44] = pow(gradb,5.0);
485     t[45] = 1/pow(rhob,8.666666666666666);
486     t[46] = 1/pow(rhob,7.666666666666667);
487     t[47] = 1/pow(rhoa,6.666666666666667);
488     t[48] = 1/pow(rhob,6.666666666666667);
489     t[49] = pow(grada,8.0);
490     t[50] = 1/pow(rhoa,13.33333333333333);
491     t[51] = 1/pow(t[3],5.0);
492     t[52] = 1/pow(rhoa,10.66666666666667);
493     t[53] = 1/pow(rhoa,8.0);
494     t[54] = 1/pow(rhoa,5.333333333333333);
495     t[55] = pow(grada,7.0);
496     t[56] = 1/pow(rhoa,12.33333333333333);
497     t[57] = 1/pow(rhoa,11.33333333333333);
498     t[58] = 1/pow(rhoa,10.33333333333333);
499     t[59] = pow(gradb,8.0);
500     t[60] = 1/pow(rhob,13.33333333333333);
501     t[61] = 1/pow(t[10],5.0);
502     t[62] = 1/pow(rhob,10.66666666666667);
503     t[63] = 1/pow(rhob,8.0);
504     t[64] = 1/pow(rhob,5.333333333333333);
505     t[65] = pow(gradb,7.0);
506     t[66] = 1/pow(rhob,12.33333333333333);
507     t[67] = 1/pow(rhob,11.33333333333333);
508     t[68] = 1/pow(rhob,10.33333333333333);
509     t[69] = 1/pow(rhoa,9.333333333333334);
510     t[70] = 1/pow(rhob,9.333333333333334);
511     dfdra = -1.2407009817988*t[4]*t[7]*pow(rhoa,.3333333333333333)-0.0099256078543904*t[1]*t[6]*t[7]*t[5]+.01952863345351311*t[1]*t[4]*t[5];
512     dfdrb = -1.2407009817988*t[11]*t[14]*pow(rhob,.3333333333333333)-0.0099256078543904*t[8]*t[13]*t[14]*t[12]+.01952863345351311*t[8]*t[11]*t[12];
513     dfdga = 0.0074442058907928*grada*t[6]*t[7]*t[15]-.01464647509013483*grada*t[4]*t[15];
514     dfdgb = 0.0074442058907928*gradb*t[13]*t[14]*t[16]-.01464647509013483*gradb*t[11]*t[16];
515     dfdab = 0.0;
516     d2fdrara = -.4135669939329333*t[4]*t[7]/pow(rhoa,.6666666666666666)+.009925607854390403*t[1]*t[6]*t[7]*t[20]-.01952863345351312*t[1]*t[4]*t[20]-2.1174630089366187E-4*t[17]*t[19]*t[7]*t[18]+4.166108470082797E-4*t[17]*t[6]*t[18];
517     d2fdrarb = 0.0;
518     d2fdraga = -0.0099256078543904*grada*t[6]*t[7]*t[5]+.01952863345351311*grada*t[4]*t[5]+1.588097256702464E-4*t[21]*t[19]*t[7]*t[22]-3.124581352562098E-4*t[21]*t[6]*t[22];
519     d2fdragb = 0.0;
520     d2fdraab = 0.0;
521     d2fdrbrb =-.4135669939329333*t[11]*t[14]/pow(rhob,.6666666666666666)+.009925607854390403*t[8]*t[13]*t[14]*t[26]-.01952863345351312*t[8]*t[11]*t[26]-2.1174630089366187E-4*t[23]*t[25]*t[14]*t[24]+4.166108470082797E-4*t[23]*t[13]*t[24];
522     d2fdrbga = 0.0;
523     d2fdrbgb = -0.0099256078543904*gradb*t[13]*t[14]*t[12]+.01952863345351311*gradb*t[11]*t[12]+1.588097256702464E-4*t[27]*t[25]*t[14]*t[28]-3.124581352562098E-4*t[27]*t[13]*t[28];
524     d2fdrbab = 0.0;
525     d2fdgaga = 0.0074442058907928*t[6]*t[7]*t[15]-.01464647509013483*t[4]*t[15]-1.1910729425268479E-4*t[1]*t[19]*t[7]*t[29]+2.3434360144215735E-4*t[1]*t[6]*t[29];
526     d2fdgagb = 0.0;
527     d2fdgaab = 0.0;
528     d2fdgbgb= 0.0074442058907928*t[13]*t[14]*t[16]-.01464647509013483*t[11]*t[16]-1.1910729425268479E-4*t[8]*t[25]*t[14]*t[30]+2.3434360144215735E-4*t[8]*t[13]*t[30];
529     d2fdgbab = 0.0;
530     d2fdabab =0.0;
531     d3fdrarara = .2757113292886222*t[4]*t[7]/pow(rhoa,1.666666666666667)-.03749674078325263*t[1]*t[6]*t[7]*t[35]+.07377483749104954*t[1]*t[4]*t[35]+.001482224106255633*t[17]*t[19]*t[7]*t[34]-.002916275929057958*t[17]*t[6]*t[34]-6.77588162859718E-6*t[31]*t[33]*t[7]*t[32]+1.333154710426495E-5*t[31]*t[19]*t[32];
532     d3fdrararb = 0.0;
533     d3fdraraga = .02315975166024427*grada*t[6]*t[7]*t[20]-0.0455668113915306*grada*t[4]*t[20]-.001005794929244894*t[21]*t[19]*t[7]*t[18]+.001978901523289329*t[21]*t[6]*t[18]+5.081911221447886E-6*t[36]*t[33]*t[7]*t[37]-9.998660328198714E-6*t[36]*t[19]*t[37];
534     d3fdraragb = 0.0;
535     d3fdraraab = 0.0;
536     d3fdrarbrb = 0.0;
537     d3fdrarbga = 0.0;
538     d3fdrarbgb = 0.0;
539     d3fdrarbab = 0.0;
540     d3fdragaga = -0.0099256078543904*t[6]*t[7]*t[5]+.01952863345351311*t[4]*t[5]+6.352389026809856E-4*t[1]*t[19]*t[7]*t[22]-.001249832541024839*t[1]*t[6]*t[22]-3.8114334160859137E-6*t[17]*t[33]*t[7]*t[38]+7.498995246149036E-6*t[17]*t[19]*t[38];
541     d3fdragagb = 0.0;
542     d3fdragaab = 0.0;
543     d3fdragbgb = 0.0;
544     d3fdragbab = 0.0;
545     d3fdraabab = 0.0;
546     d3fdrbrbrb = .2757113292886222*t[11]*t[14]/pow(rhob,1.666666666666667)-.03749674078325263*t[8]*t[13]*t[14]*t[43]+.07377483749104954*t[8]*t[11]*t[43]+.001482224106255633*t[23]*t[25]*t[14]*t[42]-.002916275929057958*t[23]*t[13]*t[42]+1.333154710426495E-5*t[39]*t[25]*t[40]-6.77588162859718E-6*t[39]*t[41]*t[14]*t[40];
547     d3fdrbrbga = 0.0;
548     d3fdrbrbgb = .02315975166024427*gradb*t[13]*t[14]*t[26]-0.0455668113915306*gradb*t[11]*t[26]-.001005794929244894*t[27]*t[25]*t[14]*t[24]+.001978901523289329*t[27]*t[13]*t[24]+5.081911221447886E-6*t[44]*t[41]*t[14]*t[45]-9.998660328198714E-6*t[44]*t[25]*t[45];
549     d3fdrbrbab =0.0;
550     d3fdrbgaga = 0.0;
551     d3fdrbgagb = 0.0;
552     d3fdrbgaab = 0.0;
553     d3fdrbgbgb = -0.0099256078543904*t[13]*t[14]*t[12]+.01952863345351311*t[11]*t[12]+6.352389026809856E-4*t[8]*t[25]*t[14]*t[28]-.001249832541024839*t[8]*t[13]*t[28]-3.8114334160859137E-6*t[23]*t[41]*t[14]*t[46]+7.498995246149036E-6*t[23]*t[25]*t[46];
554     d3fdrbgbab = 0.0;
555     d3fdrbabab = 0.0;
556     d3fdgagaga =-3.573218827580544E-4*grada*t[19]*t[7]*t[29]+7.030308043264719E-4*grada*t[6]*t[29]+2.858575062064435E-6*t[21]*t[33]*t[7]*t[47]-5.624246434611776E-6*t[21]*t[19]*t[47];
557     d3fdgagagb = 0.0;
558     d3fdgagaab = 0.0;
559     d3fdgagbgb = 0.0;
560     d3fdgagbab = 0.0;
561     d3fdgaabab = 0.0;
562     d3fdgbgbgb = -3.573218827580544E-4*gradb*t[25]*t[14]*t[30]+7.030308043264719E-4*gradb*t[13]*t[30]+2.858575062064435E-6*t[27]*t[41]*t[14]*t[48]-5.624246434611776E-6*t[27]*t[25]*t[48];
563     d3fdgbgbab = 0.0;
564     d3fdgbabab = 0.0;
565     d3fdababab = 0.0;
566     d4fdrararara = -.4595188821477036*t[4]*t[7]*t[2]+.1654267975731734*t[1]*t[6]*t[7]*t[54]-.3254772242252185*t[1]*t[4]*t[54]-.01117549921383215*t[17]*t[19]*t[7]*t[53]+.02198779470321477*t[17]*t[6]*t[53]+1.1293136047661967E-4*t[31]*t[33]*t[7]*t[52]-2.2219245173774915E-4*t[31]*t[19]*t[52]-2.891042828201464E-7*t[49]*t[51]*t[7]*t[50]+5.68812676448638E-7*t[49]*t[33]*t[50];
567     d4fdrarararb = 0.0;
568     d4fdrararaga = -.07719917220081424*grada*t[6]*t[7]*t[35]+0.151889371305102*grada*t[4]*t[35]+.006528844277554575*t[21]*t[19]*t[7]*t[34]-.01284550111608863*t[21]*t[6]*t[34]-7.622866832171827E-5*t[36]*t[33]*t[7]*t[32]+1.499799049229807E-4*t[36]*t[19]*t[32]+2.1682821211510975E-7*t[55]*t[51]*t[7]*t[56]-4.2660950733647846E-7*t[55]*t[33]*t[56];
569     d4fdrararagb = 0.0;
570     d4fdrararaab = 0.0;
571     d4fdrararbrb = 0.0;
572     d4fdrararbga = 0.0;
573     d4fdrararbgb = 0.0;
574     d4fdrararbab = 0.0;
575     d4fdraragaga = .02315975166024427*t[6]*t[7]*t[20]-0.0455668113915306*t[4]*t[20]-0.00338794081429859*t[1]*t[19]*t[7]*t[18]+.006665773552132477*t[1]*t[6]*t[18]+4.954863440911688E-5*t[17]*t[33]*t[7]*t[37]-9.748693819993747E-5*t[17]*t[19]*t[37]-1.6262115908633232E-7*t[31]*t[51]*t[7]*t[57]+3.1995713050235886E-7*t[31]*t[33]*t[57];
576     d4fdraragagb = 0.0;
577     d4fdraragaab = 0.0;
578     d4fdraragbgb = 0.0;
579     d4fdraragbab = 0.0;
580     d4fdraraabab = 0.0;
581     d4fdrarbrbrb = 0.0;
582     d4fdrarbrbga = 0.0;
583     d4fdrarbrbgb = 0.0;
584     d4fdrarbrbab = 0.0;
585     d4fdrarbgaga = 0.0;
586     d4fdrarbgagb= 0.0;
587     d4fdrarbgaab = 0.0;
588     d4fdrarbgbgb = 0.0;
589     d4fdrarbgbab = 0.0;
590     d4fdrarbabab =0.0;
591     d4fdragagaga = .001429287531032218*grada*t[19]*t[7]*t[22]-.002812123217305888*grada*t[6]*t[22]-3.049146732868731E-5*t[21]*t[33]*t[7]*t[38]+5.99919619691923E-5*t[21]*t[19]*t[38]+1.2196586931474923E-7*t[36]*t[51]*t[7]*t[58]-2.399678478767691E-7*t[36]*t[33]*t[58];
592     d4fdragagagb = 0.0;
593     d4fdragagaab = 0.0;
594     d4fdragagbgb = 0.0;
595     d4fdragagbab = 0.0;
596     d4fdragaabab = 0.0;
597     d4fdragbgbgb = 0.0;
598     d4fdragbgbab = 0.0;
599     d4fdragbabab = 0.0;
600     d4fdraababab = 0.0;
601     d4fdrbrbrbrb = -.4595188821477036*t[11]*t[14]*t[9]+.1654267975731734*t[8]*t[13]*t[14]*t[64]-.3254772242252185*t[8]*t[11]*t[64]-.01117549921383215*t[23]*t[25]*t[14]*t[63]+.02198779470321477*t[23]*t[13]*t[63]+1.1293136047661967E-4*t[39]*t[41]*t[14]*t[62]-2.2219245173774915E-4*t[39]*t[25]*t[62]-2.891042828201464E-7*t[59]*t[61]*t[14]*t[60]+5.68812676448638E-7*t[59]*t[41]*t[60];
602     d4fdrbrbrbga = 0.0;
603     d4fdrbrbrbgb = -.07719917220081424*gradb*t[13]*t[14]*t[43]+0.151889371305102*gradb*t[11]*t[43]+.006528844277554575*t[27]*t[25]*t[14]*t[42]-.01284550111608863*t[27]*t[13]*t[42]-7.622866832171827E-5*t[44]*t[41]*t[14]*t[40]+1.499799049229807E-4*t[44]*t[25]*t[40]+2.1682821211510975E-7*t[65]*t[61]*t[14]*t[66]-4.2660950733647846E-7*t[65]*t[41]*t[66];
604     d4fdrbrbrbab = 0.0;
605     d4fdrbrbgaga = 0.0;
606     d4fdrbrbgagb = 0.0;
607     d4fdrbrbgaab = 0.0;
608     d4fdrbrbgbgb = .02315975166024427*t[13]*t[14]*t[26]-0.0455668113915306*t[11]*t[26]-0.00338794081429859*t[8]*t[25]*t[14]*t[24]+.006665773552132477*t[8]*t[13]*t[24]+4.954863440911688E-5*t[23]*t[41]*t[14]*t[45]-9.748693819993747E-5*t[23]*t[25]*t[45]-1.6262115908633232E-7*t[39]*t[61]*t[14]*t[67]+3.1995713050235886E-7*t[39]*t[41]*t[67];
609     d4fdrbrbgbab = 0.0;
610     d4fdrbrbabab = 0.0;
611     d4fdrbgagaga = 0.0;
612     d4fdrbgagagb = 0.0;
613     d4fdrbgagaab = 0.0;
614     d4fdrbgagbgb = 0.0;
615     d4fdrbgagbab = 0.0;
616     d4fdrbgaabab = 0.0;
617     d4fdrbgbgbgb = .001429287531032218*gradb*t[25]*t[14]*t[28]-.002812123217305888*gradb*t[13]*t[28]-3.049146732868731E-5*t[27]*t[41]*t[14]*t[46]+5.99919619691923E-5*t[27]*t[25]*t[46]+1.2196586931474923E-7*t[44]*t[61]*t[14]*t[68]-2.399678478767691E-7*t[44]*t[41]*t[68];
618     d4fdrbgbgbab = 0.0;
619     d4fdrbgbabab = 0.0;
620     d4fdrbababab = 0.0;
621     d4fdgagagaga = -3.573218827580544E-4*t[19]*t[7]*t[29]+7.030308043264719E-4*t[6]*t[29]+1.715145037238661E-5*t[1]*t[33]*t[7]*t[47]-3.3745478607670654E-5*t[1]*t[19]*t[47]-9.147440198606192E-8*t[17]*t[51]*t[7]*t[69]+1.7997588590757682E-7*t[17]*t[33]*t[69];
622     d4fdgagagagb = 0.0;
623     d4fdgagagaab = 0.0;
624     d4fdgagagbgb = 0.0;
625     d4fdgagagbab = 0.0;
626     d4fdgagaabab = 0.0;
627     d4fdgagbgbgb = 0.0;
628     d4fdgagbgbab = 0.0;
629     d4fdgagbabab = 0.0;
630     d4fdgaababab = 0.0;
631     d4fdgbgbgbgb = -3.573218827580544E-4*t[25]*t[14]*t[30]+7.030308043264719E-4*t[13]*t[30]+1.715145037238661E-5*t[8]*t[41]*t[14]*t[48]-3.3745478607670654E-5*t[8]*t[25]*t[48]-9.147440198606192E-8*t[23]*t[61]*t[14]*t[70]+1.7997588590757682E-7*t[23]*t[41]*t[70];
632     d4fdgbgbgbab = 0.0;
633     d4fdgbgbabab = 0.0;
634     d4fdgbababab = 0.0;
635     d4fdabababab = 0.0;
636     ds->df1000 += factor*dfdra;
637     ds->df0100 += factor*dfdrb;
638     ds->df0010 += factor*dfdga;
639     ds->df0001 += factor*dfdgb;
640     ds->df00001 += factor*dfdab;
641     ds->df2000 += factor*d2fdrara;
642     ds->df1100 += factor*d2fdrarb;
643     ds->df1010 += factor*d2fdraga;
644     ds->df1001 += factor*d2fdragb;
645     ds->df10001 += factor*d2fdraab;
646     ds->df0200 += factor*d2fdrbrb;
647     ds->df0110 += factor*d2fdrbga;
648     ds->df0101 += factor*d2fdrbgb;
649     ds->df01001 += factor*d2fdrbab;
650     ds->df0020 += factor*d2fdgaga;
651     ds->df0011 += factor*d2fdgagb;
652     ds->df00101 += factor*d2fdgaab;
653     ds->df0002 += factor*d2fdgbgb;
654     ds->df00011 += factor*d2fdgbab;
655     ds->df00002 += factor*d2fdabab;
656     ds->df3000 += factor*d3fdrarara;
657     ds->df2100 += factor*d3fdrararb;
658     ds->df2010 += factor*d3fdraraga;
659     ds->df2001 += factor*d3fdraragb;
660     ds->df20001 += factor*d3fdraraab;
661     ds->df1200 += factor*d3fdrarbrb;
662     ds->df1110 += factor*d3fdrarbga;
663     ds->df1101 += factor*d3fdrarbgb;
664     ds->df11001 += factor*d3fdrarbab;
665     ds->df1020 += factor*d3fdragaga;
666     ds->df1011 += factor*d3fdragagb;
667     ds->df10101 += factor*d3fdragaab;
668     ds->df1002 += factor*d3fdragbgb;
669     ds->df10011 += factor*d3fdragbab;
670     ds->df10002 += factor*d3fdraabab;
671     ds->df0300 += factor*d3fdrbrbrb;
672     ds->df0210 += factor*d3fdrbrbga;
673     ds->df0201 += factor*d3fdrbrbgb;
674     ds->df02001 += factor*d3fdrbrbab;
675     ds->df0120 += factor*d3fdrbgaga;
676     ds->df0111 += factor*d3fdrbgagb;
677     ds->df01101 += factor*d3fdrbgaab;
678     ds->df0102 += factor*d3fdrbgbgb;
679     ds->df01011 += factor*d3fdrbgbab;
680     ds->df01002 += factor*d3fdrbabab;
681     ds->df0030 += factor*d3fdgagaga;
682     ds->df0021 += factor*d3fdgagagb;
683     ds->df00201 += factor*d3fdgagaab;
684     ds->df0012 += factor*d3fdgagbgb;
685     ds->df00111 += factor*d3fdgagbab;
686     ds->df00102 += factor*d3fdgaabab;
687     ds->df0003 += factor*d3fdgbgbgb;
688     ds->df00021 += factor*d3fdgbgbab;
689     ds->df00012 += factor*d3fdgbabab;
690     ds->df00003 += factor*d3fdababab;
691     ds->df4000 += factor*d4fdrararara;
692     ds->df3100 += factor*d4fdrarararb;
693     ds->df3010 += factor*d4fdrararaga;
694     ds->df3001 += factor*d4fdrararagb;
695     ds->df30001 += factor*d4fdrararaab;
696     ds->df2200 += factor*d4fdrararbrb;
697     ds->df2110 += factor*d4fdrararbga;
698     ds->df2101 += factor*d4fdrararbgb;
699     ds->df21001 += factor*d4fdrararbab;
700     ds->df2020 += factor*d4fdraragaga;
701     ds->df2011 += factor*d4fdraragagb;
702     ds->df20101 += factor*d4fdraragaab;
703     ds->df2002 += factor*d4fdraragbgb;
704     ds->df20011 += factor*d4fdraragbab;
705     ds->df20002 += factor*d4fdraraabab;
706     ds->df1300 += factor*d4fdrarbrbrb;
707     ds->df1210 += factor*d4fdrarbrbga;
708     ds->df1201 += factor*d4fdrarbrbgb;
709     ds->df12001 += factor*d4fdrarbrbab;
710     ds->df1120 += factor*d4fdrarbgaga;
711     ds->df1111 += factor*d4fdrarbgagb;
712     ds->df11101 += factor*d4fdrarbgaab;
713     ds->df1102 += factor*d4fdrarbgbgb;
714     ds->df11011 += factor*d4fdrarbgbab;
715     ds->df11002 += factor*d4fdrarbabab;
716     ds->df1030 += factor*d4fdragagaga;
717     ds->df1021 += factor*d4fdragagagb;
718     ds->df10201 += factor*d4fdragagaab;
719     ds->df1012 += factor*d4fdragagbgb;
720     ds->df10111 += factor*d4fdragagbab;
721     ds->df10102 += factor*d4fdragaabab;
722     ds->df1003 += factor*d4fdragbgbgb;
723     ds->df10021 += factor*d4fdragbgbab;
724     ds->df10012 += factor*d4fdragbabab;
725     ds->df10003 += factor*d4fdraababab;
726     ds->df0400 += factor*d4fdrbrbrbrb;
727     ds->df0310 += factor*d4fdrbrbrbga;
728     ds->df0301 += factor*d4fdrbrbrbgb;
729     ds->df03001 += factor*d4fdrbrbrbab;
730     ds->df0220 += factor*d4fdrbrbgaga;
731     ds->df0211 += factor*d4fdrbrbgagb;
732     ds->df02101 += factor*d4fdrbrbgaab;
733     ds->df0202 += factor*d4fdrbrbgbgb;
734     ds->df02011 += factor*d4fdrbrbgbab;
735     ds->df02002 += factor*d4fdrbrbabab;
736     ds->df0130 += factor*d4fdrbgagaga;
737     ds->df0121 += factor*d4fdrbgagagb;
738     ds->df01201 += factor*d4fdrbgagaab;
739     ds->df0112 += factor*d4fdrbgagbgb;
740     ds->df01111 += factor*d4fdrbgagbab;
741     ds->df01102 += factor*d4fdrbgaabab;
742     ds->df0103 += factor*d4fdrbgbgbgb;
743     ds->df01021 += factor*d4fdrbgbgbab;
744     ds->df01012 += factor*d4fdrbgbabab;
745     ds->df01003 += factor*d4fdrbababab;
746     ds->df0040 += factor*d4fdgagagaga;
747     ds->df0031 += factor*d4fdgagagagb;
748     ds->df00301 += factor*d4fdgagagaab;
749     ds->df0022 += factor*d4fdgagagbgb;
750     ds->df00211 += factor*d4fdgagagbab;
751     ds->df00202 += factor*d4fdgagaabab;
752     ds->df0013 += factor*d4fdgagbgbgb;
753     ds->df00121 += factor*d4fdgagbgbab;
754     ds->df00112 += factor*d4fdgagbabab;
755     ds->df00103 += factor*d4fdgaababab;
756     ds->df0004 += factor*d4fdgbgbgbgb;
757     ds->df00031 += factor*d4fdgbgbgbab;
758     ds->df00022 += factor*d4fdgbgbabab;
759     ds->df00013 += factor*d4fdgbababab;
760     ds->df00004 += factor*d4fdabababab;
761 }
762