[4055] | 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 |
|
---|
[4778] | 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){
|
---|
[4055] | 11 |
|
---|
| 12 | /*intermediary:*/
|
---|
[4780] | 13 | int i;
|
---|
[4879] | 14 | bool converged;
|
---|
| 15 | int num_notconverged=0;
|
---|
| 16 | int total_notconverged;
|
---|
[4780] | 17 | double *eps = NULL;
|
---|
| 18 | Element* element=NULL;
|
---|
[4879] | 19 | int verbose;
|
---|
[4055] | 20 |
|
---|
[4057] | 21 | /*retrieve parameters: */
|
---|
| 22 | parameters->FindParam(&verbose,VerboseEnum);
|
---|
| 23 |
|
---|
[4055] | 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++){
|
---|
[4057] | 29 | element=(Element*)elements->GetObjectByOffset(i);
|
---|
[4879] | 30 | converged=element->InputConvergence(eps,enums,num_enums,criterionenums,criterionvalues,num_criterionenums);
|
---|
| 31 | if(!converged) num_notconverged++;
|
---|
[4055] | 32 | }
|
---|
| 33 |
|
---|
| 34 | /*In parallel, we need to gather the converged status: */
|
---|
| 35 | #ifdef _PARALLEL_
|
---|
[4879] | 36 | MPI_Allreduce ( (void*)&num_notconverged,(void*)&total_notconverged,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
|
---|
[4890] | 37 | num_notconverged=total_notconverged;
|
---|
[4055] | 38 | #endif
|
---|
[4890] | 39 | _printf_(" #elements above convergence criterion = %i\n",num_notconverged);
|
---|
[4055] | 40 |
|
---|
| 41 | /*Free ressources:*/
|
---|
| 42 | xfree((void**)&eps);
|
---|
| 43 |
|
---|
| 44 | /*return: */
|
---|
[4890] | 45 | if (num_notconverged){
|
---|
[4879] | 46 | return false;}
|
---|
| 47 | else{
|
---|
[4780] | 48 | return true;}
|
---|
[4055] | 49 | }
|
---|