@@ -106,38 +106,44 @@ PetscErrorCode SOPFLOWCreate(MPI_Comm mpicomm, SOPFLOW *sopflowout) {
106
106
PetscErrorCode SOPFLOWDestroy (SOPFLOW *sopflow) {
107
107
PetscErrorCode ierr;
108
108
PetscInt s, i;
109
+ PetscBool issopflowsolveripopt;
109
110
110
111
PetscFunctionBegin;
111
112
112
- /* Solution vector */
113
- ierr = VecDestroy (&(*sopflow)->X );
114
- CHKERRQ (ierr);
115
- ierr = VecDestroy (&(*sopflow)->gradobj );
113
+ ierr = PetscStrcmp ((*sopflow)->solvername , " IPOPT" , &issopflowsolveripopt);
116
114
CHKERRQ (ierr);
117
115
118
- /* Lower and upper bounds on X */
119
- ierr = VecDestroy (&(*sopflow)->Xl );
120
- CHKERRQ (ierr);
121
- ierr = VecDestroy (&(*sopflow)->Xu );
122
- CHKERRQ (ierr);
116
+ if (issopflowsolveripopt) {
117
+ /* Solution vector */
118
+ ierr = VecDestroy (&(*sopflow)->X );
119
+ CHKERRQ (ierr);
120
+ ierr = VecDestroy (&(*sopflow)->gradobj );
121
+ CHKERRQ (ierr);
123
122
124
- /* Constraints vector */
125
- ierr = VecDestroy (&(*sopflow)->G );
126
- CHKERRQ (ierr);
123
+ /* Lower and upper bounds on X */
124
+ ierr = VecDestroy (&(*sopflow)->Xl );
125
+ CHKERRQ (ierr);
126
+ ierr = VecDestroy (&(*sopflow)->Xu );
127
+ CHKERRQ (ierr);
127
128
128
- ierr = VecDestroy (&(*sopflow)->Gl );
129
- CHKERRQ (ierr);
130
- ierr = VecDestroy (&(*sopflow)->Gu );
131
- CHKERRQ (ierr);
132
- ierr = VecDestroy (&(*sopflow)->Lambda );
133
- CHKERRQ (ierr);
129
+ /* Constraints vector */
130
+ ierr = VecDestroy (&(*sopflow)->G );
131
+ CHKERRQ (ierr);
134
132
135
- /* Jacobian of constraints and Hessian */
136
- if ((*sopflow)->comm ->size == 1 ) {
137
- ierr = MatDestroy (&(*sopflow)->Jac );
133
+ ierr = VecDestroy (&(*sopflow)->Gl );
138
134
CHKERRQ (ierr);
139
- ierr = MatDestroy (&(*sopflow)->Hes );
135
+ ierr = VecDestroy (&(*sopflow)->Gu );
140
136
CHKERRQ (ierr);
137
+ ierr = VecDestroy (&(*sopflow)->Lambda );
138
+ CHKERRQ (ierr);
139
+
140
+ /* Jacobian of constraints and Hessian */
141
+ if ((*sopflow)->comm ->size == 1 ) {
142
+ ierr = MatDestroy (&(*sopflow)->Jac );
143
+ CHKERRQ (ierr);
144
+ ierr = MatDestroy (&(*sopflow)->Hes );
145
+ CHKERRQ (ierr);
146
+ }
141
147
}
142
148
143
149
if ((*sopflow)->solverops .destroy ) {
@@ -579,6 +585,7 @@ PetscErrorCode SOPFLOWSetUp(SOPFLOW sopflow) {
579
585
PetscBool flgctgc = PETSC_FALSE;
580
586
PetscBool flgwindgen = PETSC_FALSE;
581
587
PetscBool issopflowsolverhiop;
588
+ PetscBool issopflowsolveripopt;
582
589
PetscBool flg;
583
590
584
591
char opflowmodelname[max_model_name_len];
@@ -893,6 +900,8 @@ PetscErrorCode SOPFLOWSetUp(SOPFLOW sopflow) {
893
900
894
901
ierr = PetscStrcmp (sopflow->solvername , " HIOP" , &issopflowsolverhiop);
895
902
CHKERRQ (ierr);
903
+ ierr = PetscStrcmp (sopflow->solvername , " IPOPT" , &issopflowsolveripopt);
904
+ CHKERRQ (ierr);
896
905
897
906
if (!sopflow->ismulticontingency ) {
898
907
@@ -1153,81 +1162,83 @@ PetscErrorCode SOPFLOWSetUp(SOPFLOW sopflow) {
1153
1162
}
1154
1163
}
1155
1164
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 );
1165
+ if (issopflowsolveripopt) {
1166
+ /* Create vector X */
1167
+ ierr = VecCreate (sopflow->comm ->type , &sopflow->X );
1168
+ CHKERRQ (ierr);
1169
+ ierr = VecSetSizes (sopflow->X , sopflow->nx , PETSC_DECIDE);
1192
1170
CHKERRQ (ierr);
1193
- ierr = MatSetSizes (sopflow->Jac , sopflow->ncon , sopflow->nx , sopflow->Ncon ,
1194
- sopflow->Nx );
1171
+ ierr = VecSetFromOptions (sopflow->X );
1195
1172
CHKERRQ (ierr);
1196
- // ierr = MatSetFromOptions(sopflow->Jac);
1197
- // CHKERRQ(ierr);
1198
- ierr = MatSetType (sopflow->Jac , MATSEQAIJ);
1173
+ ierr = VecGetSize (sopflow->X , &sopflow->Nx );
1174
+ CHKERRQ (ierr);
1175
+
1176
+ ierr = VecDuplicate (sopflow->X , &sopflow->Xl );
1199
1177
CHKERRQ (ierr);
1200
- /* Assume 10% sparsity */
1201
- ierr = MatSeqAIJSetPreallocation (sopflow->Jac ,
1202
- (PetscInt)(0.1 * sopflow->Nx ), NULL );
1178
+ ierr = VecDuplicate (sopflow->X , &sopflow->Xu );
1203
1179
CHKERRQ (ierr);
1204
- ierr =
1205
- MatSetOption (sopflow->Jac , MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);
1180
+ ierr = VecDuplicate (sopflow->X , &sopflow->gradobj );
1206
1181
CHKERRQ (ierr);
1207
1182
1208
- /* Hessian */
1209
- ierr = MatCreate (sopflow->comm ->type , &sopflow->Hes );
1183
+ /* vector for constraints */
1184
+ ierr = VecCreate (sopflow->comm ->type , &sopflow->G );
1210
1185
CHKERRQ (ierr);
1211
- ierr = MatSetSizes (sopflow->Hes , sopflow->nx , sopflow->nx , sopflow->Nx ,
1212
- sopflow->Nx );
1186
+ ierr = VecSetSizes (sopflow->G , sopflow->ncon , PETSC_DECIDE);
1213
1187
CHKERRQ (ierr);
1214
- ierr = MatSetType (sopflow->Hes , MATSEQAIJ );
1188
+ ierr = VecSetFromOptions (sopflow->G );
1215
1189
CHKERRQ (ierr);
1216
- /* ierr = MatSetFromOptions (sopflow->Hes );
1190
+ ierr = VecGetSize (sopflow->G , &sopflow-> Ncon );
1217
1191
CHKERRQ (ierr);
1218
- */
1219
- /* Assume 10% sparsity */
1220
- ierr = MatSeqAIJSetPreallocation (sopflow->Hes ,
1221
- (PetscInt)(0.1 * sopflow->Nx ), NULL );
1192
+
1193
+ /* Constraint bounds vectors */
1194
+ ierr = VecDuplicate (sopflow->G , &sopflow->Gl );
1222
1195
CHKERRQ (ierr);
1223
- ierr =
1224
- MatSetOption (sopflow->Hes , MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);
1196
+ ierr = VecDuplicate (sopflow->G , &sopflow->Gu );
1225
1197
CHKERRQ (ierr);
1226
- }
1227
1198
1228
- /* Lagrangian multipliers */
1229
- ierr = VecDuplicate (sopflow->G , &sopflow->Lambda );
1230
- CHKERRQ (ierr);
1199
+ if (sopflow->comm ->size == 1 ) {
1200
+ /* Constraint Jacobian */
1201
+ ierr = MatCreate (sopflow->comm ->type , &sopflow->Jac );
1202
+ CHKERRQ (ierr);
1203
+ ierr = MatSetSizes (sopflow->Jac , sopflow->ncon , sopflow->nx , sopflow->Ncon ,
1204
+ sopflow->Nx );
1205
+ CHKERRQ (ierr);
1206
+ // ierr = MatSetFromOptions(sopflow->Jac);
1207
+ // CHKERRQ(ierr);
1208
+ ierr = MatSetType (sopflow->Jac , MATSEQAIJ);
1209
+ CHKERRQ (ierr);
1210
+ /* Assume 10% sparsity */
1211
+ ierr = MatSeqAIJSetPreallocation (sopflow->Jac ,
1212
+ (PetscInt)(0.1 * sopflow->Nx ), NULL );
1213
+ CHKERRQ (ierr);
1214
+ ierr =
1215
+ MatSetOption (sopflow->Jac , MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);
1216
+ CHKERRQ (ierr);
1217
+
1218
+ /* Hessian */
1219
+ ierr = MatCreate (sopflow->comm ->type , &sopflow->Hes );
1220
+ CHKERRQ (ierr);
1221
+ ierr = MatSetSizes (sopflow->Hes , sopflow->nx , sopflow->nx , sopflow->Nx ,
1222
+ sopflow->Nx );
1223
+ CHKERRQ (ierr);
1224
+ ierr = MatSetType (sopflow->Hes , MATSEQAIJ);
1225
+ CHKERRQ (ierr);
1226
+ /* ierr = MatSetFromOptions(sopflow->Hes);
1227
+ CHKERRQ(ierr);
1228
+ */
1229
+ /* Assume 10% sparsity */
1230
+ ierr = MatSeqAIJSetPreallocation (sopflow->Hes ,
1231
+ (PetscInt)(0.1 * sopflow->Nx ), NULL );
1232
+ CHKERRQ (ierr);
1233
+ ierr =
1234
+ MatSetOption (sopflow->Hes , MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);
1235
+ CHKERRQ (ierr);
1236
+ }
1237
+
1238
+ /* Lagrangian multipliers */
1239
+ ierr = VecDuplicate (sopflow->G , &sopflow->Lambda );
1240
+ CHKERRQ (ierr);
1241
+ }
1231
1242
1232
1243
ierr = (*sopflow->solverops .setup )(sopflow);
1233
1244
CHKERRQ (ierr);
0 commit comments