32 INTEGER,
INTENT (INOUT) :: ifail
46 REAL (R8) :: rho(
solver%nrho)
47 REAL (R8) :: rhomax, rhomax2
52 REAL (R8) :: dy(
solver%nrho)
53 REAL (R8) :: yy(
solver%nrho)
54 REAL (R8) :: dyy(
solver%nrho)
59 REAL (R8) :: g(
solver%nrho), h
62 REAL (R8) :: v(2), u(2), w(2)
69 REAL (R8) :: x(
solver%nrho)
71 REAL (R8) :: sol(
solver%nrho)
72 REAL (R8) :: dsol(
solver%nrho)
75 REAL (R8) :: cs(
solver%nrho)
82 REAL (R8) :: mata_in(
solver%nrho,1,1), matb_in(
solver%nrho,1,1)
83 REAL (R8) :: matc_in(
solver%nrho,1,1), matd_in(
solver%nrho,1)
87 integer,
parameter :: nbeq = 1
91 REAL(R8),
dimension(2,nbeq,3) :: t0_in,t1_in
92 REAL(R8),
dimension(2,nbeq) :: v0_in,v1_in
94 REAL(R8),
dimension(nbeq) :: mode_in
110 equation_loop1:
DO idim = 1, ndim
112 flag =
solver%EQ_FLAG(idim)
115 IF (flag.EQ.0) goto 20
129 rho_loop1:
DO irho=1,nrho
130 rho(irho) =
solver%RHO(irho)
132 y(irho) =
solver%Y(idim,irho)
133 dy(irho) =
solver%DY(idim,irho)
134 ym(irho) =
solver%YM(idim,irho)
136 a(irho) =
solver%A(idim,irho)
137 b(irho) =
solver%B(idim,irho)
138 c(irho) =
solver%C(idim,irho)
139 d(irho) =
solver%D(idim,irho)
140 e(irho) =
solver%E(idim,irho)
141 f(irho) =
solver%F(idim,irho)
142 g(irho) =
solver%G(idim,irho)
148 rhomax2 = rhomax*rhomax
150 CALL derivn10(nrho,rho,d,dd)
151 CALL derivn10(nrho,rho,e,de)
153 rho_loop2:
DO irho=1,nrho
155 acron(irho) = d(irho) / c(irho) / rhomax2
156 bcron(irho) = (dd(irho) / c(irho) - e(irho) / c(irho)) / rhomax
161 rho_loop3:
DO irho=1,nrho
164 ccron(irho) = -de(irho) / c(irho) - g(irho)
165 dcron(irho) = f(irho)
169 ccron = ccron + (b-a)/h
187 mata_in(1:nrho,ipsi,ipsi)=acron(1:nrho)
191 matb_in(1:nrho,ipsi,ipsi)=bcron(1:nrho)
195 matc_in(1:nrho,ipsi,ipsi) = ccron(1:nrho)
199 matd_in(1:nrho,ipsi) = dcron(1:nrho)
210 t0_in(:,1,3) = 0.e0_r8
215 t1_in(:,1,3) = 0.e0_r8
243 dx_in = 1.e0_r8/(nrho-1)
249 call cos_pde1solver(ym,yy, &
252 mata_in,matb_in,matc_in,matd_in, &
253 mata_in,matb_in,matc_in,matd_in, &
254 nrho,nbeq,nbeq,dx_in,dt_in,sca_f_in, &
255 t0_in,t1_in,v0_in,v1_in,mode_in)
257 y = y*(1.e0_r8-amix) + yy*amix
258 CALL derivn10(nrho,rho,y,dy)
280 END DO equation_loop1
306 SUBROUTINE derivn10(N,X,Y,DY1) !AF 10.Jul.2010 - this is actually the same as DERIVN1 in solver1 - should this clone remain here for independence from solver 1?
318 REAL (R8) :: h(n),dy2(n)
325 dy1(i)=((y(i+1)-y(i))*h(i-1)/h(i)+(y(i)-y(i-1))*h(i)/h(i-1)) &
327 dy2(i)=2.e0_r8*((y(i-1)-y(i))/h(i-1)+(y(i+1)-y(i))/h(i)) &
331 dy1(1)=dy1(2)-dy2(2)*h(1)
332 dy1(n)=dy1(n-1)+dy2(n-1)*h(n-1)
335 END SUBROUTINE derivn10
345 integer,
intent(in) :: nbrho
346 real(DP),
dimension(nbrho) :: e
354 if ( (abs(e(1)).gt.huge(e(1))) .or. (abs(e(1)).eq.0) )
then
355 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)
364 module cos_transportdata
366 integer :: dimk,dimm,dimmat,dimbb,dimn
367 real(kind=8),
dimension(:,:),
pointer :: f,fp,dfpdx,dfpdx2
368 real(kind=8),
dimension(:,:),
allocatable :: matd,matdp
369 real(kind=8),
dimension(:,:,:),
pointer :: t0,t1
370 real(kind=8),
dimension(:,:,:),
allocatable :: mata,matb,matc, &
372 real(kind=8),
dimension(:,:),
pointer :: v0,v1
373 integer,
dimension(:),
allocatable :: mode
375 real(kind=8),
dimension(:,:),
allocatable :: mats
376 real(kind=8),
dimension(:,:),
allocatable :: matu,matv,matw,matx,maty,matz
377 real(kind=8),
dimension(:),
allocatable,
target:: mat_coo,mat_csr
378 real(kind=8),
dimension(:),
allocatable,
target:: vectbb
379 integer,
dimension(:),
allocatable,
target :: cooi,cooj,csri,csrj
380 real(kind=8),
pointer:: dx,dt,sca_f
381 integer :: verbose = 0
382 end module cos_transportdata
406 subroutine cos_pde1solver(f_in,fp_in, &
407 mata_in,matb_in,matc_in,matd_in, &
408 matap_in,matbp_in,matcp_in,matdp_in, &
409 dimk_in,dimn_in,dimm_in,dx_in,dt_in,sca_f_in, &
410 t0_in,t1_in,v0_in,v1_in,mode_in,dfpdx_in,dfpdx2_in)
474 use cos_transportdata
476 integer,
intent(in) :: dimk_in,dimn_in,dimm_in
477 real(kind=8),
intent(in),
target :: dt_in,dx_in,sca_f_in
478 real(kind=8),
dimension(dimk_in,dimm_in),
target :: f_in,fp_in
479 real(kind=8),
dimension(dimk_in,dimm_in),
target,
optional:: dfpdx_in,dfpdx2_in
480 real(kind=8),
dimension(dimk_in,dimm_in),
target :: matd_in,matdp_in
481 real(kind=8),
dimension(dimk_in,dimm_in,dimm_in),
target :: mata_in,matb_in,matc_in, &
482 matap_in,matbp_in,matcp_in
483 real(kind=8),
dimension(2,dimm_in,3),
target :: t0_in,t1_in
484 real(kind=8),
dimension(2,dimm_in),
target :: v0_in,v1_in
486 real(kind=8),
dimension(:,:,:),
allocatable :: mat_aux
488 real(kind=8),
dimension(dimm_in) :: mode_in
489 integer,
dimension(:),
allocatable :: iwk,cooi_aux
491 real(kind=8) :: dtx2,dt2x,aux
493 integer :: counteri,counterj,counter
494 integer :: interpretatif=0,condlim=0
497 integer function condlimord2_k1(interpretatif)
498 integer,
intent(in) :: interpretatif
499 end function condlimord2_k1
501 integer function condlimord2_kk(interpretatif)
502 integer,
intent(in) :: interpretatif
503 end function condlimord2_kk
507 write(*,*)
'dans solver',sca_f_in
508 if (sca_f_in==1.0)
then
509 print*,
"Error, the explicit Euler algorithm must not be used"
524 if (present(dfpdx_in)) dfpdx=>dfpdx_in
525 if (present(dfpdx2_in)) dfpdx2=>dfpdx2_in
526 allocate(mata(dimk_in,dimm_in,dimm_in),matb(dimk_in,dimm_in,dimm_in),&
527 matc(dimk_in,dimm_in,dimm_in),matd(dimk_in,dimm_in) )
528 allocate(matap(dimk_in,dimm_in,dimm_in),matbp(dimk_in,dimm_in,dimm_in),&
529 matcp(dimk_in,dimm_in,dimm_in),matdp(dimk_in,dimm_in) )
530 allocate(mode(dimm_in))
548 allocate(mats(dimk,dimm))
549 allocate(matu(2,dimm),matv(2,dimm),matw(2,dimm))
550 allocate(matx(2,dimm),maty(2,dimm),matz(2,dimm))
551 allocate(mat_aux(dimk,dimm,dimm))
553 dimmat=(dimk-2)*dimn*dimn*3 +4*dimn*dimn
555 allocate(vectbb(dimbb),mat_coo(dimmat),cooi(dimmat),cooj(dimmat))
560 interpretatif=sum(mode)
561 if (interpretatif.ne.0) interpretatif=1
564 write(*,*)
'dtx2=',dtx2
566 matb = -2.0_8*dtx2*mata + dt*matc
567 matc = dtx2*mata + dt2x*mat_aux
568 mata = dtx2*mata - dt2x*mat_aux
572 matbp = -2.0_8*dtx2*matap + dt*matcp
573 matcp = dtx2*matap + dt2x*mat_aux
574 matap = dtx2*matap - dt2x*mat_aux
579 mats = sca_f*matd + (1.0_8-sca_f)*matdp + f;
584 condlim=sum(t0(:,:,3))
585 if ( condlimord2_k1(interpretatif) > 0)
then
587 print*,
" boundaries condition of order 2 is not implemented"
595 condlim=sum(t1(:,:,3))
596 if ( condlimord2_kk(interpretatif) > 0)
then
598 print*,
" boundaries condition of order 2 is not implemented"
610 write(*,*)
'dimm=',dimm
612 if (mode(m)==1) cycle
616 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)) &
617 + (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))
632 vectbb(counter) = mats(k,m)
635 vectbb(counter) = vectbb(counter) + sca_f*(matb(k,n,m)*f(k,n) + matc(k,n,m)*f(k+1,n))
646 vectbb(counter) = mats(k,m)
649 vectbb(counter) = vectbb(counter) + sca_f*(mata(k,n,m)*f(k-1,n) + matb(k,n,m)*f(k,n) &
650 + matc(k,n,m)*f(k+1,n))
662 vectbb(counter) = mats(k,m)
665 vectbb(counter) = vectbb(counter) + sca_f*(mata(k,n,m)*f(k-1,n) + matb(k,n,m)*f(k,n))
678 write(*,*)
'counter=',counter
679 call build_matcoo(matbp,1,k,counter,counteri,counterj)
682 call build_matcoo(matcp,0,k,counter,counteri,counterj)
686 call build_matcoo(matap,0,k,counter,counteri,counterj)
689 call build_matcoo(matbp,1,k,counter,counteri,counterj)
692 call build_matcoo(matcp,0,k,counter,counteri,counterj)
697 call build_matcoo(matap,0,k,counter,counteri,counterj)
700 call build_matcoo(matbp,1,k,counter,counteri,counterj)
705 print*,
"dimk",dimk,dimn,dimm,counter
706 allocate(iwk(dimbb+1),cooi_aux(dimmat))
707 allocate(mat_csr(dimmat),csri(dimmat),csrj(dimmat))
711 print*,
"SPARSE BIG MATRIX:"
733 fp(k,m) = vectbb(counter)
750 if (verbose > 0)
then
758 deallocate(matu,matv,matw,matx,maty,matz,mats)
759 deallocate(mata,matb,matc,matd,matap,matbp,matcp,matdp)
762 deallocate(mat_coo,cooi,cooj,vectbb)
764 deallocate(mat_coo,cooi,cooj,vectbb,iwk,cooi_aux,mat_csr,csri,csrj)
771 end subroutine cos_pde1solver
773 subroutine build_matcoo(matp,option,k,counter,counteri,counterj)
774 use cos_transportdata
776 integer,
intent(in) :: option,k
777 integer,
intent(inout) :: counter,counteri,counterj
778 integer :: counteri_aux,counterj_aux
779 real(kind=8),
dimension(dimk,dimm,dimm) :: matp
783 counteri_aux=counteri
784 counterj_aux=counterj
789 counterj=counterj_aux
794 if (counteri==counterj)
then
795 mat_coo(counter)=1.0_8-(1.0_8-sca_f)*matp(k,n,m)
797 mat_coo(counter)=-(1.0_8-sca_f)*matp(k,n,m)
799 if (mat_coo(counter)==0.0)
then
803 cooi(counter)=counteri
804 cooj(counter)=counterj
811 end subroutine build_matcoo
813 subroutine solvepde1d
814 use cos_transportdata
817 include
'dmumps_struc.h'
818 type(dmumps_struc
) :: mumps_par
823 mumps_par%COMM = mpi_comm_world
829 call dmumps(mumps_par)
832 IF ( mumps_par%MYID .eq. 0 )
THEN
834 mumps_par%N = dimk*dimn
836 mumps_par%NZ = dimmat
852 mumps_par%RHS=>vectbb
854 if (verbose <= 1)
then
866 CALL dmumps(mumps_par)
868 IF ( mumps_par%MYID .eq. 0 .and. verbose > 1)
THEN
869 WRITE( 6, * )
' MUMPS Solution is ',(mumps_par%RHS(i),i=1,mumps_par%N)
873 IF ( mumps_par%MYID .eq. 0 )
THEN
881 CALL dmumps(mumps_par)
882 CALL mpi_finalize(ierr)
883 end subroutine solvepde1d
885 integer function condlimord2_k1(interpretatif)
891 use cos_transportdata
894 integer,
intent(in) :: interpretatif
895 integer :: dirichlet=0,neumann=0,m,i
900 matu = t0(:,:,3)/(dx*dx) + t0(:,:,2) / (2.0_8*dx)
901 matv = t0(:,:,1) - 2.0_8*t0(:,:,3) / (dx*dx)
902 matw = t0(:,:,3)/(dx*dx) - t0(:,:,2) / (2.0_8*dx)
905 if (mode(m)==1) cycle
906 if (abs(matw(1,m))>1e-16)
then
907 if (verbose>1) print*,
"cond1 k=1 m=",m
909 if (interpretatif==1.or.dirichlet==1)
then
910 if (verbose>1) print*,
"boundary conditions not compatible"
914 if (abs(matv(1,m))>1e-16)
then
915 if (verbose>1) print*,
"cond2 k=1 m=",m
918 if (verbose>1) print*,
"boundary conditions not compatible"
922 if (verbose>1) print*,
"boundary conditions not supported"
927 if (abs(matw(2,m))>1e-16)
then
928 if (verbose>1) print*,
"cond1p k=1 m=",m
930 if (interpretatif==1.or.dirichlet==1)
then
931 if (verbose>1) print*,
"boundary conditions not compatible"
935 if (abs(matv(2,m))>1e-16)
then
936 if (verbose>1) print*,
"cond2p k=1 m=",m
939 if (verbose>1) print*,
"boundary conditions not compatible"
943 if (verbose>1) print*,
"boundary conditions not supported"
949 if (interpretatif==1) condlimord2_k1=1
951 if (condlimord2_k1 .ne. 0)
return
954 if (mode(m)==1) cycle
955 if (abs(matw(1,m))>1e-16)
then
956 matu(1,m) = - matu(1,m)/matw(1,m)
957 matv(1,m) = - matv(1,m)/matw(1,m)
958 matw(1,m) = v0(1,m) /matw(1,m)
960 matb(1,m,i) = matb(1,m,i) + matv(1,m)*mata(1,m,i)
961 matc(1,m,i) = matc(1,m,i) + matu(1,m)*mata(1,m,i)
962 mats(1,m) = mats(1,m) + sca_f*matw(1,m)*mata(1,m,i)
966 matx(1,m) = -matu(1,m)/matv(1,m)
967 maty(1,m) = v0(1,m) /matv(1,m)
972 matb(2,m,i) = matb(2,m,i) + matx(1,m)*mata(2,m,i)
973 mats(2,i) = mats(2,i) + sca_f*maty(1,m)*mata(2,m,i)
978 if (abs(matw(2,m))>1e-16)
then
979 matu(2,m) = - matu(2,m)/matw(2,m)
980 matv(2,m) = - matv(2,m)/matw(2,m)
981 matw(2,m) = v0(2,m) /matw(2,m)
983 matbp(1,m,i) = matbp(1,m,i) + matv(2,m)*matap(1,m,i)
984 matcp(1,m,i) = matcp(1,m,i) + matu(2,m)*matap(1,m,i)
985 mats(1,i) = mats(1,i) + (1.0_8-sca_f)*matw(2,m)*matap(1,m,i)
989 matx(2,m) = -matu(2,m)/matv(2,m)
990 maty(2,m) = v0(2,m) /matv(2,m)
993 matcp(1,m,m) = matx(2,m)/(1.0_8 - sca_f)
994 mats(1,m) = maty(2,m)
996 matbp(2,m,i) = matbp(2,m,i) + matx(2,m)*matap(2,m,i)
997 mats(2,i) = mats(2,i) + (1.0_8-sca_f)*maty(2,m)*matap(2,m,i)
1003 end function condlimord2_k1
1005 integer function condlimord2_kk(interpretatif)
1011 use cos_transportdata
1014 integer,
intent(in) :: interpretatif
1015 integer :: dirichlet=0,neumann=0,m,i
1020 matu = t1(:,:,3)/(dx*dx) + t1(:,:,2) / (2.0_8*dx)
1021 matv = t1(:,:,1) - 2.0_8*t1(:,:,3) / (dx*dx)
1022 matw = t1(:,:,3)/(dx*dx) - t1(:,:,2) / (2.0_8*dx)
1025 if (mode(m)==1) cycle
1026 if (abs(matu(1,m))>1e-16)
then
1027 if (verbose>1) print*,
"cond1 k=dimk m=",m
1029 if (interpretatif==1.or.dirichlet==1)
then
1030 if (verbose>1) print*,
"boundary conditions not compatible"
1034 if (abs(matv(1,m))>1e-16)
then
1035 if (verbose>1) print*,
"cond2 k=dimk m=",m
1037 if (neumann==1)
then
1038 if (verbose>1) print*,
"boundary conditions not compatible"
1042 if (verbose>1) print*,
"bondary conditions not supported"
1046 if (abs(matu(2,m))>1e-16)
then
1047 if (verbose>1) print*,
"cond1p k=dimk m=",m
1049 if (interpretatif==1.or.dirichlet==1)
then
1050 if (verbose>1) print*,
"boundary conditions not compatible"
1054 if (abs(matv(2,m))>1e-16)
then
1055 if (verbose>1) print*,
"cond2p k=dimk m=",m
1056 if (neumann==1)
then
1057 if (verbose>1) print*,
"boundary conditions not compatible"
1061 if (verbose>1) print*,
"boundary conditions not supported"
1066 if (interpretatif==1) condlimord2_kk=1
1068 if (condlimord2_kk.ne.0)
return
1071 if (mode(m)==1) cycle
1072 if (abs(matu(1,m))>1e-16)
then
1074 matu(1,m) = - matw(1,m)/aux
1075 matv(1,m) = - matv(1,m)/aux
1076 matw(1,m) = v1(1,m) /aux
1078 matb(dimk,m,i) = matb(dimk,m,i) + matv(1,m)*matc(dimk,m,i)
1079 mata(dimk,m,i) = mata(dimk,m,i) + matu(1,m)*matc(dimk,m,i)
1080 mats(dimk,i) = mats(dimk,i) + sca_f*matw(1,m)*matc(dimk,m,i)
1084 matx(1,m) = -matw(1,m)/matv(1,m)
1085 maty(1,m) = v1(1,m) /matv(1,m)
1086 mata(dimk,:,m) = 0.0_8
1087 matb(dimk,:,m) = 0.0_8
1088 mats(dimk,m) = 0.0_8
1090 matb(dimk-1,m,i) = matb(dimk-1,m,i) + matx(1,m)*matc(dimk-1,m,i)
1091 mats(dimk-1,i) = mats(dimk-1,i) + sca_f*maty(1,m)*matc(dimk-1,m,i)
1093 matc(dimk-1,m,:) = 0.0_8
1095 if (abs(matu(2,m))>1e-16)
then
1097 matu(2,m) = - matw(2,m)/aux
1098 matv(2,m) = - matv(2,m)/aux
1099 matw(2,m) = v1(2,m) /aux
1101 matbp(dimk,m,i) = matbp(dimk,m,i) + matv(2,m)*matcp(dimk,m,i)
1102 matap(dimk,m,i) = matap(dimk,m,i) + matu(2,m)*matcp(dimk,m,i)
1103 mats(dimk,i) = mats(dimk,i) + (1.0_8-sca_f)*matw(2,m)*matcp(dimk,m,i)
1107 matx(2,m) = -matw(2,m)/matv(2,m)
1108 maty(2,m) = v1(2,m) /matv(2,m)
1109 matap(dimk,:,m) = 0.0_8
1110 matap(dimk,m,m) = matx(2,m)/(1.0_8 - sca_f)
1111 matbp(dimk,:,m) = 0.0_8
1112 mats(dimk,m) = maty(2,m)
1114 matbp(dimk-1,m,i) = matbp(dimk-1,m,i) + matx(2,m)*matcp(dimk-1,m,i)
1115 mats(dimk-1,i) = mats(dimk-1,i) + (1.0_8-sca_f)*maty(2,m)*matcp(dimk-1,m,i)
1117 matcp(dimk-1,m,:) = 0.0_8
1121 end function condlimord2_kk
1123 subroutine condlimord1_k1
1128 use cos_transportdata
1135 matv = t0(:,:,1)*dx - t0(:,:,2)
1137 print*,
"dx",dx,t0(2,1,1), t0(2,1,2)
1138 print*,
"matv",matv(2,1)
1141 if (mode(m)==1) cycle
1142 matx(1,m) = -matu(1,m)/matv(1,m)
1143 maty(1,m) = maty(1,m)/matv(1,m)
1148 matb(2,m,i) = matb(2,m,i) + matx(1,m)*mata(2,m,i)
1149 mats(2,i) = mats(2,i) + sca_f*maty(1,m)*mata(2,m,i)
1152 if (abs(matv(2,m))>1e-16)
then
1153 matx(2,m) = -matu(2,m)/matv(2,m)
1154 maty(2,m) = maty(2,m)/matv(2,m)
1155 matbp(1,:,m) = 0.0_8
1156 matcp(1,:,m) = 0.0_8
1157 matcp(1,m,m) = matx(2,m)/(1.0_8 - sca_f)
1158 mats(1,m) = maty(2,m)
1160 matbp(2,m,i) = matbp(2,m,i) + matx(2,m)*matap(2,m,i)
1161 mats(2,i) = mats(2,i) + (1.0_8-sca_f)*maty(2,m)*matap(2,m,i)
1163 matap(2,m,:) = 0.0_8
1165 print*,
"Boundaries conditions error",matv(2,m)
1168 end subroutine condlimord1_k1
1170 subroutine condlimord1_kk
1175 use cos_transportdata
1181 matv = t1(:,:,2) + dx*t1(:,:,1)
1186 if (mode(m)==1) cycle
1187 matx(1,m) = -matw(1,m)/matv(1,m)
1188 maty(1,m) = maty(1,m)/matv(1,m)
1189 mata(dimk,:,m) = 0.0_8
1190 matb(dimk,:,m) = 0.0_8
1191 mats(dimk,m) = 0.0_8
1193 matb(dimk-1,m,i) = matb(dimk-1,m,i) + matx(1,m)*matc(dimk-1,m,i)
1194 mats(dimk-1,i) = mats(dimk-1,i) + sca_f*maty(1,m)*matc(dimk-1,m,i)
1196 matc(dimk-1,m,:) = 0.0_8
1197 if (abs(matv(2,m))>1e-16)
then
1198 matx(2,m) = -matw(2,m)/matv(2,m)
1199 maty(2,m) = maty(2,m)/matv(2,m)
1200 matap(dimk,:,m) = 0.0_8
1201 matap(dimk,m,m) = matx(2,m)/(1.0_8 - sca_f)
1202 matbp(dimk,:,m) = 0.0_8
1203 mats(dimk,m) = maty(2,m)
1205 matbp(dimk-1,m,i) = matbp(dimk-1,m,i) + matx(2,m)*matcp(dimk-1,m,i)
1206 mats(dimk-1,i) = mats(dimk-1,i) + (1.0_8-sca_f)*maty(2,m)*matcp(dimk-1,m,i)
1208 matcp(dimk-1,m,:) = 0.0_8
1210 print*,
"Boundaries conditions error",matv(2,m)
1214 end subroutine condlimord1_kk
subroutine solution10(SOLVER, ifail)
This subroutine is prepared to solve single transport equation in standardised form adopted by the ET...
subroutine cos_zconversion(e, nbrho)