- Timestamp:
- Apr 21, 2008, 2:19:23 PM (17 years ago)
- Children:
- 32de28
- Parents:
- 907086e
- git-author:
- Frederik Heber <heber@…> (04/18/08 14:50:42)
- git-committer:
- Frederik Heber <heber@…> (04/21/08 14:19:23)
- Location:
- pcp/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pcp/src/helpers.c
r907086e r9275a3 47 47 * \param output output string 48 48 */ 49 void debug(struct Problem *P, const char *output) { 50 if (output) fprintf(stderr,"(%i) %s\n",P->Par.me, output); 51 } 49 #ifdef HAVE_DEBUG 50 void debug_in(struct Problem *P, const char *output, const char *file, const int line) { 51 if (output) fprintf(stderr,"(%i) DEBUG: in %s at line %i: %s\n",P->Par.me, file, line, output); 52 } 53 #else 54 void debug_in(struct Problem *P, const char *output, const char *file, const int line) {} // print nothing 55 #endif 52 56 53 57 /** Malloc with error check. … … 169 173 * Wrapper for free(), free is only called on given non-null pointer 170 174 * \param *ptr pointer to allocated memory region 171 */ 172 void Free (void *ptr) { 173 if (ptr) free(ptr); 174 else fprintf(stderr,"Free failure\n"); 175 * \param *output message to print on failure 176 */ 177 void Free (void *ptr, const char* output) { 178 if (ptr != NULL) 179 free(ptr); 180 else 181 fprintf(stderr,"Free not necessary: %s\n", output); 175 182 } 176 183 … … 301 308 int i,d, type; 302 309 if (P->Call.out[NormalOut]) fprintf(stderr,"(%i)RemoveEverything !\n",P->Par.me); 303 //debug(P,"RemoveGradients");304 310 RemoveGradients(P, &P->Grad); 305 //debug(P,"RemovePseudoRead");306 311 RemovePseudoRead(P); 307 //debug(P,"RemoveIonsRead");308 312 RemoveIonsRead(&P->Ion); 309 //debug(P,"fft_3d_destroy_plan");310 313 fft_3d_destroy_plan(P,P->Lat.plan); 311 //debug(P,"P->Files.PosTemp");312 314 if (P->Files.MeOutVis) { 313 Free(P->Files.PosTemp); 314 } 315 //debug(P,"P->Files.OutputPosType"); 316 if (P->Files.MeOutVis) 317 Free(P->Files.OutputPosType); 318 //debug(P,"mainname"); 319 Free(P->Files.mainname); 320 //debug(P,"mainpath"); 321 Free(P->Files.mainpath); 322 //debug(P,"MainParameterFile"); 323 Free(P->Call.MainParameterFile); 324 //debug(P,"MaxNoOfnFields"); 325 Free(Lat->MaxNoOfnFields); 315 Free(P->Files.PosTemp, "RemoveEverything: P->Files.PosTemp"); 316 Free(P->Files.OutputPosType, "RemoveEverything: P->Files.OutputPosType"); 317 //Free(P->Files.OutVisStep, "RemoveEverything: P->Files.OutVisStep"); 318 } 319 Free(P->Files.mainname, "RemoveEverything: P->Files.mainname"); 320 Free(P->Files.mainpath, "RemoveEverything: P->Files.mainpath"); 321 Free(P->Call.MainParameterFile, "RemoveEverything: P->Call.MainParameterFile"); 322 if (P->Call.ForcesFile != NULL) 323 Free(P->Call.ForcesFile, "RemoveEverything: P->Call.ForcesFile"); 324 Free(Lat->MaxNoOfnFields, "RemoveEverything: Lat->MaxNoOfnFields"); 326 325 for (i=0; i < P->Lat.MaxLevel; i++) { 327 //debug(P,"AllMaxG"); 328 Free(Lat->Lev[i].AllMaxG); 329 //debug(P,"NFields"); 330 Free(Lat->NFields[i]); 331 //debug(P,"GArray"); 332 Free(Lat->Lev[i].GArray); 333 //debug(P,"HashG"); 334 Free(Lat->Lev[i].HashG); 335 //debug(P,"DoubleG"); 326 Free(Lat->Lev[i].AllMaxG, "RemoveEverything: Lat->Lev[i].AllMaxG"); 327 Free(Lat->NFields[i], "RemoveEverything: Lat->NFields"); 328 Free(Lat->Lev[i].GArray, "RemoveEverything: Lat->Lev[i].GArray"); 329 Free(Lat->Lev[i].HashG, "RemoveEverything: Lat->Lev[i].HashG"); 336 330 if (Lat->Lev[i].MaxDoubleG) 337 Free(Lat->Lev[i].DoubleG );331 Free(Lat->Lev[i].DoubleG, "RemoveEverything: Lat->Lev[i].DoubleG"); 338 332 if (i != 0) { 339 Free(Lat->Lev[i].PosFactorUp );333 Free(Lat->Lev[i].PosFactorUp, "RemoveEverything: Lat->Lev[i].PosFactorUp"); 340 334 } else { 341 335 for (d=0; d < (P->R.DoPerturbation == 1 ? MaxDensityTypes : MaxInitDensityTypes); d++) { 342 //debug(P,"DensityArray"); 343 if (Lat->Lev[i].Dens->DensityArray[d] != NULL) Free(Lat->Lev[i].Dens->DensityArray[d]); 344 //debug(P,"DensityCArray"); 345 if (Lat->Lev[i].Dens->DensityCArray[d] != NULL) Free(Lat->Lev[i].Dens->DensityCArray[d]); 336 if (Lat->Lev[i].Dens->DensityArray[d] != NULL) Free(Lat->Lev[i].Dens->DensityArray[d], "RemoveEverything: Lat->Lev[i].Dens->DensityArray[d]"); 337 if (Lat->Lev[i].Dens->DensityCArray[d] != NULL) Free(Lat->Lev[i].Dens->DensityCArray[d], "RemoveEverything: Lat->Lev[i].Dens->DensityCArray[d]"); 346 338 } 347 339 } 348 340 /* if (i != Lat->MaxLevel-1) */ 349 //debug(P,"Lat->Lev[i].Dens"); 350 Free(Lat->Lev[i].Dens); 341 Free(Lat->Lev[i].Dens, "RemoveEverything: Lat->Lev[i].Dens"); 351 342 } 352 343 for (i=1; i < Lat->MaxLevel; i++) { 353 Free(Lat->Lev[i].LPsi->LocalPsi); 354 //debug(P,"LocalPsi"); 355 Free(Lat->Lev[i].LPsi->OldLocalPsi); 356 //debug(P,"OldLocalPsi"); 344 Free(Lat->Lev[i].LPsi->LocalPsi, "RemoveEverything: Lat->Lev[i].LPsi->LocalPsi"); 345 Free(Lat->Lev[i].LPsi->OldLocalPsi, "RemoveEverything: Lat->Lev[i].LPsi->OldLocalPsi"); 357 346 if (i == 1) { 358 Free(Lat->Lev[i].LPsi->PsiDat); 359 //debug(P,"OldLocalPsi"); 360 Free(Lat->Lev[i].LPsi->OldPsiDat); 361 //debug(P,"OldPsiDat"); 347 Free(Lat->Lev[i].LPsi->PsiDat, "RemoveEverything: Lat->Lev[i].LPsi->PsiDat"); 348 Free(Lat->Lev[i].LPsi->OldPsiDat, "RemoveEverything: Lat->Lev[i].LPsi->OldPsiDat"); 362 349 } 363 Free(Lat->Lev[i].LPsi); 364 //debug(P,"LPsi"); 350 Free(Lat->Lev[i].LPsi, "RemoveEverything: Lat->Lev[i].LPsi"); 365 351 } 366 352 for (i=0;i<Lat->Psi.NoOfTotalPsis;i++) { 367 Free(Psi->lambda[i]); 368 //debug(P,"lambda"); 353 Free(Psi->lambda[i], "RemoveEverything: Psi->lambda[i]"); 369 354 } 370 355 for (i=0;i<Lat->Psi.NoOfPsis;i++) { 371 Free(Psi->Overlap[i]); 372 //debug(P,"Overlap"); 373 } 374 Free(Psi->lambda); 375 //debug(P,"lambda"); 376 Free(Psi->Overlap); 377 //debug(P,"Overlap"); 378 Free(Psi->AllPsiStatus); 379 //debug(P,"AllPsiStatus"); 380 Free(Psi->AllPsiStatusForSort); 381 //debug(P,"AllPsiStatusForSort"); 382 Free(Psi->LocalPsiStatus); 383 //debug(P,"LocalPsiStatus"); 384 Free(Psi->AllLocalNo); 385 //debug(P,"AllLocalNo"); 386 Free(Psi->RealAllLocalNo); 387 //debug(P,"RealAllLocalNo"); 388 Free(Psi->TempSendA); 389 //debug(P,"TempSendA"); 390 Free(Psi->AddData); 391 //debug(P,"AddData"); 392 Free(Psi->AllActualLocalPsiNo); 393 //debug(P,"AllActualLocalPsiNo"); 394 Free(Psi->AllOldActualLocalPsiNo); 395 //debug(P,"AllOldActualLocalPsiNo"); 396 Free(Lat->Lev); 397 //debug(P,"Lev"); 398 Free(Lat->LevelSizes); 399 //debug(P,"LevelSizes"); 400 Free(Lat->NFields); 401 //debug(P,"NFields"); 356 Free(Psi->Overlap[i], "RemoveEverything: Psi->Overlap[i]"); 357 } 358 Free(Psi->lambda, "RemoveEverything: Psi->lambda"); 359 Free(Psi->Overlap, "RemoveEverything: Psi->Overlap"); 360 Free(Psi->AllPsiStatus, "RemoveEverything: Psi->AllPsiStatus"); 361 Free(Psi->AllPsiStatusForSort, "RemoveEverything: Psi->AllPsiStatusForSort"); 362 Free(Psi->LocalPsiStatus, "RemoveEverything: Psi->LocalPsiStatus"); 363 Free(Psi->AllLocalNo, "RemoveEverything: Psi->AllLocalNo"); 364 Free(Psi->RealAllLocalNo, "RemoveEverything: Psi->RealAllLocalNo"); 365 Free(Psi->TempSendA, "RemoveEverything: Psi->TempSendA"); 366 Free(Psi->AddData, "RemoveEverything: Psi->AddData"); 367 Free(Psi->AllActualLocalPsiNo, "RemoveEverything: Psi->AllActualLocalPsiNo"); 368 Free(Psi->AllOldActualLocalPsiNo, "RemoveEverything: Psi->AllOldActualLocalPsiNo"); 369 Free(Lat->Lev, "RemoveEverything: Lat->Lev"); 370 Free(Lat->LevelSizes, "RemoveEverything: Lat->LevelSizes"); 371 Free(Lat->NFields, "RemoveEverything: Lat->NFields"); 402 372 if (Lat->RT.Use == UseRT) { 403 Free(Lat->RT.Coeff );404 Free(Lat->RT.RTLaplaceS );405 Free(Lat->RT.RTLaplace0 );406 for (i=0; i< MAXRTPOSFAC; i++) Free(Lat->RT.PosFactor[i] );373 Free(Lat->RT.Coeff, "RemoveEverything: Lat->RT.Coeff"); 374 Free(Lat->RT.RTLaplaceS, "RemoveEverything: Lat->RT.RTLaplaceS"); 375 Free(Lat->RT.RTLaplace0, "RemoveEverything: Lat->RT.RTLaplace0"); 376 for (i=0; i< MAXRTPOSFAC; i++) Free(Lat->RT.PosFactor[i], "RemoveEverything: Lat->RT.PosFactor[i]"); 407 377 for (i=0; i< MAXRTARRAYS; i++) { 408 Free(Lat->RT.DensityC[i] );378 Free(Lat->RT.DensityC[i], "RemoveEverything: Lat->RT.DensityC[i]"); 409 379 } 410 Free(Lat->RT.TempC );380 Free(Lat->RT.TempC, "RemoveEverything: Lat->RT.TempC"); 411 381 } 412 382 for (type=Occupied;type<Extra;type++) 413 383 for (i=0; i<MAXALLPSIENERGY; i++) { 414 Free(Lat->Energy[type].PsiEnergy[i] );384 Free(Lat->Energy[type].PsiEnergy[i], "RemoveEverything: Lat->Energy[type].PsiEnergy[i]"); 415 385 } 416 386 for (i=Occupied;i<Extra;i++) 417 Free(P->R.MinimisationName[i]); 418 Free(P->R.MinimisationName); 419 //debug(P,"PsiEnergy"); 387 Free(P->R.MinimisationName[i], "RemoveEverything: P->R.MinimisationName[i]"); 388 Free(P->R.MinimisationName, "RemoveEverything: P->R.MinimisationName"); 420 389 MPI_Comm_free(&P->Par.comm_ST_PsiT); 421 390 //debug(P,"comm_ST_PsiT"); … … 427 396 MPI_Comm_free(&P->Par.comm); 428 397 //debug(P,"comm"); 429 Free(P );398 Free(P, "RemoveEverything: P"); 430 399 FreeMPI_OnePsiElement(); 400 //debug(P,"OnePsiElement"); 431 401 432 402 // Free string names from Files structure 433 Free(P->Files.filename );434 Free(P->Files.default_path );435 Free(P->Files.pseudopot_path );403 Free(P->Files.filename, "RemoveEverything: P->Files.filename"); 404 Free(P->Files.default_path, "RemoveEverything: P->Files.default_path"); 405 Free(P->Files.pseudopot_path, "RemoveEverything: P->Files.pseudopot_path"); 436 406 } 437 407 -
pcp/src/helpers.h
r907086e r9275a3 17 17 #include<stddef.h> /* fuer size_t */ 18 18 19 void debug(struct Problem *P, const char *output); 19 // taken out of TREMOLO 20 /*@-namechecks@*/ 21 #ifndef __GNUC__ 22 # undef __attribute__ 23 # define __attribute__(x) 24 #endif 25 /*@=namechecks@*/ 26 27 28 /* Behandelt aufgetretene Fehler. error ist der Fehlertyp(enum Errors) 29 void *SpecialData ist ein untypisierter Zeiger auf Spezielle Daten zur Fehlerbehandlung. 30 Man koennte auch noch einen Zeiger auf eine Funktion uebergeben */ 31 extern void /*@exits@*/ debug(struct Problem *P, const char *output); 32 //__attribute__ ((__return__)); 33 #define debug(err, data) debug_in((err), (data), __FILE__, __LINE__) 34 35 extern void /*@exits@*/ debug_in(struct Problem *P, const char *output, 36 const char *file, const int line); 37 //__attribute__ ((__return__)); 38 20 39 /* Eigene malloc, die bei einem Fehler an Error output uebergibt */ 21 40 void* Malloc(size_t size, const char* output); … … 33 52 void* Realloci(void* pointer, size_t size, const char* output, int i); 34 53 void* Reallocii(void* pointer, size_t size, const char* output, int i, int j); 35 void Free (void *ptr );54 void Free (void *ptr, const char* output); 36 55 37 56 void GetRGB(int i, unsigned int max, double* rgb);
Note:
See TracChangeset
for help on using the changeset viewer.