Changeset 5480


Ignore:
Timestamp:
08/23/10 00:31:34 (15 years ago)
Author:
Eric.Larour
Message:

Can now accomodate scaled, indexed, nodal and regular type responses!

Location:
issm/trunk/src/c/modules/DakotaResponsesx
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk/src/c/modules/DakotaResponsesx/DakotaResponsesx.cpp

    r5334 r5480  
    1818
    1919
    20 void DakotaResponsesx(double* responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,char** responses_descriptors,int numresponses){
     20void DakotaResponsesx(double* d_responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,Vec node_partition,char** responses_descriptors,int numresponsedescriptors,int d_numresponses){
    2121
    2222        int        i,j,k;
    23         int        dummy;
    24         int        counter;
    2523        extern int my_rank;
    2624        bool       process_units = true;
    2725
    2826        /*intermediary: */
    29         char* response_descriptor=NULL;
     27        char   root[50];
     28        int    index;
     29        int    npart;
    3030        double femmodel_response;
     31        int    flag;
     32        double* vertex_response=NULL;
     33        double* partition_response=NULL;
     34
     35        double* responses_pointer=NULL;
     36
     37        /*retrieve npart: */
     38        parameters->FindParam(&npart,QmuNPartEnum);
     39
     40        /*save the d_responses pointer: */
     41        responses_pointer=d_responses;
     42
     43        //watch out, we have more d_numresponses than numresponsedescriptors, because the responses have been expanded if they were scaled.
     44        //because we don't know the d_responses descriptors (the scaled ones) we can't key off them, so we will key off the responses_descriptors: */
     45               
     46        for(i=0;i<numresponsedescriptors;i++){
     47               
     48                flag=DescriptorIndex(root,&index,responses_descriptors[i]);
     49
     50                if(flag==ScaledEnum){
     51
     52                        /*this response was scaled. pick up the response from the inputs: */
     53                        GetVectorFromInputsx(&vertex_response,elements,nodes, vertices, loads, materials, parameters, StringToEnum(root),VertexEnum);
     54
     55                        /*Now, average it onto the partition grids: */
     56                        AverageOntoPartitionx(&partition_response,vertex_response,vertices,parameters,node_partition);
     57
     58                        /*Copy onto our dakota responses: */
     59                        for(i=0;i<npart;i++)responses_pointer[i]=partition_response[i];
     60
     61                        /*Free ressources:*/
     62                        xfree((void**)&vertex_response);
     63                        xfree((void**)&partition_response);
     64
     65                        /*increment response_pointer :*/
     66                        responses_pointer+=npart;
     67
     68                }
     69                else if (flag==IndexedEnum){
     70
     71                        /*indexed response: plug index into parameters and call response module: */
     72                        parameters->SetParam(index,IndexEnum);
    3173                       
    32         for(i=0;i<numresponses;i++){
     74                        //Responsex(responses_pointer,elements,nodes, vertices,loads,materials, parameters,root,process_units);
     75                        Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units);
     76                       
     77                        if(my_rank==0){
     78                                /*plug response: */
     79                                responses_pointer[0]=femmodel_response;
    3380
    34                 response_descriptor=responses_descriptors[i];
     81                                /*increment response_pointer :*/
     82                                responses_pointer++;
     83                        }
     84                }
     85                else if (flag==NodalEnum){
     86                        ISSMERROR(" nodal response functions not supported yet!");
    3587
    36                 /*Compute response for this response_descriptor:*/
    37                 Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,response_descriptor,process_units);
     88                        /*increment response_pointer :*/
     89                        responses_pointer++;
     90                }
     91                else if (flag==RegularEnum){
     92                       
     93                        /*perfectly normal response function: */
     94                        Responsex(&femmodel_response,elements,nodes, vertices,loads,materials, parameters,root,process_units);
    3895
    39                 #ifdef _DEBUG_
    40                 if(my_rank==0)printf("response: %s: %g\n",response_descriptor,femmodel_response);
    41                 #endif
    42                        
    43                 /*send response back to Dakota only on cpu 0: */
    44                 if(my_rank==0)responses[i]=femmodel_response;
     96                        if(my_rank==0){
     97                                /*plug response: */
     98                                responses_pointer[0]=femmodel_response;
     99
     100                                /*increment response_pointer :*/
     101                                responses_pointer++;
     102                        }
     103                }
     104                else ISSMERROR("%s%i%s"," flag type ",flag," not supported yet for response analysis");
    45105        }
     106
    46107
    47108        /*Synthesize echo: {{{*/
    48109        if(my_rank==0){
    49                 printf("   responses: %i: ",numresponses);
    50                 for(i=0;i<numresponses-1;i++)printf("%g|",responses[i]);
    51                 printf("%g",responses[numresponses-1]);
     110                printf("   responses: %i: ",d_numresponses);
     111                for(i=0;i<d_numresponses-1;i++)printf("%g|",d_responses[i]);
     112                printf("%g",d_responses[d_numresponses-1]);
    52113                printf("\n");
    53114        }
  • TabularUnified issm/trunk/src/c/modules/DakotaResponsesx/DakotaResponsesx.h

    r4449 r5480  
    99#include "../../Container/Container.h"
    1010
    11 void DakotaResponsesx(double* responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,char** responses_descriptors,int numresponses);
     11void DakotaResponsesx(double* d_responses,Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads,Materials* materials, Parameters* parameters,Vec node_partition,char** responses_descriptors,int numresponsedescriptors,int d_numresponses);
    1212
    1313#endif  /* _DAKOTARESPONSESXX_H */
Note: See TracChangeset for help on using the changeset viewer.