言語はC++,コンパイラはgcc,osはwslを使用しています.
下記のエラーが出てきてコンパイルが通らず困っています.どなたか原因をご教授お願い致します。
error: cannot convert ‘double’ to ‘double*’ for argument ‘1’ to ‘void sf_F1_ijk(double*, double*, double, double, double, double, double, double*, double**, double**)’
sf_F1_ijk(vecRij[3], vecRik[3],Rij,Rik,cost,lambda,zeta,&F1,&dF1j[3],&dF1k[3]);
using namespace std; #include <iostream> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <cmath> #include <limits> 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]) ; void sf_cut(double Rij,double Rc, double *fc,double *dfc) ; void sf_G4_update(double nG4, double vecRij[3], double vecRik[3], double vecRjk[3], double Rij, double Rik, double Rjk, double cost, double n[100], double G[100], int iG, double dGi[3][100], double dGj[3][100], double dGk[3][100]) ; void sf_G4(int iG4,double *lambda,double *zeta,double *eta); int main(void) { double dGi[3][3]={}; double Fijk,dFijk_dRj[3],dFijk_dRk[3], Fijk_dRk[3],vecRij[3]={ } ,vecRik[3]={ } ,vecRjk[3]={ } ,Rij, Rik; double s; double cost,lambda, zeta ; sf_F1_ijk(vecRij[3],vecRik[3], Rij, Rik, cost, lambda, zeta,&Fijk,&dFijk_dRj[3],&dFijk_dRk[3]) ; s=Fijk ; cout<<s<<"\n" ; } 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]) { double arg, prefactor; arg = 0.50000000*(1.0000000 + lambda*cost) ; prefactor = 0.50000000*zeta*lambda*pow(arg,(zeta-1.0000000)); *Fijk = pow(arg,zeta); for (int i=0;i<3; i++){ *dFijk_dRj[i] = prefactor*( -cost*( vecRij[i]/Rij )+ vecRik[i]/Rij ); *dFijk_dRk[i] = prefactor*( -cost*( vecRik[i]/Rik ) + vecRik[i]/Rik ); } } void sf_F2_ij(double Rij, double Rc,double eta, double *Fij, double *dFij) { double fexp=0; double fc=0,dfc=0; sf_cut(Rij, Rc, &fc, &dfc) ; fexp = exp(-eta*Rij*Rij); *Fij = fexp*fc; *dFij = fexp*( dfc - 2.00000000*eta*Rij*fc ) ; } void sf_G4_update(double nG4, double vecRij[3], double vecRik[3], double vecRjk[3], double Rij, double Rik, double Rjk, double cost, double n[100], double G[100], int iG, double dGi[3][100], double dGj[3][100], double dGk[3][100]) { double G4=0; double dG4[3]={}; //sf_G4 double lambda,zeta,eta; //Rc double Rc; //sf_F1_ijk double F1, F1k,dF1k[3],dF1j[3]; //sf_F2 double F2ij,dF2ij,F2ik ,dF2ik,F2jk,dF2jk ; for( int iG4 = 0 ; iG4<nG4; iG4++){ iG = iG + 1; Rc=1.00000000000000 ; //atode function sf_G4(iG4,&lambda,&zeta,&eta); sf_F1_ijk(vecRij[3], vecRik[3],Rij, Rik,cost,lambda,zeta,&F1,&dF1j[3],&dF1k[3]); sf_F2_ij(Rij, Rc, eta, &F2ij, &dF2ij); sf_F2_ij(Rik, Rc, eta, &F2ik, &dF2ik); sf_F2_ij(Rjk, Rc, eta, &F2jk, &dF2jk); G4 = F1*F2ij*F2ik*F2jk; //factor of 2 for k<j in sf_fingerprint() G[iG] = G[iG] + 2.000000000*G4 ; dG4[3] = F2jk*( -(dF1j[3])+dF1k[3])*F2ij*F2ik - vecRij[3]*F1*dF2ij*F2ik- vecRik[3]*F1*F2ij*dF2ik ; dGi[3][iG]= dGi[3][iG] + 2.00000000*dG4[3] ; dG4[3] = dF1j[3]*F2ij*F2ik*F2jk + vecRij[3]*F1*dF2ij*F2ik*F2jk - vecRjk[3]*F1*F2ij*F2ik*dF2jk ; dGj[3][iG] = dGj[3][iG] + 2.000000000*dG4[3] ; dG4[3] = dF1k[3]*F2ij*F2ik*F2jk +vecRik[3]*F1*F2ij*dF2ik*F2jk+vecRjk[3]*F1*F2ij*F2ik*dF2jk ; dGk[3][iG] = dGk[3][iG] + 2.000000000*dG4[3] ; G[iG] = G[iG] + 2.000000000*G4 ; } } void sf_cut(double Rij,double Rc, double *fc,double *dfc) { if (Rij >= Rc){ *fc = 0.000000000 ; *dfc = 0.000000000; } else{ *fc = 0.5000000*(cos(M_PI*Rij/Rc) + 1.000000000); *dfc = -0.5000000*M_PI/Rc*sin(M_PI*Rij/Rc) ; } } void sf_G4(int iG4,double *lambda,double *zeta,double *eta) { //initialize double coef_lambda[1]={ }; double coef_zeta[1]={ }; double coef_eta[1]={ }; coef_lambda[1]=1; coef_zeta[1]=1; coef_eta[1]=1; *lambda=coef_lambda[1]; *zeta=coef_zeta[1]; *eta=coef_eta[1]; }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。