1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program main
Implicit none
Integer, parameter :: Nbr_iteration=200,cst_loop=4
doubleprecision, parameter :: PsmoinsL=1.D-06,W0=30.D0,L=5.D0
! parameter ( Tdebut=0.D0, DT=1.0d-5)
Doubleprecision, Dimension(Nbr_iteration) :: N1_R,N2_R,X_R
Doubleprecision, Dimension(Nbr_iteration) :: Pp_R,Psplus_R
Doubleprecision, Dimension(Nbr_iteration) :: Psmoins_R
Doubleprecision, Dimension(Nbr_iteration) :: R12_R,R21_R
Doubleprecision, Dimension(Nbr_iteration) :: W12_R,W21_R
Doubleprecision Rco,Aco,Rfo,Acl,gamma_p
Doubleprecision lambda_s,sigma_ap,sigma_ep,sigma_es,sigma_as
Doubleprecision alpha_p,alpha_s,tau,delta_lambda_s,n
Doubleprecision gamma_s,R1,R2,tau_s,h
Doubleprecision c,vp,vs,A21,N2
Doubleprecision v,deltaX,x,N1
double precision resultat
integer i, Nbrloop
doubleprecision :: pi=4.D0*atan(1.D0)
write(*,*) 'nombre d''itérations:',Nbr_iteration
!!!!!!!!!!!!!!!!!!! ouverture du fichier lelongdelafibre.txt
open(20,file='F:\projet_these_mghaaraz\calcul_static\
& lelongdelafibre.txt',form='unformatted',status='unknown',
& iostat='ios')
if(IOS /= 0) then
write(*,*) 'Erreur d''ouverture du fichier lelongdelafibre.txt' !-ERREUR RENVOYEE ICI-
end if
! T1 = Tdebut
! TFIN = 1000.0d0
! Ne=(TFIN-T1)/DT
! write(*,*)'Ne=',Ne
! TOL = 1.d-3
!!!!!!!!!!!!!!!!!!! déclaration des données
data sigma_ap,sigma_ep,sigma_es,sigma_as,alpha_p,alpha_s,
&delta_lambda_s,gamma_s,R1,R2,tau_s,h,vp,N/3.D-25,5.D-26,
&2.5D-25,1.4D-27,3.D-03,5.D-3,2.D-8,0.75,0.04,0.4,3.D-07,
&6.62D-34,3.D+08,319.D+12/
Rco=8.D-06
Aco=pi*Rco**2
write(*,*) 'Aco=', Aco
Rfo=200.D-06
Acl=pi*(Rfo**2-Rco**2)
write(*,*) 'Acl=', Acl
gamma_p=Aco/Acl
write(*,*) 'gamma_p=', gamma_p
c=3.D+08
lambda_s=1.08D-06
vs=c/lambda_s
write(*,*) 'vs=', vs
tau=1.D-03
A21=1/tau
write(*,*) 'A21=', A21
n=1.45
v=c/n
write(*,*) 'v=', v
L=5.
deltaX=L/float(Nbr_iteration)
write(*,*) 'deltaX=', deltaX
!!!!!!!!!!!!!!!!!!! conditions initiales
N=3.D+19
N2_R(1)=0.24*N
N1_R(1)=0.76*N ! N1(0)=N-N2(0)
Pp_R(1)=W0
Psplus_R(1)=0.D+0
X_R(1)=0.D+0
R12_R(1)=0.
R21_R(1)=0.
W12_R(1)=0.
W21_R(1)=0.
write(*,*) 'Pp_R(1)=', Pp_R(1)
write(*,*) 'Psplus_R(1)=', Psplus_R(1)
write(*,*) 'N2_R(1)/N=', N2_R(1)/N
write(*,*) 'N1_R(1)/N=', N1_R(1)/N
write(*,*) 'X_R(1)=', X_R(1)
write(*,*) 'R12_R(1)=', R12_R(1)
write(*,*) 'R21_R(1)=', R21_R(1)
write(*,*) 'W12_R(1)=', W12_R(1)
write(*,*) 'W21_R(1)=', W21_R(1)
!!!!!!!!!!!!!!!!!!! initialisation des tableaux
subroutine initialisation_1(N1_R, N2_R, X_R, Pp_R, Psplus_R,
& Psmoins_R,R12_R,R21_R,W12_R,W21_R)
implicit none
doubleprecision N1_R(200),N2_R(200),X_R(200),Pp_R(200),
&Psplus_R(200),Psmoins_R(200),R12_R(200),R21_R(200),
&W12_R(200),W21_R(200)
integer i
Do i=1, 180
N1_R(i)=0.
N2_R(i)=0.
X_R(i)=0.
Pp_R(i)=0.
Psplus_R(i)=0.
Psmoins_R(i)=0.
R12_R(i)=0.
R21_R(i)=0.
W12_R(i)=0.
W21_R(i)=0.
enddo
end subroutine initialisation_1
!!!!!!!!!!!!!!!!!!! initialisation Ps- et X
subroutine initialisation_2(Psmoins_R,X_R,PsmoinsL,x,deltaX)
double precision Psmoins_R(200),X_R(200)
double precision PsmoinsL,x,deltaX
integer i
PsmoinsL=1.d-06
x=0.
do while (i.lt.Nbr_iteration+1)
do i=180, 1, -1
Psmoins_R=PsmoinsL
x=x+deltaX
X_R=x
enddo
enddo
end subroutine initialisation_2
!!!!!!!!!!!!!!!!!!! boucles de calcul statique
10 if(.not. Nbrloop.lt.cst_loop) go to 20
do while (i.lt.Nbr_iteration+1)
call initialisation_1
Do i=2, 180
Pp_R=Pp_R+gamma_p*(sigma_ep*N2_R-sigma_ap*N1_R)*
& Pp_R*deltaX-alpha_p*Pp_R*deltaX
Psplus_R=Psplus_R+gamma_s*(sigma_es*N2_R-sigma_as*N1_R)*
& Psplus_R*deltaX+gamma_s*N2_R*sigma_es*2*int(n)*h*c*c*
& (delta_lambda_S/lambda_S**3)*deltaX-alpha_s*Psplus_R*deltaX
R12_R=(sigma_ap*Pp_R*gamma_p)/(Aco*h*vp)
R21_R=(sigma_ep*Pp_R*gamma_p)/(Aco*h*vp)
W12_R=(sigma_as*(Psplus_R+Psmoins_R)*gamma_s)/(Aco*h*vs)
W21_R=(sigma_es*(Psplus_R+Psmoins_R)*gamma_s)/(Aco*h*vs)
N1_R=((R21_R+W21_R+A21)*N)/(R12_R+W12_R+R21_R+W21_R+A21)
N2_R=N-N1_R
write(20,*) 'Pp_R=', Pp_R
write(20,*) 'Psplus=', Psplus_R
write(20,*) 'N2_R/N=', N2_R/N
enddo
enddo
do while (i.gt.1)
call initialisation_2
do i=180, 2, -1
Psmoins_R=Psmoins_R+gamma_s*(sigma_es*N2_R-sigma_as*N1_R)*
& Psmoins_R*deltaX+gamma_s*N2_R*sigma_es*2*int(n)*h*c*c*
& (delta_lambda_S/lambda_S**3)*deltaX-alpha_s*Psmoins_R*deltaX
R12_R=(sigma_ap*Pp_R*gamma_p)/(Aco*h*vp)
R21_R=(sigma_ep*Pp_R*gamma_p)/(Aco*h*vp)
W12=(sigma_as*(Psplus_R+Psmoins_R)*gamma_s)/(Aco*h*vs)
W21_R=(sigma_es*(Psplus_R+Psmoins_R)*gamma_s)/(Aco*h*vs)
N1_R=((R21_R+W21_R+A21)*N)/(R12_R+W12_R+R21_R+W21_R+A21)
N2_R=N-N1_R
enddo
write(20,*) "Psmoins_R=", Psmoins_R
enddo
go to 10
20 continue
!!!!!!!!!!!!!!!!!!! test condition initiale entre Ps+ et Ps- en 0
R1=R1*100.
write(*,*) 'donnez R1'
read(*,*) R1
write(*,*) 'R1=', R1
resultat=Psplus_R/Psmoins_R
resultat=resultat*100.
write(20,*) 'donnez resultat'
read(20,*) resultat
write(10,*) 'resultat=', resultat
if (resultat.ge.R1-0.005.and.resultat.le.R1+0.005) then
write(*,*) 'la valeur initiale de Ps- "OK"'
else
write(*,*) 'la valeur initiale de Ps- "pas OK"'
endif
close(20)
end program main |
Partager