質問編集履歴

2

コードの修正

2019/01/09 19:26

投稿

takashi.f
takashi.f

スコア45

test CHANGED
File without changes
test CHANGED
@@ -36,6 +36,28 @@
36
36
 
37
37
 
38
38
 
39
+ using namespace std;
40
+
41
+ #include <iostream>
42
+
43
+ #include <math.h>
44
+
45
+ #include <stdio.h>
46
+
47
+ #include <stdlib.h>
48
+
49
+ #include <string.h>
50
+
51
+ #include <cmath>
52
+
53
+ #include <limits>
54
+
55
+
56
+
57
+
58
+
59
+
60
+
39
61
  void sf_F1_ijk(double vecRij[3],double vecRik[3], double Rij, double Rik, double cost, double lambda, double zeta,double *Fijk, double *dFijk_dRj[3], double *dFijk_dRk[3]) ;
40
62
 
41
63
 
@@ -66,11 +88,7 @@
66
88
 
67
89
  double dGi[3][3]={};
68
90
 
69
- //double Fijk,dFijk_dRj[3], Fijk_dRk[3],vecRij[3]={ } ,vecRik[3]={ } ,vecRjk[3]={ } ,Rij, Rik;
91
+ double Fijk,dFijk_dRj[3],dFijk_dRk[3], Fijk_dRk[3],vecRij[3]={ } ,vecRik[3]={ } ,vecRjk[3]={ } ,Rij, Rik;
70
-
71
- double vecRij[3],vecRik[3], Rij, Rik,cost,lambda, zeta,
72
-
73
- Fijk,dFijk_dRj[3], dFijk_dRk[3];
74
92
 
75
93
 
76
94
 
@@ -78,7 +96,11 @@
78
96
 
79
97
 
80
98
 
81
- //sf_F1_ijk( cost, lambd ;
99
+ double cost,lambda, zeta ;
100
+
101
+
102
+
103
+
82
104
 
83
105
 
84
106
 
@@ -90,12 +112,6 @@
90
112
 
91
113
 
92
114
 
93
-
94
-
95
-
96
-
97
-
98
-
99
115
  s=Fijk ;
100
116
 
101
117
 
@@ -112,278 +128,250 @@
112
128
 
113
129
 
114
130
 
115
- /*
131
+
116
-
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
117
- void sf_F1_ijk(double cost, double lambda, double zeta,double *Fijk
143
+ void sf_F1_ijk(double vecRij[3], double vecRik[3],double Rij, double Rik,double cost, double lambda,double zeta,
144
+
118
-
145
+ double *Fijk,double *dFijk_dRj[3],double *dFijk_dRk[3])
119
-
120
146
 
121
147
  {
122
148
 
123
-
124
-
125
- double arg ;
149
+ double arg, prefactor;
126
-
127
-
128
-
150
+
151
+
152
+
129
- arg = 0.5000000*(1.0000000 + lambda*cost) ;
153
+ arg = 0.50000000*(1.0000000 + lambda*cost) ;
154
+
130
-
155
+ prefactor = 0.50000000*zeta*lambda*pow(arg,(zeta-1.0000000));
156
+
131
- *Fijk =pow(arg,zeta) ;
157
+ *Fijk = pow(arg,zeta);
158
+
159
+
160
+
132
-
161
+ for (int i=0;i<3; i++){
162
+
163
+
164
+
165
+ *dFijk_dRj[i] = prefactor*( -cost*( vecRij[i]/Rij )+ vecRik[i]/Rij );
166
+
167
+ *dFijk_dRk[i] = prefactor*( -cost*( vecRik[i]/Rik ) + vecRik[i]/Rik );
168
+
169
+
170
+
133
- }
171
+ }
172
+
173
+
174
+
134
-
175
+ }
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+ void sf_F2_ij(double Rij, double Rc,double eta, double *Fij, double *dFij)
188
+
189
+ {
190
+
191
+
192
+
193
+
194
+
195
+ double fexp=0;
196
+
197
+ double fc=0,dfc=0;
198
+
199
+
200
+
201
+ sf_cut(Rij, Rc, &fc, &dfc) ;
202
+
203
+ fexp = exp(-eta*Rij*Rij);
204
+
135
- */
205
+ *Fij = fexp*fc;
206
+
136
-
207
+ *dFij = fexp*( dfc - 2.00000000*eta*Rij*fc ) ;
208
+
209
+
210
+
137
-
211
+ }
138
212
 
