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 |
|
---|
10 | bool 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 | bool converged;
|
---|
15 | int num_notconverged=0;
|
---|
16 | int total_notconverged;
|
---|
17 | double *eps = NULL;
|
---|
18 | Element* element=NULL;
|
---|
19 | int verbose;
|
---|
20 |
|
---|
21 | /*retrieve parameters: */
|
---|
22 | parameters->FindParam(&verbose,VerboseEnum);
|
---|
23 |
|
---|
24 | /*allocate dynamic memory: */
|
---|
25 | eps=(double*)xmalloc(num_criterionenums*sizeof(double));
|
---|
26 |
|
---|
27 | /*Go through elements, and ask them to do the job: */
|
---|
28 | for(i=0;i<elements->Size();i++){
|
---|
29 | element=(Element*)elements->GetObjectByOffset(i);
|
---|
30 | converged=element->InputConvergence(eps,enums,num_enums,criterionenums,criterionvalues,num_criterionenums);
|
---|
31 | if(!converged) num_notconverged++;
|
---|
32 | }
|
---|
33 |
|
---|
34 | /*In parallel, we need to gather the converged status: */
|
---|
35 | #ifdef _PARALLEL_
|
---|
36 | MPI_Allreduce ( (void*)&num_notconverged,(void*)&total_notconverged,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
|
---|
37 | num_notconverged=total_notconverged;
|
---|
38 | #endif
|
---|
39 | _printf_(" #elements above convergence criterion = %i\n",num_notconverged);
|
---|
40 |
|
---|
41 | /*Free ressources:*/
|
---|
42 | xfree((void**)&eps);
|
---|
43 |
|
---|
44 | /*return: */
|
---|
45 | if (num_notconverged){
|
---|
46 | return false;}
|
---|
47 | else{
|
---|
48 | return true;}
|
---|
49 | }
|
---|