xref: /petsc/src/tao/constrained/impls/admm/ftn-custom/zadmmf.c (revision 19caf8f3c08b1f0ca9f5469bde385c134aa76c82)
16285c0a3SHansol  Suh #include <petsc/private/fortranimpl.h>
26285c0a3SHansol  Suh #include <petsc/private/f90impl.h>
36285c0a3SHansol  Suh #include <petsc/private/taoimpl.h>
46285c0a3SHansol  Suh 
56285c0a3SHansol  Suh #if defined(PETSC_HAVE_FORTRAN_CAPS)
66285c0a3SHansol  Suh #define taoadmmsetmisfitobjectiveandgradientroutine_       TAOADMMSETMISFITOBJECTIVEANDGRADIENTROUTINE
76285c0a3SHansol  Suh #define taoadmmsetmisfithessianroutine_                    TAOADMMSETMISFITHESSIANROUTINE
86285c0a3SHansol  Suh #define taoadmmsetmisfitconstraintjacobian_                TAOADMMSETMISFITCONSTRAINTJACOBIAN
96285c0a3SHansol  Suh #define taoadmmsetregularizerobjectiveandgradientroutine_  TAOADMMSETREGULARIZEROBJECTIVEANDGRADIENTROUTINE
106285c0a3SHansol  Suh #define taoadmmsetregularizerhessianroutine_               TAOADMMSETREGULARIZERHESSIANROUTINE
116285c0a3SHansol  Suh #define taoadmmsetregularizerconstraintjacobian_           TAOADMMSETREGULARIZERCONSTRAINTJACOBIAN
126285c0a3SHansol  Suh #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
136285c0a3SHansol  Suh #define taoadmmsetmisfitobjectiveandgradientroutine_       taoadmmsetmisfitobjectiveandgradientroutine
146285c0a3SHansol  Suh #define taoadmmsetmisfithessianroutine_                    taoadmmsetmisfithessianroutine
156285c0a3SHansol  Suh #define taoadmmsetmisfitconstraintjacobian_                taoadmmsetmisfitconstraintjacobian
166285c0a3SHansol  Suh #define taoadmmsetregularizerobjectiveandgradientroutine_  taoadmmsetregularizerobjectiveandgradientroutine
176285c0a3SHansol  Suh #define taoadmmsetregularizerhessianroutine_               taoadmmsetregularizerhessianroutine
186285c0a3SHansol  Suh #define taoadmmsetregularizerconstraintjacobian_           taoadmmsetregularizerconstraintjacobian
196285c0a3SHansol  Suh #endif
206285c0a3SHansol  Suh 
216285c0a3SHansol  Suh static struct {
226285c0a3SHansol  Suh   PetscFortranCallbackId misfitobjgrad;
236285c0a3SHansol  Suh   PetscFortranCallbackId misfithess;
246285c0a3SHansol  Suh   PetscFortranCallbackId misfitjacobian;
256285c0a3SHansol  Suh   PetscFortranCallbackId regobjgrad;
266285c0a3SHansol  Suh   PetscFortranCallbackId reghess;
276285c0a3SHansol  Suh   PetscFortranCallbackId regjacobian;
286285c0a3SHansol  Suh } _cb;
296285c0a3SHansol  Suh 
306285c0a3SHansol  Suh static PetscErrorCode ourtaoadmmmisfitobjgradroutine(Tao tao, Vec x, PetscReal *f, Vec g, void* ctx)
316285c0a3SHansol  Suh {
326285c0a3SHansol  Suh     PetscObjectUseFortranCallback(tao,_cb.misfitobjgrad,(Tao*,Vec*,PetscReal*,Vec*,void*,PetscErrorCode*),(&tao,&x,f,&g,_ctx,&ierr));
336285c0a3SHansol  Suh }
346285c0a3SHansol  Suh 
356285c0a3SHansol  Suh static PetscErrorCode ourtaoadmmmisfithessroutine(Tao tao, Vec x, Mat H, Mat Hpre, void *ctx)
366285c0a3SHansol  Suh {
376285c0a3SHansol  Suh     PetscObjectUseFortranCallback(tao,_cb.misfithess,(Tao*,Vec*,Mat*,Mat*,void*,PetscErrorCode*),(&tao,&x,&H,&Hpre,_ctx,&ierr));
386285c0a3SHansol  Suh }
396285c0a3SHansol  Suh 
406285c0a3SHansol  Suh static PetscErrorCode ourtaoadmmmisfitconstraintjacobian(Tao tao, Vec x, Mat J, Mat Jpre, void *ctx)
416285c0a3SHansol  Suh {
426285c0a3SHansol  Suh     PetscObjectUseFortranCallback(tao,_cb.misfitjacobian,(Tao*,Vec*,Mat*,Mat*,void*,PetscErrorCode*),(&tao,&x,&J,&Jpre,_ctx,&ierr));
436285c0a3SHansol  Suh }
446285c0a3SHansol  Suh 
456285c0a3SHansol  Suh static PetscErrorCode ourtaoadmmregularizerobjgradroutine(Tao tao, Vec x, PetscReal *f, Vec g, void* ctx)
466285c0a3SHansol  Suh {
476285c0a3SHansol  Suh     PetscObjectUseFortranCallback(tao,_cb.regobjgrad,(Tao*,Vec*,PetscReal*,Vec*,void*,PetscErrorCode*),(&tao,&x,f,&g,_ctx,&ierr));
486285c0a3SHansol  Suh }
496285c0a3SHansol  Suh 
506285c0a3SHansol  Suh static PetscErrorCode ourtaoadmmregularizerhessroutine(Tao tao, Vec x, Mat H, Mat Hpre, void *ctx)
516285c0a3SHansol  Suh {
526285c0a3SHansol  Suh     PetscObjectUseFortranCallback(tao,_cb.reghess,(Tao*,Vec*,Mat*,Mat*,void*,PetscErrorCode*),(&tao,&x,&H,&Hpre,_ctx,&ierr));
536285c0a3SHansol  Suh }
546285c0a3SHansol  Suh 
556285c0a3SHansol  Suh static PetscErrorCode ourtaoadmmregularizerconstraintjacobian(Tao tao, Vec x, Mat J, Mat Jpre, void *ctx)
566285c0a3SHansol  Suh {
576285c0a3SHansol  Suh     PetscObjectUseFortranCallback(tao,_cb.regjacobian,(Tao*,Vec*,Mat*,Mat*,void*,PetscErrorCode*),(&tao,&x,&J,&Jpre,_ctx,&ierr));
586285c0a3SHansol  Suh }
596285c0a3SHansol  Suh 
60*19caf8f3SSatish Balay PETSC_EXTERN void taoadmmsetmisfitobjectiveandgradientroutine_(Tao *tao, void (*func)(Tao*, Vec *, PetscReal *, Vec *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
616285c0a3SHansol  Suh {
626285c0a3SHansol  Suh     CHKFORTRANNULLFUNCTION(func);
636285c0a3SHansol  Suh     *ierr = PetscObjectSetFortranCallback((PetscObject)*tao,PETSC_FORTRAN_CALLBACK_CLASS,&_cb.misfitobjgrad,(PetscVoidFunction)func,ctx);
646285c0a3SHansol  Suh     if(!*ierr) *ierr = TaoADMMSetMisfitObjectiveAndGradientRoutine(*tao,ourtaoadmmmisfitobjgradroutine,ctx);
656285c0a3SHansol  Suh }
666285c0a3SHansol  Suh 
67*19caf8f3SSatish Balay PETSC_EXTERN void taoadmmsetmisfithessianroutine_(Tao *tao, Mat *H, Mat *Hpre, void (*func)(Tao*, Vec *, Mat *, Mat *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
686285c0a3SHansol  Suh {
696285c0a3SHansol  Suh     CHKFORTRANNULLFUNCTION(func);
706285c0a3SHansol  Suh     *ierr = PetscObjectSetFortranCallback((PetscObject)*tao,PETSC_FORTRAN_CALLBACK_CLASS,&_cb.misfithess,(PetscVoidFunction)func,ctx);
716285c0a3SHansol  Suh     if(!*ierr) *ierr = TaoADMMSetMisfitHessianRoutine(*tao,*H,*Hpre,ourtaoadmmmisfithessroutine,ctx);
726285c0a3SHansol  Suh }
736285c0a3SHansol  Suh 
74*19caf8f3SSatish Balay PETSC_EXTERN void taoadmmsetmisfitconstraintjacobian_(Tao *tao, Mat *J, Mat *Jpre, void (*func)(Tao*, Vec *, Mat *, Mat *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
756285c0a3SHansol  Suh {
766285c0a3SHansol  Suh     CHKFORTRANNULLFUNCTION(func);
776285c0a3SHansol  Suh     *ierr = PetscObjectSetFortranCallback((PetscObject)*tao,PETSC_FORTRAN_CALLBACK_CLASS,&_cb.misfitjacobian,(PetscVoidFunction)func,ctx);
786285c0a3SHansol  Suh     if(!*ierr) *ierr = TaoADMMSetMisfitConstraintJacobian(*tao,*J,*Jpre, ourtaoadmmmisfitconstraintjacobian,ctx);
796285c0a3SHansol  Suh }
806285c0a3SHansol  Suh 
81*19caf8f3SSatish Balay PETSC_EXTERN void taoadmmsetregularizerobjectiveandgradientroutine_(Tao *tao, void (*func)(Tao*, Vec *, PetscReal *, Vec *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
826285c0a3SHansol  Suh {
836285c0a3SHansol  Suh     CHKFORTRANNULLFUNCTION(func);
846285c0a3SHansol  Suh     *ierr = PetscObjectSetFortranCallback((PetscObject)*tao,PETSC_FORTRAN_CALLBACK_CLASS,&_cb.regobjgrad,(PetscVoidFunction)func,ctx);
856285c0a3SHansol  Suh     if(!*ierr) *ierr = TaoADMMSetRegularizerObjectiveAndGradientRoutine(*tao,ourtaoadmmregularizerobjgradroutine,ctx);
866285c0a3SHansol  Suh }
876285c0a3SHansol  Suh 
88*19caf8f3SSatish Balay PETSC_EXTERN void taoadmmsetregularizerhessianroutine_(Tao *tao, Mat *H, Mat *Hpre, void (*func)(Tao*, Vec *, Mat *, Mat *,void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
896285c0a3SHansol  Suh {
906285c0a3SHansol  Suh     CHKFORTRANNULLFUNCTION(func);
916285c0a3SHansol  Suh     *ierr = PetscObjectSetFortranCallback((PetscObject)*tao,PETSC_FORTRAN_CALLBACK_CLASS,&_cb.reghess,(PetscVoidFunction)func,ctx);
926285c0a3SHansol  Suh     if(!*ierr) *ierr = TaoADMMSetRegularizerHessianRoutine(*tao,*H,*Hpre, ourtaoadmmregularizerhessroutine,ctx);
936285c0a3SHansol  Suh }
946285c0a3SHansol  Suh 
95*19caf8f3SSatish Balay PETSC_EXTERN void taoadmmsetregularizerconstraintjacobian_(Tao *tao, Mat *J, Mat *Jpre, void (*func)(Tao*, Vec *, Mat *, Mat *, void *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
966285c0a3SHansol  Suh {
976285c0a3SHansol  Suh     CHKFORTRANNULLFUNCTION(func);
986285c0a3SHansol  Suh     *ierr = PetscObjectSetFortranCallback((PetscObject)*tao,PETSC_FORTRAN_CALLBACK_CLASS,&_cb.misfitjacobian,(PetscVoidFunction)func,ctx);
996285c0a3SHansol  Suh     if(!*ierr) *ierr = TaoADMMSetRegularizerConstraintJacobian(*tao,*J,*Jpre, ourtaoadmmregularizerconstraintjacobian,ctx);
1006285c0a3SHansol  Suh }
101