32 INTEGER,
INTENT (INOUT) :: ifail
46 REAL (R8) :: rho(
solver%nrho)
51 REAL (R8) :: yp(
solver%nrho)
52 REAL (R8) :: dy(
solver%nrho)
53 REAL (R8) :: d2y(
solver%nrho)
58 REAL (R8) :: g(
solver%nrho), h
61 REAL (R8) :: v(2), u(2), w(2)
66 REAL (R8) :: mata_in(
solver%nrho,1,1), matb_in(
solver%nrho,1,1)
67 REAL (R8) :: matc_in(
solver%nrho,1), matd_in(
solver%nrho,1)
68 REAL (R8) :: t0_in(2,1,3), t1_in(2,1,3)
69 REAL (R8) :: v0_in(2,1), v1_in(2,1)
71 REAL (R8) :: dt_in, dx_in, sca_f_in
73 REAL (R8) :: rhomax, rhomax2, pi2, pi
74 INTEGER :: ipsi, nbrho, mode_in
79 REAL (R8) :: x(
solver%nrho)
81 REAL (R8) :: sol(
solver%nrho)
82 REAL (R8) :: dsol(
solver%nrho)
85 REAL (R8) :: cs(
solver%nrho)
87 REAL (R8) :: vs(2), us(2), ws(2)
103 write(*,*)
'inside solution_cronos, nrho=',nrho,
' ndim=',ndim
107 equation_loop1:
DO idim = 1, ndim
109 flag =
solver%EQ_FLAG(idim)
112 IF (flag.EQ.0) goto 20
125 rho_loop1:
DO irho=1,nrho
126 rho(irho) =
solver%RHO(irho)
128 y(irho) =
solver%Y(idim,irho)
129 dy(irho) =
solver%DY(idim,irho)
130 ym(irho) =
solver%YM(idim,irho)
132 a(irho) =
solver%A(idim,irho)
133 b(irho) =
solver%B(idim,irho)
134 c(irho) =
solver%C(idim,irho)
135 d(irho) =
solver%D(idim,irho)
136 e(irho) =
solver%E(idim,irho)
137 f(irho) =
solver%F(idim,irho)
138 g(irho) =
solver%G(idim,irho)
144 rhomax2 = rhomax*rhomax
146 write(*,*)
'rhomax=',rhomax,nrho,rhomax2,pi2
149 rho_loop2:
DO irho=1,nrho
150 write(*,*)
'irho=',irho,a(irho),d(irho),c(irho)
151 write(*,*)
'log(D)',dlog(d(irho))
152 ajj(irho) = d(irho) / c(irho) / a(irho) / rhomax2
153 ecronos(irho) = dlog(4*pi2*d(irho))
154 write(*,*)
'ECRONOS=',ecronos(irho)
158 write(*,*)
'AJJ(nrho)=',ajj(nrho)
159 CALL
derivn1(nrho,rho,ecronos,decronos)
161 rho_loop3:
DO irho=1,nrho
163 bjj(irho) = ajj(irho) * decronos(irho)
165 djj(irho) = -f(irho) / 2 / pi / a(irho)
175 mata_in(irho,1,1)=ajj(irho)
176 matb_in(irho,ipsi,ipsi)=bjj(irho)
177 matd_in(irho,ipsi) = djj(irho)
178 matc_in(irho,ipsi) = 0
186 write(*,*)
'apres remplissage mata, w=',w
211 call cos_pde1solver(y,yp, &
212 mata_in,matb_in,matc_in,matd_in, &
213 mata_in,matb_in,matc_in,matd_in, &
214 nrho,nbeq,nbeq,dx_in,dt_in,sca_f_in, &
215 t0_in,t1_in,v0_in,v1_in,mode_in,dy,d2y)
225 solver%Y(idim,irho) = yp(irho)
226 solver%DY(idim,irho) = dy(irho)
235 END DO equation_loop1
258 integer,
intent(in) :: nbrho
259 real(DP),
dimension(nbrho) :: e
267 if ( (abs(e(1)).gt.huge(e(1))) .or. (abs(e(1)).eq.0) )
then
268 e(1) = (61.0_8/46.0_8) * e(2) - (9.0_8/23.0_8) * e(3) + (3.0_8/46.0_8) * e(4)
277 module cos_transportdata
279 integer :: dimk,dimm,dimmat,dimbb,dimn
280 real(kind=8),
dimension(:,:),
pointer :: f,fp,dfpdx,dfpdx2
281 real(kind=8),
dimension(:,:),
allocatable :: matd,matdp
282 real(kind=8),
dimension(:,:,:),
pointer :: t0,t1
283 real(kind=8),
dimension(:,:,:),
allocatable :: mata,matb,matc, &
285 real(kind=8),
dimension(:,:),
pointer :: v0,v1
286 integer,
dimension(:),
allocatable :: mode
288 real(kind=8),
dimension(:,:),
allocatable :: mats
289 real(kind=8),
dimension(:,:),
allocatable :: matu,matv,matw,matx,maty,matz
290 real(kind=8),
dimension(:),
allocatable,
target:: mat_coo,mat_csr
291 real(kind=8),
dimension(:),
allocatable,
target:: vectbb
292 integer,
dimension(:),
allocatable,
target :: cooi,cooj,csri,csrj
293 real(kind=8),
pointer:: dx,dt,sca_f
294 integer :: verbose = 0
295 end module cos_transportdata
296 module cos_pde1dsolver_interface
298 subroutine cos_pde1solver(f_in,fp_in, &
299 mata_in,matb_in,matc_in,matd_in, &
300 matap_in,matbp_in,matcp_in,matdp_in, &
301 dimk_in,dimn_in,dimm_in,dx_in,dt_in,sca_f_in, &
302 t0_in,t1_in,v0_in,v1_in,mode_in,dfpdx_in,dfpdx2_in)
303 use cos_transportdata
305 integer,
intent(in) :: dimk_in,dimn_in,dimm_in
306 real(kind=8),
intent(in),
target :: dt_in,dx_in,sca_f_in
307 real(kind=8),
dimension(dimk_in,dimm_in),
target :: f_in,fp_in
308 real(kind=8),
dimension(dimk_in,dimm_in),
target,
optional:: dfpdx_in,dfpdx2_in
309 real(kind=8),
dimension(dimk_in,dimm_in),
target :: matd_in,matdp_in
310 real(kind=8),
dimension(dimk_in,dimm_in,dimm_in),
target :: mata_in,matb_in,matc_in, &
311 matap_in,matbp_in,matcp_in
312 real(kind=8),
dimension(2,dimm_in,3),
target :: t0_in,t1_in
313 real(kind=8),
dimension(2,dimm_in),
target :: v0_in,v1_in
314 real(kind=8),
dimension(dimm_in) :: mode_in
315 end subroutine cos_pde1solver
317 end module cos_pde1dsolver_interface
319 subroutine cos_pde1solver(f_in,fp_in, &
320 mata_in,matb_in,matc_in,matd_in, &
321 matap_in,matbp_in,matcp_in,matdp_in, &
322 dimk_in,dimn_in,dimm_in,dx_in,dt_in,sca_f_in, &
323 t0_in,t1_in,v0_in,v1_in,mode_in,dfpdx_in,dfpdx2_in)
387 use cos_transportdata
389 integer,
intent(in) :: dimk_in,dimn_in,dimm_in
390 real(kind=8),
intent(in),
target :: dt_in,dx_in,sca_f_in
391 real(kind=8),
dimension(dimk_in,dimm_in),
target :: f_in,fp_in
392 real(kind=8),
dimension(dimk_in,dimm_in),
target,
optional:: dfpdx_in,dfpdx2_in
393 real(kind=8),
dimension(dimk_in,dimm_in),
target :: matd_in,matdp_in
394 real(kind=8),
dimension(dimk_in,dimm_in,dimm_in),
target :: mata_in,matb_in,matc_in, &
395 matap_in,matbp_in,matcp_in
396 real(kind=8),
dimension(2,dimm_in,3),
target :: t0_in,t1_in
397 real(kind=8),
dimension(2,dimm_in),
target :: v0_in,v1_in
399 real(kind=8),
dimension(:,:,:),
allocatable :: mat_aux
401 real(kind=8),
dimension(dimm_in) :: mode_in
402 integer,
dimension(:),
allocatable :: iwk,cooi_aux
404 real(kind=8) :: dtx2,dt2x,aux
406 integer :: counteri,counterj,counter
407 integer :: interpretatif=0,condlim=0
410 integer function condlimord2_k1(interpretatif)
411 integer,
intent(in) :: interpretatif
412 end function condlimord2_k1
414 integer function condlimord2_kk(interpretatif)
415 integer,
intent(in) :: interpretatif
416 end function condlimord2_kk
420 write(*,*)
'dans solver',sca_f_in
421 if (sca_f_in==1.0)
then
422 print*,
"Error, the explicit Euler algorithm must not be used"
437 if (present(dfpdx_in)) dfpdx=>dfpdx_in
438 if (present(dfpdx2_in)) dfpdx2=>dfpdx2_in
439 allocate(mata(dimk_in,dimm_in,dimm_in),matb(dimk_in,dimm_in,dimm_in),&
440 matc(dimk_in,dimm_in,dimm_in),matd(dimk_in,dimm_in) )
441 allocate(matap(dimk_in,dimm_in,dimm_in),matbp(dimk_in,dimm_in,dimm_in),&
442 matcp(dimk_in,dimm_in,dimm_in),matdp(dimk_in,dimm_in) )
443 allocate(mode(dimm_in))
461 allocate(mats(dimk,dimm))
462 allocate(matu(2,dimm),matv(2,dimm),matw(2,dimm))
463 allocate(matx(2,dimm),maty(2,dimm),matz(2,dimm))
464 allocate(mat_aux(dimk,dimm,dimm))
466 dimmat=(dimk-2)*dimn*dimn*3 +4*dimn*dimn
468 allocate(vectbb(dimbb),mat_coo(dimmat),cooi(dimmat),cooj(dimmat))
473 interpretatif=sum(mode)
474 if (interpretatif.ne.0) interpretatif=1
477 write(*,*)
'dtx2=',dtx2
479 matb = -2.0_8*dtx2*mata + dt*matc
480 matc = dtx2*mata + dt2x*mat_aux
481 mata = dtx2*mata - dt2x*mat_aux
485 matbp = -2.0_8*dtx2*matap + dt*matcp
486 matcp = dtx2*matap + dt2x*mat_aux
487 matap = dtx2*matap - dt2x*mat_aux
492 mats = sca_f*matd + (1.0_8-sca_f)*matdp + f;
497 condlim=sum(t0(:,:,3))
498 if ( condlimord2_k1(interpretatif) > 0)
then
500 print*,
" boundaries condition of order 2 is not implemented"
508 condlim=sum(t1(:,:,3))
509 if ( condlimord2_kk(interpretatif) > 0)
then
511 print*,
" boundaries condition of order 2 is not implemented"
523 write(*,*)
'dimm=',dimm
525 if (mode(m)==1) cycle
529 mats(k,m)=mats(k,m) + sca_f*(mata(k,n,m)*f(k-1,n)+matb(k,n,m)*f(k,n)+matc(k,n,m)*f(k+1,n)) &
530 + (1.0_8-sca_f)*(matap(k,n,m)*fp(k-1,n)+matbp(k,n,m)*fp(k,n)+matcp(k,n,m)*fp(k+1,n))
545 vectbb(counter) = mats(k,m)
548 vectbb(counter) = vectbb(counter) + sca_f*(matb(k,n,m)*f(k,n) + matc(k,n,m)*f(k+1,n))
559 vectbb(counter) = mats(k,m)
562 vectbb(counter) = vectbb(counter) + sca_f*(mata(k,n,m)*f(k-1,n) + matb(k,n,m)*f(k,n) &
563 + matc(k,n,m)*f(k+1,n))
575 vectbb(counter) = mats(k,m)
578 vectbb(counter) = vectbb(counter) + sca_f*(mata(k,n,m)*f(k-1,n) + matb(k,n,m)*f(k,n))
591 write(*,*)
'counter=',counter
592 call build_matcoo(matbp,1,k,counter,counteri,counterj)
595 call build_matcoo(matcp,0,k,counter,counteri,counterj)
599 call build_matcoo(matap,0,k,counter,counteri,counterj)
602 call build_matcoo(matbp,1,k,counter,counteri,counterj)
605 call build_matcoo(matcp,0,k,counter,counteri,counterj)
610 call build_matcoo(matap,0,k,counter,counteri,counterj)
613 call build_matcoo(matbp,1,k,counter,counteri,counterj)
618 print*,
"dimk",dimk,dimn,dimm,counter
619 allocate(iwk(dimbb+1),cooi_aux(dimmat))
620 allocate(mat_csr(dimmat),csri(dimmat),csrj(dimmat))
624 print*,
"SPARSE BIG MATRIX:"
646 fp(k,m) = vectbb(counter)
663 if (verbose > 0)
then
671 deallocate(matu,matv,matw,matx,maty,matz,mats)
672 deallocate(mata,matb,matc,matd,matap,matbp,matcp,matdp)
675 deallocate(mat_coo,cooi,cooj,vectbb)
677 deallocate(mat_coo,cooi,cooj,vectbb,iwk,cooi_aux,mat_csr,csri,csrj)
684 end subroutine cos_pde1solver
686 subroutine build_matcoo(matp,option,k,counter,counteri,counterj)
687 use cos_transportdata
689 integer,
intent(in) :: option,k
690 integer,
intent(inout) :: counter,counteri,counterj
691 integer :: counteri_aux,counterj_aux
692 real(kind=8),
dimension(dimk,dimm,dimm) :: matp
696 counteri_aux=counteri
697 counterj_aux=counterj
702 counterj=counterj_aux
707 if (counteri==counterj)
then
708 mat_coo(counter)=1.0_8-(1.0_8-sca_f)*matp(k,n,m)
710 mat_coo(counter)=-(1.0_8-sca_f)*matp(k,n,m)
712 if (mat_coo(counter)==0.0)
then
716 cooi(counter)=counteri
717 cooj(counter)=counterj
724 end subroutine build_matcoo
726 subroutine solvepde1d
727 use cos_transportdata
730 include
'dmumps_struc.h'
731 type(dmumps_struc
) :: mumps_par
736 mumps_par%COMM = mpi_comm_world
742 call dmumps(mumps_par)
745 IF ( mumps_par%MYID .eq. 0 )
THEN
747 mumps_par%N = dimk*dimn
749 mumps_par%NZ = dimmat
765 mumps_par%RHS=>vectbb
767 if (verbose <= 1)
then
779 CALL dmumps(mumps_par)
781 IF ( mumps_par%MYID .eq. 0 .and. verbose > 1)
THEN
782 WRITE( 6, * )
' MUMPS Solution is ',(mumps_par%RHS(i),i=1,mumps_par%N)
786 IF ( mumps_par%MYID .eq. 0 )
THEN
794 CALL dmumps(mumps_par)
795 CALL mpi_finalize(ierr)
796 end subroutine solvepde1d
798 integer function condlimord2_k1(interpretatif)
804 use cos_transportdata
807 integer,
intent(in) :: interpretatif
808 integer :: dirichlet=0,neumann=0,m,i
813 matu = t0(:,:,3)/(dx*dx) + t0(:,:,2) / (2.0_8*dx)
814 matv = t0(:,:,1) - 2.0_8*t0(:,:,3) / (dx*dx)
815 matw = t0(:,:,3)/(dx*dx) - t0(:,:,2) / (2.0_8*dx)
818 if (mode(m)==1) cycle
819 if (abs(matw(1,m))>1e-16)
then
820 if (verbose>1) print*,
"cond1 k=1 m=",m
822 if (interpretatif==1.or.dirichlet==1)
then
823 if (verbose>1) print*,
"boundary conditions not compatible"
827 if (abs(matv(1,m))>1e-16)
then
828 if (verbose>1) print*,
"cond2 k=1 m=",m
831 if (verbose>1) print*,
"boundary conditions not compatible"
835 if (verbose>1) print*,
"boundary conditions not supported"
840 if (abs(matw(2,m))>1e-16)
then
841 if (verbose>1) print*,
"cond1p k=1 m=",m
843 if (interpretatif==1.or.dirichlet==1)
then
844 if (verbose>1) print*,
"boundary conditions not compatible"
848 if (abs(matv(2,m))>1e-16)
then
849 if (verbose>1) print*,
"cond2p k=1 m=",m
852 if (verbose>1) print*,
"boundary conditions not compatible"
856 if (verbose>1) print*,
"boundary conditions not supported"
862 if (interpretatif==1) condlimord2_k1=1
864 if (condlimord2_k1 .ne. 0)
return
867 if (mode(m)==1) cycle
868 if (abs(matw(1,m))>1e-16)
then
869 matu(1,m) = - matu(1,m)/matw(1,m)
870 matv(1,m) = - matv(1,m)/matw(1,m)
871 matw(1,m) = v0(1,m) /matw(1,m)
873 matb(1,m,i) = matb(1,m,i) + matv(1,m)*mata(1,m,i)
874 matc(1,m,i) = matc(1,m,i) + matu(1,m)*mata(1,m,i)
875 mats(1,m) = mats(1,m) + sca_f*matw(1,m)*mata(1,m,i)
879 matx(1,m) = -matu(1,m)/matv(1,m)
880 maty(1,m) = v0(1,m) /matv(1,m)
885 matb(2,m,i) = matb(2,m,i) + matx(1,m)*mata(2,m,i)
886 mats(2,i) = mats(2,i) + sca_f*maty(1,m)*mata(2,m,i)
891 if (abs(matw(2,m))>1e-16)
then
892 matu(2,m) = - matu(2,m)/matw(2,m)
893 matv(2,m) = - matv(2,m)/matw(2,m)
894 matw(2,m) = v0(2,m) /matw(2,m)
896 matbp(1,m,i) = matbp(1,m,i) + matv(2,m)*matap(1,m,i)
897 matcp(1,m,i) = matcp(1,m,i) + matu(2,m)*matap(1,m,i)
898 mats(1,i) = mats(1,i) + (1.0_8-sca_f)*matw(2,m)*matap(1,m,i)
902 matx(2,m) = -matu(2,m)/matv(2,m)
903 maty(2,m) = v0(2,m) /matv(2,m)
906 matcp(1,m,m) = matx(2,m)/(1.0_8 - sca_f)
907 mats(1,m) = maty(2,m)
909 matbp(2,m,i) = matbp(2,m,i) + matx(2,m)*matap(2,m,i)
910 mats(2,i) = mats(2,i) + (1.0_8-sca_f)*maty(2,m)*matap(2,m,i)
916 end function condlimord2_k1
918 integer function condlimord2_kk(interpretatif)
924 use cos_transportdata
927 integer,
intent(in) :: interpretatif
928 integer :: dirichlet=0,neumann=0,m,i
933 matu = t1(:,:,3)/(dx*dx) + t1(:,:,2) / (2.0_8*dx)
934 matv = t1(:,:,1) - 2.0_8*t1(:,:,3) / (dx*dx)
935 matw = t1(:,:,3)/(dx*dx) - t1(:,:,2) / (2.0_8*dx)
938 if (mode(m)==1) cycle
939 if (abs(matu(1,m))>1e-16)
then
940 if (verbose>1) print*,
"cond1 k=dimk m=",m
942 if (interpretatif==1.or.dirichlet==1)
then
943 if (verbose>1) print*,
"boundary conditions not compatible"
947 if (abs(matv(1,m))>1e-16)
then
948 if (verbose>1) print*,
"cond2 k=dimk m=",m
951 if (verbose>1) print*,
"boundary conditions not compatible"
955 if (verbose>1) print*,
"bondary conditions not supported"
959 if (abs(matu(2,m))>1e-16)
then
960 if (verbose>1) print*,
"cond1p k=dimk m=",m
962 if (interpretatif==1.or.dirichlet==1)
then
963 if (verbose>1) print*,
"boundary conditions not compatible"
967 if (abs(matv(2,m))>1e-16)
then
968 if (verbose>1) print*,
"cond2p k=dimk m=",m
970 if (verbose>1) print*,
"boundary conditions not compatible"
974 if (verbose>1) print*,
"boundary conditions not supported"
979 if (interpretatif==1) condlimord2_kk=1
981 if (condlimord2_kk.ne.0)
return
984 if (mode(m)==1) cycle
985 if (abs(matu(1,m))>1e-16)
then
987 matu(1,m) = - matw(1,m)/aux
988 matv(1,m) = - matv(1,m)/aux
989 matw(1,m) = v1(1,m) /aux
991 matb(dimk,m,i) = matb(dimk,m,i) + matv(1,m)*matc(dimk,m,i)
992 mata(dimk,m,i) = mata(dimk,m,i) + matu(1,m)*matc(dimk,m,i)
993 mats(dimk,i) = mats(dimk,i) + sca_f*matw(1,m)*matc(dimk,m,i)
997 matx(1,m) = -matw(1,m)/matv(1,m)
998 maty(1,m) = v1(1,m) /matv(1,m)
999 mata(dimk,:,m) = 0.0_8
1000 matb(dimk,:,m) = 0.0_8
1001 mats(dimk,m) = 0.0_8
1003 matb(dimk-1,m,i) = matb(dimk-1,m,i) + matx(1,m)*matc(dimk-1,m,i)
1004 mats(dimk-1,i) = mats(dimk-1,i) + sca_f*maty(1,m)*matc(dimk-1,m,i)
1006 matc(dimk-1,m,:) = 0.0_8
1008 if (abs(matu(2,m))>1e-16)
then
1010 matu(2,m) = - matw(2,m)/aux
1011 matv(2,m) = - matv(2,m)/aux
1012 matw(2,m) = v1(2,m) /aux
1014 matbp(dimk,m,i) = matbp(dimk,m,i) + matv(2,m)*matcp(dimk,m,i)
1015 matap(dimk,m,i) = matap(dimk,m,i) + matu(2,m)*matcp(dimk,m,i)
1016 mats(dimk,i) = mats(dimk,i) + (1.0_8-sca_f)*matw(2,m)*matcp(dimk,m,i)
1020 matx(2,m) = -matw(2,m)/matv(2,m)
1021 maty(2,m) = v1(2,m) /matv(2,m)
1022 matap(dimk,:,m) = 0.0_8
1023 matap(dimk,m,m) = matx(2,m)/(1.0_8 - sca_f)
1024 matbp(dimk,:,m) = 0.0_8
1025 mats(dimk,m) = maty(2,m)
1027 matbp(dimk-1,m,i) = matbp(dimk-1,m,i) + matx(2,m)*matcp(dimk-1,m,i)
1028 mats(dimk-1,i) = mats(dimk-1,i) + (1.0_8-sca_f)*maty(2,m)*matcp(dimk-1,m,i)
1030 matcp(dimk-1,m,:) = 0.0_8
1034 end function condlimord2_kk
1036 subroutine condlimord1_k1
1041 use cos_transportdata
1048 matv = t0(:,:,1)*dx - t0(:,:,2)
1050 print*,
"dx",dx,t0(2,1,1), t0(2,1,2)
1051 print*,
"matv",matv(2,1)
1054 if (mode(m)==1) cycle
1055 matx(1,m) = -matu(1,m)/matv(1,m)
1056 maty(1,m) = maty(1,m)/matv(1,m)
1061 matb(2,m,i) = matb(2,m,i) + matx(1,m)*mata(2,m,i)
1062 mats(2,i) = mats(2,i) + sca_f*maty(1,m)*mata(2,m,i)
1065 if (abs(matv(2,m))>1e-16)
then
1066 matx(2,m) = -matu(2,m)/matv(2,m)
1067 maty(2,m) = maty(2,m)/matv(2,m)
1068 matbp(1,:,m) = 0.0_8
1069 matcp(1,:,m) = 0.0_8
1070 matcp(1,m,m) = matx(2,m)/(1.0_8 - sca_f)
1071 mats(1,m) = maty(2,m)
1073 matbp(2,m,i) = matbp(2,m,i) + matx(2,m)*matap(2,m,i)
1074 mats(2,i) = mats(2,i) + (1.0_8-sca_f)*maty(2,m)*matap(2,m,i)
1076 matap(2,m,:) = 0.0_8
1078 print*,
"Boundaries conditions error",matv(2,m)
1081 end subroutine condlimord1_k1
1083 subroutine condlimord1_kk
1088 use cos_transportdata
1094 matv = t1(:,:,2) + dx*t1(:,:,1)
1099 if (mode(m)==1) cycle
1100 matx(1,m) = -matw(1,m)/matv(1,m)
1101 maty(1,m) = maty(1,m)/matv(1,m)
1102 mata(dimk,:,m) = 0.0_8
1103 matb(dimk,:,m) = 0.0_8
1104 mats(dimk,m) = 0.0_8
1106 matb(dimk-1,m,i) = matb(dimk-1,m,i) + matx(1,m)*matc(dimk-1,m,i)
1107 mats(dimk-1,i) = mats(dimk-1,i) + sca_f*maty(1,m)*matc(dimk-1,m,i)
1109 matc(dimk-1,m,:) = 0.0_8
1110 if (abs(matv(2,m))>1e-16)
then
1111 matx(2,m) = -matw(2,m)/matv(2,m)
1112 maty(2,m) = maty(2,m)/matv(2,m)
1113 matap(dimk,:,m) = 0.0_8
1114 matap(dimk,m,m) = matx(2,m)/(1.0_8 - sca_f)
1115 matbp(dimk,:,m) = 0.0_8
1116 mats(dimk,m) = maty(2,m)
1118 matbp(dimk-1,m,i) = matbp(dimk-1,m,i) + matx(2,m)*matcp(dimk-1,m,i)
1119 mats(dimk-1,i) = mats(dimk-1,i) + (1.0_8-sca_f)*maty(2,m)*matcp(dimk-1,m,i)
1121 matcp(dimk-1,m,:) = 0.0_8
1123 print*,
"Boundaries conditions error",matv(2,m)
1127 end subroutine condlimord1_kk
subroutine derivn1(N, X, Y, DY1)
These subroutines calculate first and second derivatives, DY1 and DY2, of function Y respect to argum...
subroutine solution_cronos(SOLVER, ifail)
This subroutine is prepared to solve single transport equation in standardised form adopted by the ET...
subroutine cos_zconversion(e, nbrho)