3 & (cfwc, npoin2, dirhou, u_tel, v_tel, uwbm)
22 INTEGER,
INTENT(IN) :: NPOIN2
23 TYPE(bief_obj),
INTENT(IN) :: U_TEL,V_TEL
24 TYPE(bief_obj),
INTENT(INOUT) :: CFWC
25 DOUBLE PRECISION,
INTENT(IN) :: UWBM(npoin2)
26 DOUBLE PRECISION,
INTENT(IN) :: DIRHOU(npoin2)
29 DOUBLE PRECISION VITCOU,DIRCOU
30 DOUBLE PRECISION OMEGAA
31 DOUBLE PRECISION XKN , FW, FC, XKAPPA
34 INTEGER ITERM , ITER , KONVER
35 DOUBLE PRECISION TOLF , TOLX , ERRF , ERRX , F1MJ, F2MJ,
36 & df1dfc, df1dfw, df2dfc, df2dfw, dfc, dfw,
37 & coef1 , fcinit, fwinit, det, xj,
38 & betamj , zeta , vitnul
42 DOUBLE PRECISION R, COSDIR, COEFJ ,
43 & mmm , mmmdfc, mmmdfw, jjj , jjjdfc, jjjdfw,
44 & sig , sigdfc, sigdfw, xka , xkadfc, xkadfw,
45 & taw , tawdfc, tawdfw, coefta, coefka, coef2 ,
50 DOUBLE PRECISION USKA, C1, YO
51 DOUBLE PRECISION YN , RAC2, C2,G
66 c1 =1.d0/(xkappa*rac2)
74 vitcou=sqrt(u_tel%R(i)**2.d0+v_tel%R(i)**2.d0)
75 IF(vitcou.GE.vitnul)
THEN 76 dircou=atan2(u_tel%R(i),v_tel%R(i))
80 xkn = 11.d0*max(
depth(i),1.d-9) /exp(0.41d0*73.d0/g)
86 xj=(dsqrt(betamj)*uwbm(i)/(xkn*omegaa))**(2.d0/3.d0)
87 coef1 = 30.d0/dexp(1.d0)
88 fcinit = 2.d0*(xkappa/dlog(coef1*
depth(i)/xkn))**2
89 IF (uwbm(i).LT.vitnul.OR.xj.LT.vitnul)
THEN 91 ELSEIF (xj.LT.3.47d0)
THEN 95 uska=uwbm(i)/(xkn*omegaa)
97 c2=c1*dlog(30.d0*xkappa*dexp(-2.d0*zeta)*uska/rac2)
98 yo=(uska/betamj)**(1.d0/3.d0)/rac2
101 IF (dabs(yn-yo).LT.1.d-5)
GOTO 205
104 WRITE(6,*)
'/!/ STOP IN FWSEUL - NO CONVERGENCE' 105 WRITE(6,*)
'Uwbm/(Kn.Omega) = ', uska,
'XKN,OMEGAA',
120 IF ((vitcou.LT.vitnul).OR.(uwbm(i).LT.vitnul)
121 & .OR.(vitcou/uwbm(i).GT.1.d3).OR.
122 & (uwbm(i)/vitcou.GT.1.d3))
THEN 138 sig = (fc/fw)*(vitcou/uwbm(i))**2
144 cosdir = dabs(cos(dirhou(i)-dircou))
145 mmm = dsqrt(1.d0+sig*sig+2.d0*sig*cosdir)
146 mmmdfc = (sig+cosdir)/mmm*sigdfc
147 mmmdfw = (sig+cosdir)/mmm*sigdfw
151 coefj = uwbm(i)/(xkn*omegaa*dsqrt(2.d0))
152 jjj = coefj*dsqrt(mmm*fw)
153 jjjdfc = 0.5d0*jjj/mmm*mmmdfc
154 jjjdfw = 0.5d0*jjj*(1.d0/fw+1.d0/mmm*mmmdfw)
158 IF (jjj.GT.3.47d0)
THEN 167 coefta = xkn*r*
deupi/2.d0*dsqrt(betamj*0.5d0)
168 taw = coefta*dsqrt(jjj)
169 tawdfc = 0.5d0*taw/jjj*jjjdfc
170 tawdfw = 0.5d0*taw/jjj*jjjdfw
172 coefta = xkn*coefn*xkappa
174 tawdfc = coefta*jjjdfc
175 tawdfw = coefta*jjjdfw
181 coefka = xkappa/(betamj*xkn)
182 xka = 30.d0*taw*dexp(-coefka*taw*dsqrt(sig/mmm))
183 xkadfc = xka*(tawdfc/taw-coefka*taw*dsqrt(sig/mmm)
184 & *(tawdfc/taw+0.5d0*sigdfc/sig-0.5d0*mmmdfc/mmm))
185 xkadfw = xka*(tawdfw/taw-coefka*taw*dsqrt(sig/mmm)
186 & *(tawdfw/taw+0.5d0*sigdfw/sig-0.5d0*mmmdfw/mmm))
188 auxi = dsqrt(sig/mmm)
189 xka = xkn*(30.d0*taw/xkn)**(1.d0-auxi)
190 xkadfc = xka*( -0.5d0/auxi*(sigdfc-sig*mmmdfc/mmm)/mmm
191 & *dlog(30.d0*taw/xkn) + (1.d0-auxi)*tawdfc/taw )
192 xkadfw = xka*( -0.5d0/auxi*(sigdfw-sig*mmmdfw/mmm)/mmm
193 & *dlog(30.d0*taw/xkn) + (1.d0-auxi)*tawdfw/taw )
199 f1mj = fw -2.d0*betamj*mmm/jjj
200 df1dfc = -2.d0*betamj*(mmmdfc/jjj-jjjdfc*mmm/jjj**2)
201 df1dfw = 1.d0 -2.d0*betamj*(mmmdfw/jjj-jjjdfw*mmm/jjj**2)
203 coef1 = 30.d0*xkappa*dexp(-2.d0*zeta)
204 auxi = dlog(coef1*jjj)
205 f1mj = fw - 2.d0*mmm*(xkappa/auxi)**2
206 df1dfc = - 2.d0*xkappa**2*(mmmdfc/auxi**2
207 & - 2.d0*mmm/jjj*jjjdfc/auxi**3)
208 df1dfw = 1.d0 - 2.d0*xkappa**2*(mmmdfw/auxi**2
209 & - 2.d0*mmm/jjj*jjjdfw/auxi**3)
214 coef2 = 30.d0*
depth(i)/dexp(1.d0)
215 auxi = dlog(coef2/xka)
216 f2mj = dsqrt(2.d0/fc) - auxi/xkappa
217 df2dfc = xkadfc/(xka*xkappa)-1.d0/dsqrt(2.d0*fc**3)
218 df2dfw = xkadfw/(xka*xkappa)
224 errf=abs(f1mj)+abs(f2mj)
225 IF (errf.LT.tolf)
THEN 232 det=df1dfc*df2dfw-df1dfw*df2dfc
233 IF (abs(det).LT.1.d-10)
THEN 234 WRITE(6,*)
'/!/ ARRET DANS CJSUBR : DETERMINAT NUL DET=' 237 dfc=(-f1mj*df2dfw+f2mj*df1dfw)/det
238 dfw=(-f2mj*df1dfc+f1mj*df2dfc)/det
247 errx=abs(dfc)+abs(dfw)
248 IF (errx.LT.tolx)
THEN 253 IF (iter.LT.iterm)
GOTO 500
258 IF (lumes.GT.0)
WRITE(lumes,2000) konver,iter,fc,fw
260 &
'CONVERGENCE ',i1,
' APRES',i5,
' ITERATIONS => FC =',
261 & e11.4,
' ET FW =',e11.4)
subroutine fric3d(CFWC, NPOIN2, DIRHOU, U_TEL, V_TEL, UWBM)
double precision, dimension(:), pointer depth
double precision, dimension(:), pointer freq