139
213
 
140
214
 
141
-
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
-
150
-
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
151
- void sf_F1_ijk(double vecRij[3], double vecRik[3],double Rij, double Rik,double cost, double lambda,double zeta,
225
+ void sf_G4_update(double nG4, double vecRij[3], double vecRik[3], double vecRjk[3], double Rij, double Rik, double Rjk,
152
-
226
+
153
- double *Fijk,double *dFijk_dRj[3],double *dFijk_dRk[3])
227
+ double cost, double n[100], double G[100], int iG, double dGi[3][100], double dGj[3][100], double dGk[3][100])
228
+
229
+
154
230
 
155
231
  {
156
232
 
157
- double arg, prefactor;
158
-
159
-
160
-
161
- arg = 0.50000000*(1.0000000 + lambda*cost) ;
162
-
163
- prefactor = 0.50000000*zeta*lambda*pow(arg,(zeta-1.0000000));
164
-
165
- *Fijk = pow(arg,zeta);
166
-
167
-
168
-
169
- for (int i=0;i<3; i++){
170
-
171
-
172
-
173
- *dFijk_dRj[i] = prefactor*( -cost*( vecRij[i]/Rij )+ vecRik[i]/Rij );
174
-
175
- *dFijk_dRk[i] = prefactor*( -cost*( vecRik[i]/Rik ) + vecRik[i]/Rik );
176
-
177
-
233
+
234
+
235
+
236
+
237
+ double G4=0;
238
+
239
+ double dG4[3]={};
240
+
241
+ //sf_G4
242
+
243
+ double lambda,zeta,eta;
244
+
245
+ //Rc
246
+
247
+ double Rc;
248
+
249
+ //sf_F1_ijk
250
+
251
+ double F1, F1k,dF1k[3],dF1j[3];
252
+
253
+ //sf_F2
254
+
255
+ double F2ij,dF2ij,F2ik ,dF2ik,F2jk,dF2jk ;
256
+
257
+
258
+
259
+
260
+
261
+ for( int iG4 = 0 ; iG4<nG4; iG4++){
262
+
263
+ iG = iG + 1;
264
+
265
+ Rc=1.00000000000000 ; //atode function
266
+
267
+
268
+
269
+ sf_G4(iG4,&lambda,&zeta,&eta);
270
+
271
+
272
+
273
+ sf_F1_ijk(vecRij[3], vecRik[3],Rij, Rik,cost,lambda,zeta,&F1,&dF1j[3],&dF1k[3]);
274
+
275
+ sf_F2_ij(Rij, Rc, eta, &F2ij, &dF2ij);
276
+
277
+ sf_F2_ij(Rik, Rc, eta, &F2ik, &dF2ik);
278
+
279
+ sf_F2_ij(Rjk, Rc, eta, &F2jk, &dF2jk);
280
+
281
+
282
+
283
+ G4 = F1*F2ij*F2ik*F2jk;
284
+
285
+
286
+
287
+ //factor of 2 for k<j in sf_fingerprint()
288
+
289
+
290
+
291
+ G[iG] = G[iG] + 2.000000000*G4 ;
292
+
293
+
294
+
295
+ dG4[3] = F2jk*( -(dF1j[3])+dF1k[3])*F2ij*F2ik
296
+
297
+ - vecRij[3]*F1*dF2ij*F2ik- vecRik[3]*F1*F2ij*dF2ik ;
298
+
299
+
300
+
301
+ dGi[3][iG]= dGi[3][iG] + 2.00000000*dG4[3] ;
302
+
303
+
304
+
305
+ dG4[3] = dF1j[3]*F2ij*F2ik*F2jk
306
+
307
+ + vecRij[3]*F1*dF2ij*F2ik*F2jk
308
+
309
+ - vecRjk[3]*F1*F2ij*F2ik*dF2jk ;
310
+
311
+
312
+
313
+ dGj[3][iG] = dGj[3][iG] + 2.000000000*dG4[3] ;
314
+
315
+ dG4[3] = dF1k[3]*F2ij*F2ik*F2jk
316
+
317
+ +vecRik[3]*F1*F2ij*dF2ik*F2jk+vecRjk[3]*F1*F2ij*F2ik*dF2jk ;
318
+
319
+
320
+
321
+ dGk[3][iG] = dGk[3][iG] + 2.000000000*dG4[3] ;
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+ G[iG] = G[iG] + 2.000000000*G4 ;
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+ }
342
+
343
+ }
344
+
345
+
346
+
347
+
348
+
349
+
350
+
351
+ void sf_cut(double Rij,double Rc, double *fc,double *dfc)
352
+
353
+ {
354
+
355
+
356
+
357
+ if (Rij >= Rc){
358
+
359
+ *fc = 0.000000000 ;
360
+
361
+ *dfc = 0.000000000;
362
+
363
+ }
364
+
365
+
366
+
367
+ else{
368
+
369
+ *fc = 0.5000000*(cos(M_PI*Rij/Rc) + 1.000000000);
370
+
371
+ *dfc = -0.5000000*M_PI/Rc*sin(M_PI*Rij/Rc) ;
178
372
 
179
373
  }
180
374
 
181
-
182
-
183
- }
184
-
185
-
186
-
187
-
188
-
189
-
190
-
191
-
192
-
193
-
194
-
195
- void sf_F2_ij(double Rij, double Rc,double eta, double *Fij, double *dFij)
196
-
197
- {
198
-
199
-
200
-
201
-
202
-
203
- double fexp=0;
204
-
205
- double fc=0,dfc=0;
206
-
207
-
208
-
209
- sf_cut(Rij, Rc, &fc, &dfc) ;
210
-
211
- fexp = exp(-eta*Rij*Rij);
212
-
213
- *Fij = fexp*fc;
214
-
215
- *dFij = fexp*( dfc - 2.00000000*eta*Rij*fc ) ;
216
-
217
-
218
-
219
- }
220
-
221
-
222
-
223
-
224
-
225
- C++
226
-
227
-
228
-
229
-
230
-
231
-
232
-
233
- void sf_G4_update(double nG4, double vecRij[3], double vecRik[3], double vecRjk[3], double Rij, double Rik, double Rjk,
234
-
235
- double cost, double n[100], double G[100], int iG, double dGi[3][100], double dGj[3][100], double dGk[3][100])
236
-
237
-
238
-
239
- {
240
-
241
-
242
-
243
-
244
-
245
- double G4=0;
246
-
247
- double dG4[3]={};
248
-
249
- //sf_G4
250
-
251
- double lambda,zeta,eta;
252
-
253
- //Rc
254
-
255
- double Rc;
256
-
257
- //sf_F1_ijk
258
-
259
- double F1, F1k,dF1k[3],dF1j[3];
260
-
261
- //sf_F2
262
-
263
- double F|列1|列2|列3|
264
-
265
- |:--|:--:|--:|
266
-
267
- ||||2ij,dF2ij,F2ik ,dF2ik,F2jk,dF2jk ;
268
-
269
-
270
-
271
-
272
-
273
- for( int iG4 = 0 ; iG4<nG4; iG4++){
274
-
275
- iG = iG + 1;
276
-
277
- Rc=1.00000000000000 ; //atode function
278
-
279
-
280
-
281
- sf_G4(iG4,&lambda,&zeta,&eta);
282
-
283
-
284
-
285
- sf_F1_ijk(vecRij[3], vecRik[3],Rij, Rik,cost,lambda,zeta,&F1,&dF1j[3],&dF1k[3]);
286
-
287
- sf_F2_ij(Rij, Rc, eta, &F2ij, &dF2ij);
288
-
289
- sf_F2_ij(Rik, Rc, eta, &F2ik, &dF2ik);
290
-
291
- sf_F2_ij(Rjk, Rc, eta, &F2jk, &dF2jk);
292
-
293
-
294
-
295
- G4 = F1*F2ij*F2ik*F2jk;
296
-
297
-
298
-
299
- //factor of 2 for k<j in sf_fingerprint()
300
-
301
-
302
-
303
- G[iG] = G[iG] + 2.000000000*G4 ;
304
-
305
-
306
-
307
- dG4[3] = F2jk*( -(dF1j[3])+dF1k[3])*F2ij*F2ik
308
-
309
- - vecRij[3]*F1*dF2ij*F2ik- vecRik[3]*F1*F2ij*dF2ik ;
310
-
311
-
312
-
313
- dGi[3][iG]= dGi[3][iG] + 2.00000000*dG4[3] ;
314
-
315
-
316
-
317
- dG4[3] = dF1j[3]*F2ij*F2ik*F2jk
318
-
319
- + vecRij[3]*F1*dF2ij*F2ik*F2jk
320
-
321
- - vecRjk[3]*F1*F2ij*F2ik*dF2jk ;
322
-
323
-
324
-
325
- dGj[3][iG] = dGj[3][iG] + 2.000000000*dG4[3] ;
326
-
327
- dG4[3] = dF1k[3]*F2ij*F2ik*F2jk
328
-
329
- +vecRik[3]*F1*F2ij*dF2ik*F2jk+vecRjk[3]*F1*F2ij*F2ik*dF2jk ;
330
-
331
-
332
-
333
- dGk[3][iG] = dGk[3][iG] + 2.000000000*dG4[3] ;
334
-
335
-
336
-
337
-
338
-
339
-
340
-
341
- G[iG] = G[iG] + 2.000000000*G4 ;
342
-
343
-
344
-
345
-
346
-
347
-
348
-
349
-
350
-
351
-
352
-
353
- }
354
-
355
- }
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
- void sf_cut(double Rij,double Rc, double *fc,double *dfc)
364
-
365
- {
366
-
367
-
368
-
369
- if (Rij >= Rc){
370
-
371
- *fc = 0.000000000 ;
372
-
373
- *dfc = 0.000000000;
374
-
375
- }
376
-
377
-
378
-
379
- else{
380
-
381
- *fc = 0.5000000*(cos(M_PI*Rij/Rc) + 1.000000000);
382
-
383
- *dfc = -0.5000000*M_PI/Rc*sin(M_PI*Rij/Rc) ;
384
-
385
- }
386
-
387
375
  }
388
376
 
389
377
 
@@ -432,4 +420,8 @@
432
420
 
433
421
 
434
422
 
423
+
424
+
425
+
426
+
435
427
  ```

1

コードとしてページに表示されるようにした

2019/01/09 19:26

投稿

takashi.f
takashi.f

スコア45

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  言語はC++,コンパイラはgcc,osはwslを使用しています.
2
2
 
3
- 下記のエラーが出てきてしまいます.どなたか原因をご教授お願い致します。
3
+ 下記のエラーが出てきてコンパイルが通らず困っています.どなたか原因をご教授お願い致します。
4
4
 
5
5
 
6
6
 
@@ -30,24 +30,12 @@
30
30
 
31
31
 
32
32
 
33
- ```ここに言語を入力
33
+
34
-
35
- コード
36
34
 
37
35
  ```
38
36
 
39
37
 
40
38
 
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
- //void sf_F1_ijk(double cost, double lambda, double zeta,double *Fijk) ;
50
-
51
39
  void sf_F1_ijk(double vecRij[3],double vecRik[3], double Rij, double Rik, double cost, double lambda, double zeta,double *Fijk, double *dFijk_dRj[3], double *dFijk_dRk[3]) ;
52
40
 
53
41
 
@@ -441,3 +429,7 @@
441
429
 
442
430
 
443
431
  }
432
+
433
+
434
+
435
+ ```