1 #ifndef DOXYGEN_SHOULD_SKIP_THIS
31 module sll_m_poisson_2d_mudpack_curvilinear_old
33 #include "sll_memory.h"
34 #include "sll_working_precision.h"
57 use sll_m_mudpack_curvilinear,
only: &
58 sll_p_non_separable_with_cross_terms, &
59 sll_p_non_separable_without_cross_terms
68 sll_f_new_poisson_2d_mudpack_curvilinear_old
77 sll_real64,
dimension(:, :),
pointer :: cxx_2d
78 sll_real64,
dimension(:, :),
pointer :: cxy_2d
79 sll_real64,
dimension(:, :),
pointer :: cyy_2d
80 sll_real64,
dimension(:, :),
pointer :: cx_2d
81 sll_real64,
dimension(:, :),
pointer :: cy_2d
82 sll_real64,
dimension(:, :),
pointer :: ce_2d
83 sll_real64,
dimension(:, :),
pointer :: rho
84 class(sll_c_interpolator_2d),
pointer :: cxx_2d_interp
85 class(sll_c_interpolator_2d),
pointer :: cyy_2d_interp
86 class(sll_c_interpolator_2d),
pointer :: cxy_2d_interp
87 class(sll_c_interpolator_2d),
pointer :: cx_2d_interp
88 class(sll_c_interpolator_2d),
pointer :: cy_2d_interp
89 class(sll_c_interpolator_2d),
pointer :: ce_2d_interp
90 class(sll_c_interpolator_2d),
pointer :: a11_interp
91 class(sll_c_interpolator_2d),
pointer :: a22_interp
92 class(sll_c_interpolator_2d),
pointer :: a12_interp
93 class(sll_c_interpolator_2d),
pointer :: a21_interp
94 class(sll_c_coordinate_transformation_2d_base),
pointer :: transformation
95 sll_int32 :: mudpack_curvilinear_case
96 sll_real64,
dimension(:),
pointer :: work
103 procedure, pass(poisson) :: initialize => &
104 initialize_poisson_2d_mudpack_curvilinear_old
105 procedure, pass(poisson) :: compute_phi_from_rho => &
106 compute_phi_from_rho_2d_mudpack_curvilinear
107 procedure, pass(poisson) :: compute_E_from_rho => &
108 compute_e_from_rho_2d_mudpack_curvilinear
114 l2norm_squared => l2norm_squarred_2d_mudpack_curvilinear
117 compute_rhs_from_function => compute_rhs_from_function_2d_mudpack_curvilinear
119 procedure :: free => delete_2d_mudpack_curvilinear_solver
121 end type poisson_2d_mudpack_curvilinear_old
123 class(poisson_2d_mudpack_curvilinear_old),
pointer :: mudpack_curvilinear_wrapper => null()
126 function sll_f_new_poisson_2d_mudpack_curvilinear_old( &
145 mudpack_curvilinear_case) &
148 type(poisson_2d_mudpack_curvilinear_old),
pointer :: poisson
149 sll_real64,
intent(in) :: eta1_min
150 sll_real64,
intent(in) :: eta1_max
151 sll_int32,
intent(in) :: nc_eta1
152 sll_real64,
intent(in) :: eta2_min
153 sll_real64,
intent(in) :: eta2_max
154 sll_int32,
intent(in) :: nc_eta2
155 sll_int32,
intent(in) :: bc_eta1_left
156 sll_int32,
intent(in) :: bc_eta1_right
157 sll_int32,
intent(in) :: bc_eta2_left
158 sll_int32,
intent(in) :: bc_eta2_right
159 sll_int32,
intent(in) :: bc_interp2d_eta1
160 sll_int32,
intent(in) :: bc_interp2d_eta2
161 sll_int32,
intent(in),
optional :: mudpack_curvilinear_case
162 sll_real64,
dimension(:, :),
intent(in) :: b11
163 sll_real64,
dimension(:, :),
intent(in) :: b12
164 sll_real64,
dimension(:, :),
intent(in) :: b21
165 sll_real64,
dimension(:, :),
intent(in) :: b22
166 sll_real64,
dimension(:, :),
intent(in) :: c
167 class(sll_c_coordinate_transformation_2d_base),
pointer,
intent(in) :: transf
171 sll_allocate(poisson, ierr)
173 call initialize_poisson_2d_mudpack_curvilinear_old( &
193 mudpack_curvilinear_case)
195 end function sll_f_new_poisson_2d_mudpack_curvilinear_old
197 subroutine initialize_poisson_2d_mudpack_curvilinear_old( &
217 mudpack_curvilinear_case)
218 class(poisson_2d_mudpack_curvilinear_old),
target :: poisson
219 sll_real64,
intent(in) :: eta1_min
220 sll_real64,
intent(in) :: eta1_max
221 sll_int32,
intent(in) :: nc_eta1
222 sll_real64,
intent(in) :: eta2_min
223 sll_real64,
intent(in) :: eta2_max
224 sll_int32,
intent(in) :: nc_eta2
225 sll_int32,
intent(in) :: bc_eta1_left
226 sll_int32,
intent(in) :: bc_eta1_right
227 sll_int32,
intent(in) :: bc_eta2_left
228 sll_int32,
intent(in) :: bc_eta2_right
229 sll_int32,
intent(in) :: bc_interp2d_eta1
230 sll_int32,
intent(in) :: bc_interp2d_eta2
231 sll_int32,
intent(in),
optional :: mudpack_curvilinear_case
232 sll_real64,
dimension(:, :),
intent(in) :: b11
233 sll_real64,
dimension(:, :),
intent(in) :: b12
234 sll_real64,
dimension(:, :),
intent(in) :: b21
235 sll_real64,
dimension(:, :),
intent(in) :: b22
236 sll_real64,
dimension(:, :),
intent(in) :: c
237 class(sll_c_coordinate_transformation_2d_base),
pointer :: transf
238 sll_real64,
dimension(:, :),
allocatable :: a12_array
239 sll_real64,
dimension(:, :),
allocatable :: a21_array
242 sll_int32,
parameter :: iixp = 2, jjyq = 2
243 sll_int32 :: icall, iiex, jjey, llwork
244 sll_real64,
pointer :: phi(:)
245 sll_real64,
pointer :: rhs(:)
248 sll_int32 :: iprm(16)
249 sll_real64 :: fprm(6)
252 sll_int32 :: intl, nxa, nxb, nyc, nyd, ixp, jyq, iex, jey, nx, ny
253 sll_int32 :: iguess, maxcy, method, nwork, lwrkqd, itero
254 common/itmud2sp/intl, nxa, nxb, nyc, nyd, ixp, jyq, iex, jey, nx, ny, &
255 iguess, maxcy, method, nwork, lwrkqd, itero
256 sll_real64 :: xa, xb, yc, yd, tolmax, relmax
257 common/ftmud2sp/xa, xb, yc, yd, tolmax, relmax
258 equivalence(intl, iprm)
259 equivalence(xa, fprm)
262 sll_real64 :: delta1, delta2
267 allocate (phi(nx*ny))
268 allocate (rhs(nx*ny))
270 delta1 = (eta1_max - eta1_min)/real(nc_eta1, f64)
271 delta2 = (eta2_max - eta2_min)/real(nc_eta2, f64)
273 llwork = (7*(nx + 2)*(ny + 2) + 44*nx*ny)/3
275 allocate (poisson%work(llwork))
277 iiex = ceiling(log((nx - 1.)/iixp)/log(2.)) + 1
278 jjey = ceiling(log((ny - 1.)/jjyq)/log(2.)) + 1
295 nx = ixp*(2**(iex - 1)) + 1
296 ny = jyq*(2**(jey - 1)) + 1
298 if (nx /= nc_eta1 + 1 .or. ny /= nc_eta2 + 1)
then
299 print *,
"nx,nc_eta1+1=", nx, nc_eta1 + 1
300 print *,
"ny,nc_eta2+1=", ny, nc_eta2 + 1
301 stop
' nx or ny different in sll_mudpack_curvilinear_cartesian '
316 iguess = poisson%iguess
339 if (
present(mudpack_curvilinear_case))
then
340 poisson%mudpack_curvilinear_case = mudpack_curvilinear_case
342 poisson%mudpack_curvilinear_case = sll_p_non_separable_with_cross_terms
344 poisson%transformation => transf
345 poisson%cxx_2d_interp => null()
346 poisson%cyy_2d_interp => null()
347 poisson%cx_2d_interp => null()
348 poisson%cy_2d_interp => null()
349 poisson%ce_2d_interp => null()
350 poisson%a12_interp => null()
351 poisson%a21_interp => null()
352 sll_allocate(poisson%rho(nc_eta1 + 1, nc_eta2 + 1), ierr)
354 sll_allocate(poisson%cxx_2d(nc_eta1 + 1, nc_eta2 + 1), ierr)
356 sll_allocate(poisson%cyy_2d(nc_eta1 + 1, nc_eta2 + 1), ierr)
357 sll_allocate(poisson%cx_2d(nc_eta1 + 1, nc_eta2 + 1), ierr)
358 sll_allocate(poisson%cy_2d(nc_eta1 + 1, nc_eta2 + 1), ierr)
359 sll_allocate(poisson%ce_2d(nc_eta1 + 1, nc_eta2 + 1), ierr)
379 sll_allocate(a12_array(nx, ny), ierr)
380 sll_allocate(a21_array(nx, ny), ierr)
381 call a12_a21_array(b11, b12, b21, b22, transf, eta1_min, &
382 eta2_min, delta1, delta2, nx, ny, a12_array, a21_array)
383 call poisson%a12_interp%compute_interpolants(a12_array)
384 call poisson%a21_interp%compute_interpolants(a21_array)
404 call coefxxyy_array(b11, b12, b21, b22, transf, eta1_min, eta2_min, &
405 delta1, delta2, nx, ny, poisson%cxx_2d, poisson%cyy_2d)
406 call poisson%cxx_2d_interp%compute_interpolants(poisson%cxx_2d)
407 call poisson%cyy_2d_interp%compute_interpolants(poisson%cyy_2d)
418 call coefx_array(eta1_min, eta2_min, delta1, delta2, nx, ny, &
419 poisson%cxx_2d_interp, poisson%a21_interp, poisson%cx_2d)
420 call poisson%cx_2d_interp%compute_interpolants(poisson%cx_2d)
431 call coefy_array(eta1_min, eta2_min, delta1, delta2, nx, ny, &
432 poisson%cyy_2d_interp, poisson%a12_interp, poisson%cy_2d)
433 call poisson%cy_2d_interp%compute_interpolants(poisson%cy_2d)
445 call poisson%ce_2d_interp%compute_interpolants(poisson%ce_2d)
448 select case (poisson%mudpack_curvilinear_case)
450 case (sll_p_non_separable_without_cross_terms)
451 if (
associated(mudpack_curvilinear_wrapper))
then
452 print *,
'#Problem mudpack_curvilinear_wrapper is not null()'
455 call associate_poisson(poisson)
456 call mud2(iprm, fprm, poisson%work, &
457 mudpack_curvilinear_cof, &
458 mudpack_curvilinear_bndcr, &
463 mudpack_curvilinear_wrapper => null()
465 case (sll_p_non_separable_with_cross_terms)
466 sll_allocate(poisson%cxy_2d(nc_eta1 + 1, nc_eta2 + 1), ierr)
476 call coefxy_array(b11, b12, b21, b22, transf, eta1_min, eta2_min, &
477 delta1, delta2, nx, ny, poisson%cxy_2d)
478 call poisson%cxy_2d_interp%compute_interpolants(poisson%cxy_2d)
479 if (
associated(mudpack_curvilinear_wrapper))
then
480 print *,
'#Problem mudpack_curvilinear_wrapper is not null()'
483 call associate_poisson(poisson)
484 call mud2cr(iprm, fprm, poisson%work, &
485 mudpack_curvilinear_cofcr, &
486 mudpack_curvilinear_bndcr, &
491 mudpack_curvilinear_wrapper => null()
493 print *,
'#bad mudpack_curvilinear_case', poisson%mudpack_curvilinear_case
494 print *,
'#in subroutine initialize_poisson_2d_mudpack_curvilinear_old'
498 end subroutine initialize_poisson_2d_mudpack_curvilinear_old
501 subroutine compute_phi_from_rho_2d_mudpack_curvilinear(poisson, phi, rho)
502 class(poisson_2d_mudpack_curvilinear_old) :: poisson
503 sll_real64,
dimension(:, :),
intent(in) :: rho
504 sll_real64,
dimension(:, :),
intent(out) :: phi
507 sll_real64 :: eta1_min
508 sll_real64 :: eta2_min
509 sll_real64 :: delta_eta1
510 sll_real64 :: delta_eta2
519 sll_int32 :: iprm(16)
520 sll_real64 :: fprm(6)
522 sll_int32 :: intl, nxa, nxb, nyc, nyd, ixp, jyq, iex, jey, nx, ny
523 sll_int32 :: iguess, maxcy, method, nwork, lwrkqd, itero
525 common/itmud2sp/intl, nxa, nxb, nyc, nyd, ixp, jyq, iex, jey, nx, ny, &
526 iguess, maxcy, method, nwork, lwrkqd, itero
527 sll_real64 :: xa, xb, yc, yd, tolmax, relmax
528 common/ftmud2sp/xa, xb, yc, yd, tolmax, relmax
530 equivalence(intl, iprm)
531 equivalence(xa, fprm)
535 iguess = poisson%iguess
541 associate(mesh => poisson%transformation%mesh)
543 nc_eta1 = mesh%num_cells1
544 nc_eta2 = mesh%num_cells2
545 eta1_min = mesh%eta1_min
546 eta2_min = mesh%eta2_min
547 delta_eta1 = mesh%delta_eta1
548 delta_eta2 = mesh%delta_eta2
552 poisson%rho(1:nc_eta1 + 1, 1:nc_eta2 + 1) = 0._f64
553 do i2 = 1, nc_eta2 + 1
554 eta2 = eta2_min + real(i2 - 1, f64)*delta_eta2
555 do i1 = 1, nc_eta1 + 1
556 eta1 = eta1_min + real(i1 - 1, f64)*delta_eta1
557 poisson%rho(i1, i2) = -rho(i1, i2)*poisson%transformation%jacobian(eta1, eta2)
561 if (nxa == sll_p_dirichlet)
then
562 do i2 = 1, nc_eta2 + 1
566 if (nxb == sll_p_dirichlet)
then
567 do i2 = 1, nc_eta2 + 1
568 phi(nc_eta1 + 1, i2) = 0._f64
571 if (nyc == sll_p_dirichlet)
then
572 do i1 = 1, nc_eta1 + 1
576 if (nyd == sll_p_dirichlet)
then
577 do i1 = 1, nc_eta1 + 1
578 phi(i1, nc_eta2 + 1) = 0._f64
582 select case (poisson%mudpack_curvilinear_case)
584 case (sll_p_non_separable_without_cross_terms)
585 if (
associated(mudpack_curvilinear_wrapper))
then
586 print *,
'#Problem mudpack_curvilinear_wrapper is not null()'
589 call associate_poisson(poisson)
593 mudpack_curvilinear_cof, &
594 mudpack_curvilinear_bndcr, &
600 if (error > 0) stop 0
603 call mud24(poisson%work, phi, error)
605 if (error > 0) stop 0
606 mudpack_curvilinear_wrapper => null()
608 case (sll_p_non_separable_with_cross_terms)
609 if (
associated(mudpack_curvilinear_wrapper))
then
610 print *,
'#Problem mudpack_curvilinear_wrapper is not null()'
613 call associate_poisson(poisson)
617 mudpack_curvilinear_cofcr, &
618 mudpack_curvilinear_bndcr, &
624 if (error > 0) stop 0
627 call mud24cr(poisson%work, &
628 mudpack_curvilinear_cofcr, &
629 mudpack_curvilinear_bndcr, &
633 if (error > 0) stop 0
634 mudpack_curvilinear_wrapper => null()
637 print *,
'#bad mudpack_curvilinear_case', poisson%mudpack_curvilinear_case
638 print *,
'#in subroutine initialize_poisson_2d_mudpack_curvilinear_old'
642 end subroutine compute_phi_from_rho_2d_mudpack_curvilinear
645 subroutine compute_e_from_rho_2d_mudpack_curvilinear(poisson, E1, E2, rho)
646 class(poisson_2d_mudpack_curvilinear_old) :: poisson
647 sll_real64,
dimension(:, :),
intent(in) :: rho
648 sll_real64,
dimension(:, :),
intent(out) :: e1
649 sll_real64,
dimension(:, :),
intent(out) :: e2
651 print *,
'#compute_E_from_rho_2d_mudpack_curvilinear'
652 print *,
'#not implemented for the moment'
657 if (.not. (
associated(poisson%cxx_2d)))
then
658 print *,
'#poisson%cxx_2d is not associated'
665 end subroutine compute_e_from_rho_2d_mudpack_curvilinear
667 function l2norm_squarred_2d_mudpack_curvilinear(poisson, coefs_dofs)
result(r)
668 class(poisson_2d_mudpack_curvilinear_old),
intent(in) :: poisson
669 sll_real64,
intent(in) :: coefs_dofs(:, :)
672 print *,
'l2norm_squared not implemented for poisson_2d_mudpack_curvilinear_solver.'
675 end function l2norm_squarred_2d_mudpack_curvilinear
677 subroutine compute_rhs_from_function_2d_mudpack_curvilinear(poisson, func, coefs_dofs)
678 class(poisson_2d_mudpack_curvilinear_old) :: poisson
679 procedure(sll_i_function_of_position) :: func
680 sll_real64,
intent(out) :: coefs_dofs(:)
682 print *,
'compute_rhs_from_function not implemented for poisson_2d_mudpack_curvilinear_solver.'
684 end subroutine compute_rhs_from_function_2d_mudpack_curvilinear
686 subroutine delete_2d_mudpack_curvilinear_solver(poisson)
687 class(poisson_2d_mudpack_curvilinear_old) :: poisson
689 end subroutine delete_2d_mudpack_curvilinear_solver
691 subroutine coefxxyy_array(b11, b12, b21, b22, transf, eta1_min, eta2_min, &
692 delta1, delta2, nx, ny, cxx_array, cyy_array)
694 sll_real64 :: eta1, eta1_min, eta2_min
695 sll_real64 :: eta2, delta1, delta2
696 sll_int32 :: i, j, nx, ny
697 sll_real64,
dimension(:, :):: cxx_array, cyy_array
698 sll_real64,
dimension(1:2, 1:2) :: jac_m
699 class(sll_c_coordinate_transformation_2d_base),
pointer :: transf
700 sll_real64,
dimension(:, :) :: b11
701 sll_real64,
dimension(:, :) :: b12
702 sll_real64,
dimension(:, :) :: b21
703 sll_real64,
dimension(:, :) :: b22
706 eta2 = eta2_min + real(j - 1, f64)*delta2
708 eta1 = eta1_min + real(i - 1, f64)*delta1
709 jac_m = transf%jacobian_matrix(eta1, eta2)
710 cxx_array(i, j) = (b11(i, j)*(jac_m(1, 2)*jac_m(1, 2) + jac_m(2, 2)*jac_m(2, 2)) - &
711 & b12(i, j)*(jac_m(2, 1)*jac_m(2, 2) + jac_m(1, 1)*jac_m(1, 2))) &
712 /transf%jacobian(eta1, eta2)
713 cyy_array(i, j) = (b22(i, j)*(jac_m(2, 1)*jac_m(2, 1) + jac_m(1, 1)*jac_m(1, 1)) - &
714 & b21(i, j)*(jac_m(2, 1)*jac_m(2, 2) + jac_m(1, 1)*jac_m(1, 2))) &
715 /transf%jacobian(eta1, eta2)
718 end subroutine coefxxyy_array
720 subroutine coefxy_array(b11, b12, b21, b22, transf, eta1_min, eta2_min, &
721 delta1, delta2, nx, ny, cxy_array)
723 sll_real64 :: eta1, eta1_min, eta2_min
724 sll_real64 :: eta2, delta1, delta2
725 sll_real64 :: a12, a21
726 sll_int32 :: i, j, nx, ny
727 sll_real64,
dimension(:, :):: cxy_array
728 sll_real64,
dimension(1:2, 1:2) :: jac_m
729 class(sll_c_coordinate_transformation_2d_base),
pointer :: transf
730 sll_real64,
dimension(:, :) :: b11
731 sll_real64,
dimension(:, :) :: b12
732 sll_real64,
dimension(:, :) :: b21
733 sll_real64,
dimension(:, :) :: b22
736 eta2 = eta2_min + real(j - 1, f64)*delta2
738 eta1 = eta1_min + real(i - 1, f64)*delta1
739 jac_m = transf%jacobian_matrix(eta1, eta2)
740 a12 = b12(i, j)*(jac_m(2, 1)*jac_m(2, 1) + jac_m(1, 1)*jac_m(1, 1)) - &
741 & b11(i, j)*(jac_m(2, 1)*jac_m(2, 2) + jac_m(1, 1)*jac_m(1, 2))
743 a21 = b21(i, j)*(jac_m(1, 2)*jac_m(1, 2) + jac_m(2, 2)*jac_m(2, 2)) - &
744 & b22(i, j)*(jac_m(2, 1)*jac_m(2, 2) + jac_m(1, 1)*jac_m(1, 2))
745 cxy_array(i, j) = (a12 + a21)/transf%jacobian(eta1, eta2)
749 end subroutine coefxy_array
751 subroutine a12_a21_array(b11, b12, b21, b22, transf, eta1_min, eta2_min, delta1, delta2, nx, ny, a12_array, a21_array)
753 sll_real64 :: eta1, eta1_min, eta2_min
754 sll_real64 :: eta2, delta1, delta2
755 sll_real64 :: a12, a21
756 sll_int32 :: i, j, nx, ny
757 sll_real64,
dimension(:, :):: a12_array
758 sll_real64,
dimension(:, :):: a21_array
759 class(sll_c_coordinate_transformation_2d_base),
pointer :: transf
760 sll_real64,
dimension(:, :) :: b11
761 sll_real64,
dimension(:, :) :: b12
762 sll_real64,
dimension(:, :) :: b21
763 sll_real64,
dimension(:, :) :: b22
764 sll_real64,
dimension(1:2, 1:2) :: jac_m
767 eta2 = eta2_min + real(j - 1, f64)*delta2
769 eta1 = eta1_min + real(i - 1, f64)*delta1
770 jac_m = transf%jacobian_matrix(eta1, eta2)
771 a12 = b12(i, j)*(jac_m(2, 1)*jac_m(2, 1) + jac_m(1, 1)*jac_m(1, 1)) - &
772 & b11(i, j)*(jac_m(2, 1)*jac_m(2, 2) + jac_m(1, 1)*jac_m(1, 2))
773 a12_array(i, j) = a12/transf%jacobian(eta1, eta2)
774 a21 = b21(i, j)*(jac_m(1, 2)*jac_m(1, 2) + jac_m(2, 2)*jac_m(2, 2)) - &
775 & b22(i, j)*(jac_m(2, 1)*jac_m(2, 2) + jac_m(1, 1)*jac_m(1, 2))
776 a21_array(i, j) = a21/transf%jacobian(eta1, eta2)
779 end subroutine a12_a21_array
781 subroutine coefx_array(eta1_min, eta2_min, &
782 delta1, delta2, nx, ny, cxx_2d_interp, a21_interp, cx_array)
784 sll_real64 :: eta1, eta1_min, eta2_min
785 sll_real64 :: eta2, delta1, delta2
786 sll_int32 :: i, j, nx, ny
787 sll_real64,
dimension(:, :):: cx_array
788 class(sll_c_interpolator_2d),
pointer :: cxx_2d_interp
789 class(sll_c_interpolator_2d),
pointer :: a21_interp
792 eta2 = eta2_min + real(j - 1, f64)*delta2
794 eta1 = eta1_min + real(i - 1, f64)*delta1
795 cx_array(i, j) = cxx_2d_interp%interpolate_from_interpolant_derivative_eta1(eta1, eta2) + &
796 a21_interp%interpolate_from_interpolant_derivative_eta2(eta1, eta2)
799 end subroutine coefx_array
801 subroutine coefy_array(eta1_min, eta2_min, &
802 delta1, delta2, nx, ny, cyy_2d_interp, a12_interp, cy_array)
804 sll_real64 :: eta1, eta1_min, eta2_min
805 sll_real64 :: eta2, delta1, delta2
806 sll_int32 :: i, j, nx, ny
807 sll_real64,
dimension(:, :):: cy_array
808 class(sll_c_interpolator_2d),
pointer :: cyy_2d_interp
809 class(sll_c_interpolator_2d),
pointer :: a12_interp
812 eta2 = eta2_min + real(j - 1, f64)*delta2
814 eta1 = eta1_min + real(i - 1, f64)*delta1
815 cy_array(i, j) = cyy_2d_interp%interpolate_from_interpolant_derivative_eta2(eta1, eta2) + &
816 a12_interp%interpolate_from_interpolant_derivative_eta1(eta1, eta2)
819 end subroutine coefy_array
821 subroutine mudpack_curvilinear_cof(x, y, cxx, cyy, cx, cy, ce)
822 real(8) :: x, cxx, cx
823 real(8) :: y, cyy, cy, ce
824 cxx = mudpack_curvilinear_wrapper%cxx_2d_interp%interpolate_from_interpolant_value(x, y)
825 cyy = mudpack_curvilinear_wrapper%cyy_2d_interp%interpolate_from_interpolant_value(x, y)
826 cx = mudpack_curvilinear_wrapper%cx_2d_interp%interpolate_from_interpolant_value(x, y)
827 cy = mudpack_curvilinear_wrapper%cy_2d_interp%interpolate_from_interpolant_value(x, y)
828 ce = mudpack_curvilinear_wrapper%ce_2d_interp%interpolate_from_interpolant_value(x, y)
832 subroutine mudpack_curvilinear_cofcr(x, y, cxx, cxy, cyy, cx, cy, ce)
833 real(8) :: x, cxx, cx, cxy
834 real(8) :: y, cyy, cy, ce
835 cxx = mudpack_curvilinear_wrapper%cxx_2d_interp%interpolate_from_interpolant_value(x, y)
836 cxy = mudpack_curvilinear_wrapper%cxy_2d_interp%interpolate_from_interpolant_value(x, y)
837 cyy = mudpack_curvilinear_wrapper%cyy_2d_interp%interpolate_from_interpolant_value(x, y)
838 cx = mudpack_curvilinear_wrapper%cx_2d_interp%interpolate_from_interpolant_value(x, y)
839 cy = mudpack_curvilinear_wrapper%cy_2d_interp%interpolate_from_interpolant_value(x, y)
840 ce = mudpack_curvilinear_wrapper%ce_2d_interp%interpolate_from_interpolant_value(x, y)
846 subroutine mudpack_curvilinear_bndcr(kbdy, xory, alfa, gbdy)
848 real(8) :: xory, alfa, gbdy, x, y, pe, px, py
849 real(8) :: xa, xb, yc, yd, tolmax, relmax
850 common/ftmud2sp/xa, xb, yc, yd, tolmax, relmax
870 subroutine associate_poisson(poisson)
871 type(poisson_2d_mudpack_curvilinear_old),
target :: poisson
873 mudpack_curvilinear_wrapper => poisson
875 end subroutine associate_poisson
877 end module sll_m_poisson_2d_mudpack_curvilinear_old
879 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
Describe different boundary conditions.
Cartesian mesh basic types.
Class for the cubic spline sll_c_interpolator_2d.
type(sll_t_cubic_spline_interpolator_2d) function, pointer, public sll_f_new_cubic_spline_interpolator_2d(npts1, npts2, eta1_min, eta1_max, eta2_min, eta2_max, eta1_bc_type, eta2_bc_type, const_eta1_min_slope, const_eta1_max_slope, const_eta2_min_slope, const_eta2_max_slope, eta1_min_slopes, eta1_max_slopes, eta2_min_slopes, eta2_max_slopes)
Function that return a pointer to a cubic spline interpolator 2d object. The result can be the target...
abstract data type for 2d interpolation
Module interface to solve Poisson equation in 2D.
Base class/basic interface for 2D interpolators.