Droplet Lagrangian Transient One-dimensional Reacting Code Implementation of both liquid and gas phase governing equations.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. #include "UserData.h"
  2. #include "parse.h"
  3. void freeUserData(UserData data){
  4. if(data!=NULL){
  5. if(data->trmix!=NULL){
  6. delete data->trmix;
  7. printf("Transport Deleted!\n");
  8. }
  9. if(data->gas!=NULL){
  10. delete data->gas;
  11. printf("Gas Deleted!\n");
  12. }
  13. if(data->adaptiveGrid){
  14. if(data->grid->xOld!=NULL){
  15. delete[] data->grid->xOld;
  16. printf("old grid array Deleted!\n");
  17. }
  18. if(data->grid->x!=NULL){
  19. delete[] data->grid->x;
  20. printf("current grid array Deleted!\n");
  21. }
  22. if(data->grid!=NULL){
  23. free(data->grid);
  24. printf("grid object Freed!\n");
  25. }
  26. }
  27. else{
  28. if(data->uniformGrid!=NULL){
  29. delete[] data->uniformGrid;
  30. printf("uniformGrid deleted!\n");
  31. }
  32. }
  33. if(data->innerMassFractions!=NULL){
  34. delete[] data->innerMassFractions;
  35. printf("innerMassFractions array Deleted!\n");
  36. }
  37. if(data->output!=NULL){
  38. fclose(data->output);
  39. printf("Output File Cleared from Memory!\n");
  40. }
  41. if(data->gridOutput!=NULL){
  42. fclose(data->gridOutput);
  43. printf("Grid Output File Cleared from Memory!\n");
  44. }
  45. //if(data->ratesOutput!=NULL){
  46. // fclose(data->ratesOutput);
  47. // printf("Rates Output File Cleared from Memory!\n");
  48. //}
  49. if(data->globalOutput!=NULL){
  50. fclose(data->globalOutput);
  51. printf("Global Output File Cleared from Memory!\n");
  52. }
  53. if(data->timescaleOutput!=NULL){
  54. fclose(data->timescaleOutput);
  55. printf("Characteristic Timescale Output File Cleared from Memory!\n");
  56. }
  57. //if(data->rxnROPOutput!=NULL){
  58. // fclose(data->rxnROPOutput);
  59. // printf("Reactions Rate of Progress Output File Cleared from Memory!\n");
  60. //}
  61. //if(data->spROPOutput!=NULL){
  62. // fclose(data->spROPOutput);
  63. // printf("Species Rate of Production Output File Cleared from Memory!\n");
  64. //}
  65. }
  66. free(data); /* Free the user data */
  67. printf("\n\n");
  68. }
  69. UserData allocateUserData(FILE *input){
  70. UserData data;
  71. data = (UserData) malloc(sizeof *data);
  72. if(!data){
  73. printf("Allocation Failed!\n");
  74. return(NULL);
  75. }
  76. setSaneDefaults(data);
  77. int ier;
  78. ier=parseNumber<size_t>(input, "basePts" , MAXBUFLEN, &data->npts);
  79. if(ier==-1 || data->npts<=0){
  80. printf("Enter non-zero basePts!\n");
  81. return(NULL);
  82. }
  83. ier=parseNumber<double>(input, "domainLength", MAXBUFLEN, &data->domainLength);
  84. if(ier==-1 || data->domainLength<=0.0e0){
  85. printf("domainLength error!\n");
  86. return(NULL);
  87. }
  88. ier=parseNumber<double>(input, "Rd", MAXBUFLEN, &data->Rd);
  89. if(ier==-1 || data->Rd<=0.0e0){
  90. printf("Rd error!\n");
  91. return(NULL);
  92. }
  93. ier=parseNumber<int>(input, "constantPressure" , MAXBUFLEN, &data->constantPressure);
  94. if(ier==-1 || (data->constantPressure!=0 && data->constantPressure!=1)){
  95. printf("constantPressure error!\n");
  96. return(NULL);
  97. }
  98. ier=parseNumber<int>(input, "problemType" , MAXBUFLEN, &data->problemType);
  99. if(ier==-1 || (data->problemType!=0
  100. && data->problemType!=1
  101. && data->problemType!=2
  102. && data->problemType!=3)){
  103. printf("include valid problemType!\n");
  104. printf("0: premixed combustion with NO equilibrated ignition kernel\n");
  105. printf("1: premixed combustion WITH equilibrated ignition kernel\n");
  106. printf("2: arbitrary initial conditions\n");
  107. printf("3: Restart\n");
  108. return(NULL);
  109. }
  110. ier=parseNumber<int>(input,"dropType",MAXBUFLEN,&data->dropType);
  111. if(ier==-1 || (data->dropType!=0
  112. && data->dropType!=1)){
  113. printf("include valid dropletType!\n");
  114. printf("0: single component droplet\n");
  115. printf("1: multi-component droplet\n");
  116. return(NULL);
  117. }
  118. ier=parseDropSpec<double>(input,"dropletMole",MAXBUFLEN,&data->dropType,dropMole);
  119. if(ier== -1){
  120. printf("include correct format for droplet mole fraction!\n");
  121. printf("single composition droplet: dropletMole:1.00\n");
  122. printf("binary composition droplet: dropletMole:0.3,0.7\n");
  123. return(NULL);
  124. }
  125. ier=parseDropSpec<std::string>(input,"dropletComposition",MAXBUFLEN,&data->dropType,dropSpec);
  126. if(ier== -1){
  127. printf("include correct format for droplet composition!\n");
  128. printf("single composition droplet: dropletComposition:n-heptane\n");
  129. printf("binary composition droplet: dropletComposition:propane,n-heptane\n");
  130. return(NULL);
  131. }
  132. //ier=parseNumber<int>(input, "quasiSteady" , MAXBUFLEN, &data->quasiSteady);
  133. //if(ier==-1 || (data->quasiSteady!=0
  134. // && data->quasiSteady!=1)){
  135. // printf("include valid quasiSteady!\n");
  136. // printf("0: The droplet surface recedes and the droplet losses mass\n");
  137. // printf("1: The droplet surface does not move and the droplet mass is constant\n");
  138. // return(NULL);
  139. //}
  140. ier=parseNumber<double>(input, "dPdt", MAXBUFLEN, &data->dPdt);
  141. ier=parseNumber<double>(input, "Rg", MAXBUFLEN, &data->Rg);
  142. if(data->Rg < 0.0){
  143. printf("Rg must be greater than 0");
  144. return(NULL);
  145. }
  146. ier=parseNumber<int> (input, "reflectProblem" , MAXBUFLEN, &data->reflectProblem);
  147. if(data->reflectProblem!=0 && data->reflectProblem!=1){
  148. printf("Invalid entry for reflectProblem! Can be only 1 or 0.\n");
  149. return(NULL);
  150. }
  151. ier=parseNumber<double>(input, "mdot" , MAXBUFLEN, &data->mdot);
  152. ier=parseNumber<double>(input, "initialTemperature", MAXBUFLEN,
  153. &data->initialTemperature);
  154. if(ier==-1 || data->initialTemperature<=0.0e0){
  155. printf("Enter positive initialTemperature in K!\n");
  156. return(NULL);
  157. }
  158. ier=parseNumber<double>(input, "initialPressure", MAXBUFLEN,
  159. &data->initialPressure);
  160. if(ier==-1 || data->initialTemperature<=0.0e0){
  161. printf("Enter positive initialPressure in atm!\n");
  162. return(NULL);
  163. }
  164. ier=parseNumber<int> (input, "metric" , MAXBUFLEN, &data->metric);
  165. if(data->metric!=0 && data->metric!=1 && data->metric!=2){
  166. printf("Invalid entry for metric!\n");
  167. printf("0: Cartesian\n");
  168. printf("1: Cylindrical\n");
  169. printf("2: Spherical\n");
  170. return(NULL);
  171. }
  172. ier=parseNumber<double>(input, "QDot", MAXBUFLEN, &data->maxQDot);
  173. if(ier==-1 && data->problemType==0){
  174. printf("Need to specify QDot for problemType 0!\n");
  175. return(NULL);
  176. }
  177. ier=parseNumber<double>(input, "kernelSize", MAXBUFLEN, &data->kernelSize);
  178. if(ier==-1 && data->problemType==0){
  179. printf("Need to specify kernelSize for problemType 0!\n");
  180. return(NULL);
  181. }
  182. ier=parseNumber<double>(input, "ignTime", MAXBUFLEN, &data->ignTime);
  183. if(ier==-1 && data->problemType==0){
  184. printf("Need to specify ignTime for problemType 0!\n");
  185. return(NULL);
  186. }
  187. ier=parseNumber<double>(input, "mixingWidth", MAXBUFLEN,
  188. &data->mixingWidth);
  189. if(ier==-1){
  190. printf("Need to specify mixingWidth!\n");
  191. return(NULL);
  192. }
  193. ier=parseNumber<double>(input, "shift", MAXBUFLEN, &data->shift);
  194. ier=parseNumber<double>(input, "firstRadius", MAXBUFLEN, &data->firstRadius);
  195. ier=parseNumber<double>(input, "wallTemperature", MAXBUFLEN, &data->wallTemperature);
  196. ier=parseNumber<int> (input, "dirichletInner" , MAXBUFLEN,
  197. &data->dirichletInner);
  198. if(data->dirichletInner!=0 && data->dirichletInner!=1){
  199. printf("dirichletInner can either be 0 or 1!\n");
  200. return(NULL);
  201. }
  202. ier=parseNumber<int> (input, "dirichletOuter" , MAXBUFLEN,
  203. &data->dirichletOuter);
  204. if(data->dirichletOuter!=0 && data->dirichletOuter!=1){
  205. printf("dirichletOuter can either be 0 or 1!\n");
  206. return(NULL);
  207. }
  208. ier=parseNumber<int> (input, "adaptiveGrid" , MAXBUFLEN,
  209. &data->adaptiveGrid);
  210. if(ier==-1 || (data->adaptiveGrid!=0 && data->adaptiveGrid!=1)){
  211. printf("specify adaptiveGrid as 0 or 1!\n");
  212. return(NULL);
  213. }
  214. ier=parseNumber<int> (input, "moveGrid" , MAXBUFLEN,
  215. &data->moveGrid);
  216. if(ier==-1 || (data->moveGrid!=0 && data->moveGrid!=1)){
  217. printf("specify moveGrid as 0 or 1!\n");
  218. return(NULL);
  219. }
  220. ier=parseNumber<double> (input, "isotherm" , MAXBUFLEN,
  221. &data->isotherm);
  222. if(ier==-1){
  223. printf("specify temperature of isotherm!\n");
  224. return(NULL);
  225. }
  226. ier=parseNumber<double>(input, "gridOffset", MAXBUFLEN, &data->gridOffset);
  227. ier=parseNumber<int> (input, "nSaves" , MAXBUFLEN, &data->nSaves);
  228. if(data->nSaves<0 ){
  229. printf("nSaves must be greater than 0!\n");
  230. return(NULL);
  231. }
  232. ier=parseNumber<int> (input, "writeRates" , MAXBUFLEN,
  233. &data->writeRates);
  234. if(data->writeRates!=0 && data->writeRates!=1){
  235. printf("writeRates must either be 0 or 1!\n");
  236. return(NULL);
  237. }
  238. ier=parseNumber<int> (input, "writeEveryRegrid", MAXBUFLEN,
  239. &data->writeEveryRegrid);
  240. if(data->writeEveryRegrid!=0 && data->writeEveryRegrid!=1){
  241. printf("writeEveryRegrid must either be 0 or 1!\n");
  242. return(NULL);
  243. }
  244. ier=parseNumber<int> (input, "setConstraints" , MAXBUFLEN,
  245. &data->setConstraints);
  246. if(data->setConstraints!=0 && data->setConstraints!=1){
  247. printf("setConstraints must either be 0 or 1!\n");
  248. return(NULL);
  249. }
  250. ier=parseNumber<int> (input, "suppressAlg" , MAXBUFLEN,
  251. &data->suppressAlg);
  252. if(data->suppressAlg!=0 && data->suppressAlg!=1){
  253. printf("suppressAlg must either be 0 or 1!\n");
  254. return(NULL);
  255. }
  256. ier=parseNumber<int> (input, "dryRun" , MAXBUFLEN,
  257. &data->dryRun);
  258. if(data->dryRun!=0 && data->dryRun!=1){
  259. printf("dryRun must either be 0 or 1!\n");
  260. return(NULL);
  261. }
  262. ier=parseNumber<double> (input, "finalTime" , MAXBUFLEN,
  263. &data->finalTime);
  264. ier=parseNumber<double> (input, "relativeTolerance" , MAXBUFLEN,
  265. &data->relativeTolerance);
  266. ier=parseNumber<double> (input, "radiusTolerance" , MAXBUFLEN,
  267. &data->radiusTolerance);
  268. ier=parseNumber<double> (input, "temperatureTolerance", MAXBUFLEN,
  269. &data->temperatureTolerance);
  270. ier=parseNumber<double> (input, "pressureTolerance", MAXBUFLEN,
  271. &data->pressureTolerance);
  272. ier=parseNumber<double> (input, "massFractionTolerance", MAXBUFLEN,
  273. &data->massFractionTolerance);
  274. ier=parseNumber<double> (input, "bathGasTolerance", MAXBUFLEN,
  275. &data->bathGasTolerance);
  276. ier=parseNumber<double> (input, "MdotTolerance", MAXBUFLEN,
  277. &data->MdotTolerance);
  278. char chem[MAXBUFLEN],mix[MAXBUFLEN],tran[MAXBUFLEN];
  279. ier=parseNumber<char>(input, "chemistryFile" , MAXBUFLEN, chem);
  280. if(ier==-1){
  281. printf("Enter chemistryFile!\n");
  282. return(NULL);
  283. }else{
  284. try{
  285. data->gas = new Cantera::IdealGasMix(chem);
  286. data->nsp=data->gas->nSpecies(); //assign no: of species
  287. } catch (Cantera::CanteraError& err) {
  288. printf("Error:\n");
  289. printf("%s\n",err.what());
  290. return(NULL);
  291. }
  292. }
  293. ier=parseNumber<char>(input, "transportModel", MAXBUFLEN, tran);
  294. if(ier==-1){
  295. printf("Enter transportModel!\n");
  296. return(NULL);
  297. }else{
  298. try{
  299. data->trmix = Cantera::newTransportMgr(tran, data->gas);
  300. }catch (Cantera::CanteraError& err) {
  301. printf("Error:\n");
  302. printf("%s\n",err.what());
  303. return(NULL);
  304. }
  305. }
  306. ier=parseNumber<char>(input, "mixtureComposition", MAXBUFLEN, mix);
  307. if(ier==-1){
  308. printf("Enter mixtureComposition!\n");
  309. return(NULL);
  310. }else{
  311. if(data->gas!=NULL){
  312. try{
  313. data->gas->setState_TPX(data->initialTemperature,
  314. data->initialPressure*Cantera::OneAtm,
  315. mix);
  316. }catch (Cantera::CanteraError& err) {
  317. printf("Error:\n");
  318. printf("%s\n",err.what());
  319. return(NULL);
  320. }
  321. }
  322. }
  323. //ier=parseNumber<char>(input, "dropletComposition", MAXBUFLEN, data->dropSpec);
  324. //if(ier==-1){
  325. // printf("Enter composition of droplet!\n");
  326. // return(NULL);
  327. //}
  328. //ier=parseDrop(input,"dropletComposition",data->dropSpec,data->dropMole,MAXBUFLEN);
  329. //ier=parseDrop(input,"dropletDensity",data->dropSpec,data->dropDens,MAXBUFLEN);
  330. ier=parseNumber<int> (input, "nThreads", MAXBUFLEN, &data->nThreads);
  331. if(data->nThreads<0 ){
  332. printf("nThreads must be greater than 0!\n");
  333. return(NULL);
  334. }
  335. ier=parseNumber<double>(input, "PCAD", MAXBUFLEN, &data->PCAD);
  336. if(ier==-1){
  337. printf("Enter PCAD value!\n");
  338. return(NULL);
  339. }
  340. ier=parseNumber<double>(input,"RGTC", MAXBUFLEN, &data->RGTC);
  341. if(ier==-1){
  342. printf("Enter PGTC value!\n");
  343. return(NULL);
  344. }
  345. ier=parseNumber<int>(input,"JJRG", MAXBUFLEN, &data->JJRG);
  346. if(ier==-1){
  347. printf("Enter JJRG value!\n");
  348. return(NULL);
  349. }
  350. ier=parseNumber<double>(input,"deltaT", MAXBUFLEN, &data->deltaT);
  351. if(ier==-1){
  352. printf("Enter deltaT value!\n");
  353. return(NULL);
  354. }
  355. data->nr=0;
  356. //data->np=data->nr+1;
  357. data->nt=data->nr+1;
  358. data->ny=data->nt+1;
  359. data->np=data->ny+data->nsp;
  360. data->nm=data->np+1;
  361. data->nvar=data->nsp+4; //assign no: of variables (R,T,P,Mdot,nsp species)
  362. double MW[2];
  363. for(int i=0;i<=1;i++){
  364. int speciesIndex = data->gas->speciesIndex(data->dropSpec[i]);
  365. double weight = data->gas->molecularWeight(speciesIndex);
  366. MW[i]= weight;
  367. }
  368. // double massSum = 0.0;
  369. // for(int i=0;i<=1;i++){
  370. // massSum = massSum + data->dropMole[i] * MW[i];
  371. // }
  372. // data->dropRho = 0.0;
  373. // for(int i=0;i<=1;i++){
  374. // data->dropMassFrac[i] = data->dropMole[i]*MW[i]/massSum;
  375. // data->dropRho = data->dropRho + data->dropMassFrac[i]*data->dropDens[i];
  376. // }
  377. printf("Density of droplet is: %.3f [kg/m^3]\n",data->dropRho);
  378. //Mass of droplet
  379. //data->massDrop=1.0/3.0*pow(data->Rd,3)*997.0; //TODO: The density of the droplet should be a user input
  380. //data->massDrop=1.0/3.0*pow(data->Rd,3)*684.00; //TODO: The density of the droplet(n-heptane) should be a user input
  381. data->massDrop=1.0/3.0*pow(data->Rd,3)*data->dropRho;
  382. /* Update the gamma using UNIFAC method for propane and n-heptane */
  383. getGamma(data->dropMole,data->gamma) ;
  384. printf("Gamma of Propane and n-heptane are %.3f and %.3f .\n",data->gamma[0],data->gamma[1]) ;
  385. if(!data->adaptiveGrid){
  386. data->uniformGrid = new double [data->npts];
  387. data->neq=data->nvar*data->npts;
  388. }
  389. else{
  390. data->grid=(UserGrid) malloc(sizeof *data->grid);
  391. ier=getGridSettings(input,data->grid);
  392. if(ier==-1)return(NULL);
  393. ier=initializeGrid(data->grid);
  394. if(ier==-1)return(NULL);
  395. ier=reGrid(data->grid, data->grid->position);
  396. if(ier==-1)return(NULL);
  397. data->npts=data->grid->nPts;
  398. data->neq=data->nvar*data->npts;
  399. }
  400. data->output=fopen("output.dat","w");
  401. data->globalOutput=fopen("globalOutput.dat","w");
  402. data->gridOutput=fopen("grid.dat","w");
  403. data->timescaleOutput=fopen("timeScale.dat","w") ;
  404. data->rxnROPOutput=fopen("rxnROP.dat","w");
  405. data->spROPOutput=fopen("spROP.dat","w");
  406. //data->ratesOutput=fopen("rates.dat","w");
  407. data->innerMassFractions = new double [data->nsp];
  408. //data->wdot_mole = new double [data->nsp] ;
  409. //data->wdot_mass = new double [data->nsp] ;
  410. data->time_scale = new double [(data->npts) * (data->nsp)] ;
  411. //data->MW = new double [data->nsp] ;
  412. return(data);
  413. }
  414. void setSaneDefaults(UserData data){
  415. data->domainLength=1.0e-02;
  416. data->Rd=100.0e-06;
  417. data->constantPressure=1;
  418. data->problemType=1;
  419. data->quasiSteady=1;
  420. data->dPdt=0.0e0;
  421. data->reflectProblem=0;
  422. data->mdot=0.0;
  423. data->initialTemperature=300.0;
  424. data->initialPressure=1.0;
  425. data->metric=0;
  426. data->ignTime=1e-09;
  427. data->maxQDot=0.0e0;
  428. data->maxTemperature=300.0e0;
  429. data->mixingWidth=1e-04;
  430. data->shift=3.0e-03;
  431. data->firstRadius=1e-04;
  432. data->wallTemperature=298.0e0;
  433. data->dirichletInner=0;
  434. data->dirichletOuter=0;
  435. data->adaptiveGrid=0;
  436. data->moveGrid=0;
  437. data->gridOffset=0.0e0;
  438. data->Rg=1.0;
  439. data->isotherm=1000.0;
  440. data->nSaves=30;
  441. data->writeRates=0;
  442. data->writeEveryRegrid=0;
  443. data->relativeTolerance=1e-06;
  444. data->radiusTolerance=1e-08;
  445. data->temperatureTolerance=1e-06;
  446. data->pressureTolerance=1e-06;
  447. data->massFractionTolerance=1e-09;
  448. data->bathGasTolerance=1e-06;
  449. data->finalTime=1e-02;
  450. data->tNow=0.0e0;
  451. data->setConstraints=0;
  452. data->suppressAlg=1;
  453. data->regrid=0;
  454. data->gridDirection=1;
  455. data->dryRun=0;
  456. data->nThreads=1;
  457. data->flamePosition[0]=0.0e0;
  458. data->flamePosition[1]=0.0e0;
  459. data->flameTime[0]=0.0e0;
  460. data->flameTime[1]=0.0e0;
  461. data->nTimeSteps=0;
  462. data->PCAD=0.75;
  463. data->RGTC=1.0;
  464. data->JJRG=0;
  465. data->deltaT=200.0;
  466. }
  467. void getGamma(const double mole[],double gamma[]){
  468. /* define relevant matrix */
  469. Eigen::Matrix2d nu_ ;
  470. nu_ << 2,1,2,5;
  471. /* define relevant vectors */
  472. Eigen::Vector2d R_(0.9011,0.6744),Q_(0.8480,0.5400);
  473. Eigen::Vector2d r_,q_,x_,l_,ones_(1.0,1.0),v_,ksi_,gammaC_;
  474. double sum_q, sum_r,sum_l;
  475. r_ = nu_ * R_ ;
  476. q_ = nu_ * Q_ ;
  477. x_ << mole[0], mole[1] ;
  478. sum_q = x_.dot(q_) ;
  479. sum_r = x_.dot(r_) ;
  480. for(int i=0; i<v_.size() ; i++){
  481. v_[i] = q_[i] * x_[i] / sum_q;
  482. ksi_[i] = r_[i] * x_[i] / sum_r ;
  483. }
  484. l_ = 5 * (r_ - q_) - (r_ - ones_) ;
  485. sum_l = l_.dot(x_) ;
  486. /* calculate the gamma_c */
  487. for(int i=0; i<v_.size() ; i++){
  488. gammaC_[i] =std::exp( std::log(ksi_[i]/x_[i]) + 5*q_[i]*std::log(v_[i]/ksi_[i]) + l_[i] - ksi_[i]/x_[i]*sum_l );
  489. }
  490. /******* gamma_R for both propane and n-heptane are 0 **********/
  491. /* return the gamma */
  492. for(int i=0; i<v_.size(); i++){
  493. gamma[i] = gammaC_[i] ;
  494. }
  495. }