[Gsll-devel] ODE apply-step: argument passing problem
Liam Healy
lhealy at common-lisp.net
Tue Dec 1 00:06:03 UTC 2009
OK fixed, thanks for the report. You might want to return a value from
your calculation, viz.
(let ((time 0d0)
(delta-t 0.1d0)
(stepper-type +step-rk2+))
(let ((stepper (make-ode-stepper stepper-type 2 #'sin-ode #'sin-ode-jacobian))
(dep (make-marray 'double-float :dimensions 2))
(dydt-in (make-marray 'double-float :dimensions 2))
(dydt-out (make-marray 'double-float :dimensions 2))
(yerr (make-marray 'double-float :dimensions 2)))
(setf (maref dep 0) 0d0
(maref dep 1) 1d0)
(dotimes (i 10)
(incf time delta-t)
(apply-step stepper time dep delta-t yerr dydt-in dydt-out))
dep))
Liam
On Mon, Nov 30, 2009 at 8:30 AM, Mirko Vukovic <mirko.vukovic at gmail.com> wrote:
> Hi,
>
> I am trying to solve a second order ODE by calling a stepper for a number of
> fixed-size steps. I am getting an error about conversion to foreign type
> c-pointer.
>
> I modeled my call to `apply-step' based on `apply-evolution'. Looking at
> the source files, that is likely not to work because `apply-evolution' uses
> c-pointers, and `apply-step' makes direct variable references. But I don't
> know how to deal with those - my C and CFFI knowledge are non-existent.
>
> Anyway, here is a sample code that I hope someone can improve:
>
> ;;;; Example of a simple time-stepper
> (defun sin-ode (time y z)
> "Define ODE for a sinusoid
>
> y''=-y
>
> or as a system:
>
> y'=z
> z'=-y
>
> with initial conditions:
>
> y0=0
> z0=1 "
> (declare (ignore time))
> (values z (- y)))
>
> (defun sin-ode-jacobian (time y z)
> (declare (ignore time y z))
> (values 0d0 0d0
> 0d0 1d0
> -1d0 0d0))
> #|
> (let ((time 0d0)
> (delta-t 0.1d0)
> (stepper-type +step-rk2+))
> (let ((stepper (make-ode-stepper stepper-type 2 #'sin-ode
> #'sin-ode-jacobian))
> (dep (make-marray 'double-float :dimensions 2))
> (dydt-in (make-marray 'double-float :dimensions 2))
> (dydt-out (make-marray 'double-float :dimensions 2))
> (yerr (make-marray 'double-float :dimensions 2)))
> (setf (maref dep 0) 0d0
> (maref dep 1) 1d0)
> (dotimes (i 10)
> (incf time delta-t)
> (apply-step stepper time dep delta-t yerr dydt-in dydt-out))))
>
> |#
>
> BTW, once this is working, I will submit it as a patch to the
> ode-examples.lisp file
>
> Thanks,
>
> Mirko
>
> _______________________________________________
> Gsll-devel mailing list
> Gsll-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/gsll-devel
>
>
More information about the gsll-devel
mailing list