Ignore:
Timestamp:
10/08/10 16:49:12 (14 years ago)
Author:
Mathieu Morlighem
Message:

Prepared ISSM for multivariable CM, Added modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/solutions/gradient_core.cpp

    r6200 r6213  
    1717        /*parameters: */
    1818        bool control_steady;
    19         int  control_type;
     19        int  num_controls;
     20        int* control_type=NULL;
    2021        int  verbose;
    2122
     
    2728        /*retrieve parameters:*/
    2829        femmodel->parameters->FindParam(&control_steady,ControlSteadyEnum);
    29         femmodel->parameters->FindParam(&control_type,ControlTypeEnum);
     30        femmodel->parameters->FindParam(&num_controls,NumControlsEnum);
     31        femmodel->parameters->FindParam(&control_type,NULL,ControlTypeEnum);
    3032        femmodel->parameters->FindParam(&verbose,VerboseEnum);
    3133
    32         if(verbose)_printf_("%s\n","      compute gradient:");
    33         Gradjx(&gradient, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters, control_type);
     34        for (int i=0;i<num_controls;i++){
    3435
    35         if(control_steady)diagnostic_core(femmodel);
    36        
    37         if (step>0 && search_scalar==0){
    38                 _printf_("%s","      orthogonalization...\n");
    39                 if(verbose)_printf_("%s\n","      retrieve old gradient:");
    40                 ControlInputGetGradientx(&old_gradient,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters,control_type);
    41                 Orthx(&new_gradient,gradient,old_gradient);
    42                 VecFree(&old_gradient);
     36                if(verbose)_printf_("      compute gradient of J with respect to %s\n",EnumToString(control_type[i]));
     37                Gradjx(&gradient, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters, control_type[i]);
     38
     39                if(control_steady)diagnostic_core(femmodel);
     40
     41                if (step>0 && search_scalar==0){
     42                        _printf_("%s","      orthogonalization...\n");
     43                        ControlInputGetGradientx(&old_gradient,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters,control_type[i]);
     44                        Orthx(&new_gradient,gradient,old_gradient);
     45                        VecFree(&old_gradient);
     46                }
     47                else{
     48                        _printf_("%s","      normalizing directions...\n");
     49                        Orthx(&new_gradient,gradient,NULL);
     50                }
     51                VecFree(&gradient);
     52
     53                /*plug back into inputs: */
     54                ControlInputSetGradientx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,control_type[i],new_gradient);
     55
     56                /*Free ressources and return:*/
     57                VecFree(&new_gradient);
    4358        }
    44         else{
    45                 _printf_("%s","      normalizing directions...\n");
    46                 Orthx(&new_gradient,gradient,NULL);
    47         }
    48         VecFree(&gradient);
    4959
    50         /*plug back into inputs: */
    51         ControlInputSetGradientx(femmodel-> elements,femmodel-> nodes, femmodel-> vertices,femmodel-> loads, femmodel-> materials,  femmodel->parameters,control_type,new_gradient);
    52 
    53         /*Free ressources and return:*/
    54         VecFree(&new_gradient);
     60        /*Clean up and return*/
     61        xfree((void**)&control_type);
    5562}
Note: See TracChangeset for help on using the changeset viewer.