@@ -109,35 +109,37 @@ PetscErrorCode SOPFLOWDestroy(SOPFLOW *sopflow) {
109
109
110
110
PetscFunctionBegin;
111
111
112
- /* Solution vector */
113
- ierr = VecDestroy (&(*sopflow)->X );
114
- CHKERRQ (ierr);
115
- ierr = VecDestroy (&(*sopflow)->gradobj );
116
- CHKERRQ (ierr);
117
-
118
- /* Lower and upper bounds on X */
119
- ierr = VecDestroy (&(*sopflow)->Xl );
120
- CHKERRQ (ierr);
121
- ierr = VecDestroy (&(*sopflow)->Xu );
122
- CHKERRQ (ierr);
112
+ if ((*sopflow)->issolver_ipopt ) {
113
+ /* Solution vector */
114
+ ierr = VecDestroy (&(*sopflow)->X );
115
+ CHKERRQ (ierr);
116
+ ierr = VecDestroy (&(*sopflow)->gradobj );
117
+ CHKERRQ (ierr);
123
118
124
- /* Constraints vector */
125
- ierr = VecDestroy (&(*sopflow)->G );
126
- CHKERRQ (ierr);
119
+ /* Lower and upper bounds on X */
120
+ ierr = VecDestroy (&(*sopflow)->Xl );
121
+ CHKERRQ (ierr);
122
+ ierr = VecDestroy (&(*sopflow)->Xu );
123
+ CHKERRQ (ierr);
127
124
128
- ierr = VecDestroy (&(*sopflow)->Gl );
129
- CHKERRQ (ierr);
130
- ierr = VecDestroy (&(*sopflow)->Gu );
131
- CHKERRQ (ierr);
132
- ierr = VecDestroy (&(*sopflow)->Lambda );
133
- CHKERRQ (ierr);
125
+ /* Constraints vector */
126
+ ierr = VecDestroy (&(*sopflow)->G );
127
+ CHKERRQ (ierr);
134
128
135
- /* Jacobian of constraints and Hessian */
136
- if ((*sopflow)->comm ->size == 1 ) {
137
- ierr = MatDestroy (&(*sopflow)->Jac );
129
+ ierr = VecDestroy (&(*sopflow)->Gl );
138
130
CHKERRQ (ierr);
139
- ierr = MatDestroy (&(*sopflow)->Hes );
131
+ ierr = VecDestroy (&(*sopflow)->Gu );
140
132
CHKERRQ (ierr);
133
+ ierr = VecDestroy (&(*sopflow)->Lambda );
134
+ CHKERRQ (ierr);
135
+
136
+ /* Jacobian of constraints and Hessian */
137
+ if ((*sopflow)->comm ->size == 1 ) {
138
+ ierr = MatDestroy (&(*sopflow)->Jac );
139
+ CHKERRQ (ierr);
140
+ ierr = MatDestroy (&(*sopflow)->Hes );
141
+ CHKERRQ (ierr);
142
+ }
141
143
}
142
144
143
145
if ((*sopflow)->solverops .destroy ) {
@@ -578,7 +580,6 @@ PetscErrorCode SOPFLOWSetUp(SOPFLOW sopflow) {
578
580
char windgen[PETSC_MAX_PATH_LEN];
579
581
PetscBool flgctgc = PETSC_FALSE;
580
582
PetscBool flgwindgen = PETSC_FALSE;
581
- PetscBool issopflowsolverhiop;
582
583
PetscBool flg;
583
584
584
585
char opflowmodelname[max_model_name_len];
@@ -891,7 +892,9 @@ PetscErrorCode SOPFLOWSetUp(SOPFLOW sopflow) {
891
892
}
892
893
}
893
894
894
- ierr = PetscStrcmp (sopflow->solvername , " HIOP" , &issopflowsolverhiop);
895
+ ierr = PetscStrcmp (sopflow->solvername , " HIOP" , &sopflow->issolver_hiop );
896
+ CHKERRQ (ierr);
897
+ ierr = PetscStrcmp (sopflow->solvername , " IPOPT" , &sopflow->issolver_ipopt );
895
898
CHKERRQ (ierr);
896
899
897
900
if (!sopflow->ismulticontingency ) {
@@ -981,7 +984,7 @@ PetscErrorCode SOPFLOWSetUp(SOPFLOW sopflow) {
981
984
}
982
985
983
986
/* Set subproblem parameters and partial setup */
984
- if (issopflowsolverhiop ) {
987
+ if (sopflow-> issolver_hiop ) {
985
988
ierr = OPFLOWSetModel (sopflow->opflows [s], sopflow->subproblem_model );
986
989
CHKERRQ (ierr);
987
990
ierr = OPFLOWSetSolver (sopflow->opflows [s], sopflow->subproblem_solver );
@@ -1153,81 +1156,83 @@ PetscErrorCode SOPFLOWSetUp(SOPFLOW sopflow) {
1153
1156
}
1154
1157
}
1155
1158
1156
- /* Create vector X */
1157
- ierr = VecCreate (sopflow->comm ->type , &sopflow->X );
1158
- CHKERRQ (ierr);
1159
- ierr = VecSetSizes (sopflow->X , sopflow->nx , PETSC_DECIDE);
1160
- CHKERRQ (ierr);
1161
- ierr = VecSetFromOptions (sopflow->X );
1162
- CHKERRQ (ierr);
1163
- ierr = VecGetSize (sopflow->X , &sopflow->Nx );
1164
- CHKERRQ (ierr);
1165
-
1166
- ierr = VecDuplicate (sopflow->X , &sopflow->Xl );
1167
- CHKERRQ (ierr);
1168
- ierr = VecDuplicate (sopflow->X , &sopflow->Xu );
1169
- CHKERRQ (ierr);
1170
- ierr = VecDuplicate (sopflow->X , &sopflow->gradobj );
1171
- CHKERRQ (ierr);
1172
-
1173
- /* vector for constraints */
1174
- ierr = VecCreate (sopflow->comm ->type , &sopflow->G );
1175
- CHKERRQ (ierr);
1176
- ierr = VecSetSizes (sopflow->G , sopflow->ncon , PETSC_DECIDE);
1177
- CHKERRQ (ierr);
1178
- ierr = VecSetFromOptions (sopflow->G );
1179
- CHKERRQ (ierr);
1180
- ierr = VecGetSize (sopflow->G , &sopflow->Ncon );
1181
- CHKERRQ (ierr);
1182
-
1183
- /* Constraint bounds vectors */
1184
- ierr = VecDuplicate (sopflow->G , &sopflow->Gl );
1185
- CHKERRQ (ierr);
1186
- ierr = VecDuplicate (sopflow->G , &sopflow->Gu );
1187
- CHKERRQ (ierr);
1188
-
1189
- if (sopflow->comm ->size == 1 ) {
1190
- /* Constraint Jacobian */
1191
- ierr = MatCreate (sopflow->comm ->type , &sopflow->Jac );
1159
+ if (sopflow->issolver_ipopt ) {
1160
+ /* Create vector X */
1161
+ ierr = VecCreate (sopflow->comm ->type , &sopflow->X );
1192
1162
CHKERRQ (ierr);
1193
- ierr = MatSetSizes (sopflow->Jac , sopflow->ncon , sopflow->nx , sopflow->Ncon ,
1194
- sopflow->Nx );
1163
+ ierr = VecSetSizes (sopflow->X , sopflow->nx , PETSC_DECIDE);
1195
1164
CHKERRQ (ierr);
1196
- // ierr = MatSetFromOptions(sopflow->Jac);
1197
- // CHKERRQ(ierr);
1198
- ierr = MatSetType (sopflow->Jac , MATSEQAIJ);
1165
+ ierr = VecSetFromOptions (sopflow->X );
1199
1166
CHKERRQ (ierr);
1200
- /* Assume 10% sparsity */
1201
- ierr = MatSeqAIJSetPreallocation (sopflow->Jac ,
1202
- (PetscInt)(0.1 * sopflow->Nx ), NULL );
1167
+ ierr = VecGetSize (sopflow->X , &sopflow->Nx );
1168
+ CHKERRQ (ierr);
1169
+
1170
+ ierr = VecDuplicate (sopflow->X , &sopflow->Xl );
1203
1171
CHKERRQ (ierr);
1204
- ierr =
1205
- MatSetOption (sopflow->Jac , MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);
1172
+ ierr = VecDuplicate (sopflow->X , &sopflow->Xu );
1173
+ CHKERRQ (ierr);
1174
+ ierr = VecDuplicate (sopflow->X , &sopflow->gradobj );
1206
1175
CHKERRQ (ierr);
1207
1176
1208
- /* Hessian */
1209
- ierr = MatCreate (sopflow->comm ->type , &sopflow->Hes );
1177
+ /* vector for constraints */
1178
+ ierr = VecCreate (sopflow->comm ->type , &sopflow->G );
1210
1179
CHKERRQ (ierr);
1211
- ierr = MatSetSizes (sopflow->Hes , sopflow->nx , sopflow->nx , sopflow->Nx ,
1212
- sopflow->Nx );
1180
+ ierr = VecSetSizes (sopflow->G , sopflow->ncon , PETSC_DECIDE);
1213
1181
CHKERRQ (ierr);
1214
- ierr = MatSetType (sopflow->Hes , MATSEQAIJ );
1182
+ ierr = VecSetFromOptions (sopflow->G );
1215
1183
CHKERRQ (ierr);
1216
- /* ierr = MatSetFromOptions (sopflow->Hes );
1184
+ ierr = VecGetSize (sopflow->G , &sopflow-> Ncon );
1217
1185
CHKERRQ (ierr);
1218
- */
1219
- /* Assume 10% sparsity */
1220
- ierr = MatSeqAIJSetPreallocation (sopflow->Hes ,
1221
- (PetscInt)(0.1 * sopflow->Nx ), NULL );
1186
+
1187
+ /* Constraint bounds vectors */
1188
+ ierr = VecDuplicate (sopflow->G , &sopflow->Gl );
1222
1189
CHKERRQ (ierr);
1223
- ierr =
1224
- MatSetOption (sopflow->Hes , MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);
1190
+ ierr = VecDuplicate (sopflow->G , &sopflow->Gu );
1225
1191
CHKERRQ (ierr);
1226
- }
1227
1192
1228
- /* Lagrangian multipliers */
1229
- ierr = VecDuplicate (sopflow->G , &sopflow->Lambda );
1230
- CHKERRQ (ierr);
1193
+ if (sopflow->comm ->size == 1 ) {
1194
+ /* Constraint Jacobian */
1195
+ ierr = MatCreate (sopflow->comm ->type , &sopflow->Jac );
1196
+ CHKERRQ (ierr);
1197
+ ierr = MatSetSizes (sopflow->Jac , sopflow->ncon , sopflow->nx , sopflow->Ncon ,
1198
+ sopflow->Nx );
1199
+ CHKERRQ (ierr);
1200
+ // ierr = MatSetFromOptions(sopflow->Jac);
1201
+ // CHKERRQ(ierr);
1202
+ ierr = MatSetType (sopflow->Jac , MATSEQAIJ);
1203
+ CHKERRQ (ierr);
1204
+ /* Assume 10% sparsity */
1205
+ ierr = MatSeqAIJSetPreallocation (sopflow->Jac ,
1206
+ (PetscInt)(0.1 * sopflow->Nx ), NULL );
1207
+ CHKERRQ (ierr);
1208
+ ierr =
1209
+ MatSetOption (sopflow->Jac , MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);
1210
+ CHKERRQ (ierr);
1211
+
1212
+ /* Hessian */
1213
+ ierr = MatCreate (sopflow->comm ->type , &sopflow->Hes );
1214
+ CHKERRQ (ierr);
1215
+ ierr = MatSetSizes (sopflow->Hes , sopflow->nx , sopflow->nx , sopflow->Nx ,
1216
+ sopflow->Nx );
1217
+ CHKERRQ (ierr);
1218
+ ierr = MatSetType (sopflow->Hes , MATSEQAIJ);
1219
+ CHKERRQ (ierr);
1220
+ /* ierr = MatSetFromOptions(sopflow->Hes);
1221
+ CHKERRQ(ierr);
1222
+ */
1223
+ /* Assume 10% sparsity */
1224
+ ierr = MatSeqAIJSetPreallocation (sopflow->Hes ,
1225
+ (PetscInt)(0.1 * sopflow->Nx ), NULL );
1226
+ CHKERRQ (ierr);
1227
+ ierr =
1228
+ MatSetOption (sopflow->Hes , MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);
1229
+ CHKERRQ (ierr);
1230
+ }
1231
+
1232
+ /* Lagrangian multipliers */
1233
+ ierr = VecDuplicate (sopflow->G , &sopflow->Lambda );
1234
+ CHKERRQ (ierr);
1235
+ }
1231
1236
1232
1237
ierr = (*sopflow->solverops .setup )(sopflow);
1233
1238
CHKERRQ (ierr);
@@ -1245,18 +1250,17 @@ PetscErrorCode SOPFLOWSetUp(SOPFLOW sopflow) {
1245
1250
*/
1246
1251
PetscErrorCode SOPFLOWSolve (SOPFLOW sopflow) {
1247
1252
PetscErrorCode ierr;
1248
- PetscBool issolver_ipopt;
1249
1253
1250
1254
PetscFunctionBegin;
1251
1255
1252
1256
if (!sopflow->setupcalled ) {
1253
1257
ierr = SOPFLOWSetUp (sopflow);
1254
1258
}
1255
1259
1256
- ierr = PetscStrcmp (sopflow->solvername , " IPOPT" , &issolver_ipopt);
1260
+ ierr = PetscStrcmp (sopflow->solvername , " IPOPT" , &sopflow-> issolver_ipopt );
1257
1261
CHKERRQ (ierr);
1258
1262
1259
- if (issolver_ipopt) {
1263
+ if (sopflow-> issolver_ipopt ) {
1260
1264
/* Set bounds on variables */
1261
1265
if (sopflow->modelops .setvariablebounds ) {
1262
1266
ierr = (*sopflow->modelops .setvariablebounds )(sopflow, sopflow->Xl ,
0 commit comments