source: issm/trunk/src/c/modules/InputConvergencex/InputConvergencex.cpp@ 4726

Last change on this file since 4726 was 4726, checked in by Mathieu Morlighem, 15 years ago

minor

File size: 2.0 KB
Line 
1/*!\file InputConvergencex
2 */
3
4#include "./InputConvergencex.h"
5#include "../../shared/shared.h"
6#include "../../include/include.h"
7#include "../../toolkits/toolkits.h"
8#include "../../EnumDefinitions/EnumDefinitions.h"
9
10int InputConvergencex(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,int* enums, int num_enums, int* criterionenums, double* criterionvalues,int num_criterionenums){
11
12 /*intermediary:*/
13 int i;
14 int converged = 1;
15 int node_converged=1;
16 double *eps = NULL;
17 extern int my_rank;
18 int rank_allowed;
19 Element* element=NULL;
20 int verbose=0;
21
22 /*retrieve parameters: */
23 parameters->FindParam(&verbose,VerboseEnum);
24
25 /*allocate dynamic memory: */
26 eps=(double*)xmalloc(num_criterionenums*sizeof(double));
27
28 /*Go through elements, and ask them to do the job: */
29 for(i=0;i<elements->Size();i++){
30 element=(Element*)elements->GetObjectByOffset(i);
31 element->InputConvergence(&converged,eps,enums,num_enums,criterionenums,criterionvalues,num_criterionenums);
32 if(!converged)break;
33 }
34
35 if(!converged){
36 /*get convergence information to user: */
37 if(verbose>2)rank_allowed=my_rank;
38 else rank_allowed=0;
39 if(my_rank==rank_allowed){
40 printf("Convergence info: element %i (and maybe others) did not converge for inputs:",element->Id());
41 for(i=0;i<num_enums-1;i++)printf(" %s,",EnumAsString(enums[i])); printf(" %s\n",EnumAsString(enums[num_enums-1]));
42 printf(" convergence criterions: ");
43 for(i=0;i<num_criterionenums;i++) printf("%s: %g/%g ",EnumAsString(criterionenums[i]),eps[i],criterionvalues[i]);
44 printf("\n");
45 }
46 }
47
48 /*In parallel, we need to gather the converged status: */
49 #ifdef _PARALLEL_
50 MPI_Reduce (&converged,&node_converged,1,MPI_INT,MPI_MIN,0,MPI_COMM_WORLD );
51 MPI_Bcast(&node_converged,1,MPI_INT,0,MPI_COMM_WORLD);
52 converged=node_converged;
53 #endif
54
55 /*Free ressources:*/
56 xfree((void**)&eps);
57
58 /*return: */
59 return converged;
60}
Note: See TracBrowser for help on using the repository browser.