SNESDMDASNESSetFunctionLocal in Fortran
Hey there, I'm having a problem with the DMDASNESSetFunctionLocal() function in C and its Fortran counterpart. The thing is, in C, you can pass a bunch of variables using the ctx parameter, but in Fortran, it only seems to accept one variable. What's weird is that the SNESSetFunction() function has a similar ctx parameter, but in Fortran, it can handle multiple variables for ctx, unlike DMDASNESSetFunctionLocal(). Do you know if this is on purpose, or am I missing something? Thanks in advance! Best regards, Khaled
On Sun, May 14, 2023 at 12:06 PM Khaled Nabil Shar Abdelaziz < [email protected]> wrote:
Hey there,
I'm having a problem with the DMDASNESSetFunctionLocal() function in C and its Fortran counterpart. The thing is, in C, you can pass a bunch of variables using the ctx parameter, but in Fortran, it only seems to accept one variable.
What's weird is that the SNESSetFunction() function has a similar ctx parameter, but in Fortran, it can handle multiple variables for ctx, unlike DMDASNESSetFunctionLocal(). Do you know if this is on purpose, or am I missing something?
I think we show how to do this here: https://gitlab.com/petsc/petsc/-/blob/main/src/snes/tutorials/ex5f90t.F90 Thanks, Matt
Thanks in advance!
Best regards,
Khaled
-- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
This is very useful! I was more focused on my search for an example with DMDASNES example instead of ctx. I guess from the looks of it, I can pass it directly in the ctx argument or I can pass the pointer using the interfaces defined in the referenced code you provided, correct? Another question I had is that functions has to be defined as external? Is that a general case? Or is it just when the subroutine is defined elsewhere so I have to define it as external. Because now when the solver calls the FormFunction, a NULL is being passed and I can’t access the x or F vectors. Thank you for your patience! I am still new to PETSc and learning how to use it. From: Matthew Knepley <[email protected]> Sent: Sunday, May 14, 2023 12:24 PM To: Khaled Nabil Shar Abdelaziz <[email protected]> Cc: [email protected] Subject: Re: [petsc-users] SNESDMDASNESSetFunctionLocal in Fortran ---- External Email: Use caution with attachments, links, or sharing data ---- On Sun, May 14, 2023 at 12:06 PM Khaled Nabil Shar Abdelaziz <[email protected]<mailto:[email protected]>> wrote: Hey there, I'm having a problem with the DMDASNESSetFunctionLocal() function in C and its Fortran counterpart. The thing is, in C, you can pass a bunch of variables using the ctx parameter, but in Fortran, it only seems to accept one variable. What's weird is that the SNESSetFunction() function has a similar ctx parameter, but in Fortran, it can handle multiple variables for ctx, unlike DMDASNESSetFunctionLocal(). Do you know if this is on purpose, or am I missing something? I think we show how to do this here: https://gitlab.com/petsc/petsc/-/blob/main/src/snes/tutorials/ex5f90t.F90 Thanks, Matt Thanks in advance! Best regards, Khaled -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/<http://www.cse.buffalo.edu/~knepley/>
On Tue, May 16, 2023 at 8:07 PM Khaled Nabil Shar Abdelaziz < [email protected]> wrote:
This is very useful! I was more focused on my search for an example with DMDASNES example instead of ctx.
I guess from the looks of it, I can pass it directly in the ctx argument or I can pass the pointer using the interfaces defined in the referenced code you provided, correct?
Yes.
Another question I had is that functions has to be defined as external? Is that a general case? Or is it just when the subroutine is defined elsewhere so I have to define it as external. Because now when the solver calls the FormFunction, a NULL is being passed and I can’t access the x or F vectors.
The symbol has to be exposed by the linker, so most times (unless everything is in the same file), it needs to be external. Thanks, Matt
Thank you for your patience! I am still new to PETSc and learning how to use it.
*From:* Matthew Knepley <[email protected]> *Sent:* Sunday, May 14, 2023 12:24 PM *To:* Khaled Nabil Shar Abdelaziz <[email protected]> *Cc:* [email protected] *Subject:* Re: [petsc-users] SNESDMDASNESSetFunctionLocal in Fortran
---- *External Email*: Use caution with attachments, links, or sharing data ----
On Sun, May 14, 2023 at 12:06 PM Khaled Nabil Shar Abdelaziz < [email protected]> wrote:
Hey there,
I'm having a problem with the DMDASNESSetFunctionLocal() function in C and its Fortran counterpart. The thing is, in C, you can pass a bunch of variables using the ctx parameter, but in Fortran, it only seems to accept one variable.
What's weird is that the SNESSetFunction() function has a similar ctx parameter, but in Fortran, it can handle multiple variables for ctx, unlike DMDASNESSetFunctionLocal(). Do you know if this is on purpose, or am I missing something?
I think we show how to do this here:
https://gitlab.com/petsc/petsc/-/blob/main/src/snes/tutorials/ex5f90t.F90
Thanks,
Matt
Thanks in advance!
Best regards,
Khaled
--
What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener
https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
participants (2)
-
Khaled Nabil Shar Abdelaziz -
Matthew Knepley