MadNLP / DynamicNLPModels.jl

NLPModels for dynamic optimization
MIT License
11 stars 1 forks source link

Replace `_build_*` by `_set_*!` #19

Open sshin23 opened 2 years ago

sshin23 commented 2 years ago

Currently, we have many functions named _bulid_*. These functions create a block of matrix needed for formulating sparse/dense LQ dynamic problems. However, creating arrays in these functions can later cause issue when we want to extend these to GPU arrays. I suggest doing the following.

All the arrays are created in _build_sparse_lq_dynamic_model and _build_dense_lq_dynamic_model. For the rest of _build_* functions, we create the array in _build_*_lq_dynamic_model, and only update its entries in _set_*!. Ideally, each _set_*! functions should be non-allocating.

dlcole3 commented 2 years ago

@sshin23 In the case of some functions (like _build_H_blocks), I initialize arrays for mul! and axpy!. Is there a way to avoid this memory allocation without defining the arrays outside of the function?

sshin23 commented 2 years ago

you can create all of them outside of _build_H_blocks. But let's worry about this later