@@ -654,9 +654,6 @@ void CDiscAdjMultizoneDriver::DirectIteration(unsigned short iZone, unsigned sho
654654void CDiscAdjMultizoneDriver::SetObjFunction (unsigned short kind_recording) {
655655
656656 ObjFunc = 0.0 ;
657- su2double Weight_ObjFunc;
658-
659- unsigned short iMarker_Analyze, nMarker_Analyze;
660657
661658 /* --- Call objective function calculations. ---*/
662659
@@ -678,14 +675,16 @@ void CDiscAdjMultizoneDriver::SetObjFunction(unsigned short kind_recording) {
678675 if (config->GetWeakly_Coupled_Heat ()) {
679676 solvers[HEAT_SOL]->Heat_Fluxes (geometry, solvers, config);
680677 }
678+
679+ direct_output[iZone]->SetHistory_Output (geometry, solvers, config);
680+
681681 solvers[FLOW_SOL]->Evaluate_ObjFunc (config);
682682 break ;
683+
683684 case DISC_ADJ_HEAT:
684685 solvers[HEAT_SOL]->Heat_Fluxes (geometry, solvers, config);
685686 break ;
686687 }
687-
688- direct_output[iZone]->SetHistory_Output (geometry, solvers, config);
689688 }
690689
691690 /* --- Extract objective function values. ---*/
@@ -696,28 +695,9 @@ void CDiscAdjMultizoneDriver::SetObjFunction(unsigned short kind_recording) {
696695 auto solvers = solver_container[iZone][INST_0][MESH_0];
697696 auto geometry = geometry_container[iZone][INST_0][MESH_0];
698697
699- nMarker_Analyze = config->GetnMarker_Analyze ();
700-
701- for (iMarker_Analyze = 0 ; iMarker_Analyze < nMarker_Analyze; iMarker_Analyze++) {
702-
703- Weight_ObjFunc = config->GetWeight_ObjFunc (iMarker_Analyze);
704-
705- switch (config->GetKind_Solver ()) {
706-
707- case DISC_ADJ_EULER: case DISC_ADJ_NAVIER_STOKES: case DISC_ADJ_RANS:
708- // per-surface output to be added soon
709- break ;
710- case HEAT_EQUATION: case DISC_ADJ_HEAT:
711- // per-surface output to be added soon
712- break ;
713- default :
714- break ;
715- }
716- }
717-
718698 /* --- Not-per-surface objective functions (shall not be included above) ---*/
719699
720- Weight_ObjFunc = config->GetWeight_ObjFunc (0 );
700+ const auto Weight_ObjFunc = config->GetWeight_ObjFunc (0 );
721701
722702 bool ObjectiveNotCovered = false ;
723703
@@ -726,57 +706,20 @@ void CDiscAdjMultizoneDriver::SetObjFunction(unsigned short kind_recording) {
726706 case DISC_ADJ_EULER: case DISC_ADJ_NAVIER_STOKES: case DISC_ADJ_RANS:
727707 case DISC_ADJ_INC_EULER: case DISC_ADJ_INC_NAVIER_STOKES: case DISC_ADJ_INC_RANS:
728708 {
729- string FieldName;
730-
731- switch (config->GetKind_ObjFunc ()) {
732-
733- // Aerodynamic coefficients
734-
735- case DRAG_COEFFICIENT:
736- case LIFT_COEFFICIENT:
737- case SIDEFORCE_COEFFICIENT:
738- case EFFICIENCY:
739- case MOMENT_X_COEFFICIENT:
740- case MOMENT_Y_COEFFICIENT:
741- case MOMENT_Z_COEFFICIENT:
742- case FORCE_X_COEFFICIENT:
743- case FORCE_Y_COEFFICIENT:
744- case FORCE_Z_COEFFICIENT:
745- FieldName = config->GetName_ObjFunc ();
746- break ;
747-
748- // Other surface-related output values
749- // The names are different than in CConfig...
750-
751- case SURFACE_MASSFLOW: FieldName = " AVG_MASSFLOW" ; break ;
752- case SURFACE_MACH: FieldName = " AVG_MACH" ; break ;
753- case SURFACE_UNIFORMITY: FieldName = " UNIFORMITY" ; break ;
754- case SURFACE_SECONDARY: FieldName = " SECONDARY_STRENGTH" ; break ;
755- case SURFACE_MOM_DISTORTION: FieldName = " MOMENTUM_DISTORTION" ; break ;
756- case SURFACE_SECOND_OVER_UNIFORM: FieldName = " SECONDARY_OVER_UNIFORMITY" ; break ;
757- case TOTAL_AVG_TEMPERATURE: FieldName = " AVG_TOTALTEMP" ; break ;
758- case SURFACE_TOTAL_PRESSURE: FieldName = " AVG_TOTALPRESS" ; break ;
759-
760- // Not yet covered by new output structure. Be careful these use MARKER_MONITORING.
761-
762- case SURFACE_PRESSURE_DROP:
763- ObjFunc += config->GetSurface_PressureDrop (0 )*Weight_ObjFunc;
764- break ;
765- case SURFACE_STATIC_PRESSURE:
766- ObjFunc += config->GetSurface_Pressure (0 )*Weight_ObjFunc;
767- break ;
768- case TOTAL_HEATFLUX:
769- ObjFunc += solvers[FLOW_SOL]->GetTotal_HeatFlux ()*Weight_ObjFunc;
770- break ;
709+ auto val = solvers[FLOW_SOL]->GetTotal_ComboObj ();
771710
772- default :
773- ObjectiveNotCovered = true ;
774- break ;
711+ if (config->GetWeakly_Coupled_Heat ()) {
712+ if (config->GetKind_ObjFunc () == TOTAL_HEATFLUX) {
713+ val += solvers[HEAT_SOL]->GetTotal_HeatFlux ();
714+ }
715+ else if (config->GetKind_ObjFunc () == AVG_TEMPERATURE) {
716+ val += solvers[HEAT_SOL]->GetTotal_AvgTemperature ();
717+ }
775718 }
719+ ObjFunc += val*Weight_ObjFunc;
776720
777- if (!FieldName.empty ())
778- ObjFunc += direct_output[iZone]->GetHistoryFieldValue (FieldName)*Weight_ObjFunc;
779-
721+ /* --- This is not ideal... ---*/
722+ ObjectiveNotCovered = (val==0.0 );
780723 break ;
781724 }
782725 case DISC_ADJ_HEAT:
@@ -788,7 +731,7 @@ void CDiscAdjMultizoneDriver::SetObjFunction(unsigned short kind_recording) {
788731 case TOTAL_HEATFLUX:
789732 ObjFunc += solvers[HEAT_SOL]->GetTotal_HeatFlux ()*Weight_ObjFunc;
790733 break ;
791- case TOTAL_AVG_TEMPERATURE :
734+ case AVG_TEMPERATURE :
792735 ObjFunc += solvers[HEAT_SOL]->GetTotal_AvgTemperature ()*Weight_ObjFunc;
793736 break ;
794737
0 commit comments