The TELEMAC-MASCARET system  trunk
berkho.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE berkho
3 ! *****************
4 !
5  &(lf)
6 !
7 !***********************************************************************
8 ! ARTEMIS V7P3 Aug 2017
9 !***********************************************************************
10 !
11 !brief SOLVES THE BERKHOFF EQUATION MODIFIED BY
12 !+ THE INTRODUCTION OF DISSIPATION TERMS.
13 !code
14 !+ DIV (C*CG*GRAD(PHI)) + C*CG*( K**2 + I*K*MU ) * PHI = 0
15 !+ ------
16 !+
17 !+ PHI IS A COMPLEX FUNCTION (REAL COMPONENT: PHIR AND IMAGINARY
18 !+ COMPONENT: PHII)
19 !+
20 !+ MU IS A DISSIPATION COEFFICIENT (A PRIORI UNKNOWN)
21 !+
22 !+ THE BOUNDARY CONDITIONS COUPLE THE EQUATIONS IN PHIR AND PHII
23 !+ THEY ARE:
24 !+
25 !+ D (PHI) /DN - I*K*PHI = D (F) /DN - I*K*F (N: EXTERNAL NORMAL)
26 !+ FOR A LIQUID BOUNDARY WITH INCIDENT WAVE CONDITION DEFINED
27 !+ BY THE POTENTIAL F (F=0 FOR A FREE EXIT)
28 !+
29 !+ D (PHI) /DN - I* (1-R*EXP (I*ALFA))/(1 + R*EXP (I*ALFA))*K*COS (TETA) *PHI = 0
30 !+ FOR A SOLID BOUNDARY, WITH WALL REFLEXION COEFFICIENT: R,
31 !+ ANGLE OF INCIDENCE OF THE WAVES ON THE WALL: TETA, AND DEPHASING
32 !+ CAUSED BY THE WALL: ALFA.
33 !+
34 !+ THUS GENERALLY :
35 !+ D(PHIR)/DN = APHIRB*PHII + BPHIRB*PHIR + CPHIRB
36 !+ D(PHII)/DN =-APHIRB*PHIR + BPHIRB*PHII + DPHIRB
37 !+
38 !+
39 !+ AFTER VARIATIONAL FORMULATION :
40 !+
41 !+ ( AM1 BM1 ) ( PHIR ) ( CV1 )
42 !+ ( ) ( ) = ( )
43 !+ ( ) ( ) ( )
44 !+ ( -BM1 AM1 ) ( PHII ) ( CV2 )
45 !+
46 !+ /
47 !+ AM1 = / C*CG * GRAD(PSII)*GRAD(PSIJ) DS
48 !+ /S
49 !+
50 !+ /
51 !+ - / OMEGA**2 * CG/C * PSII*PSIJ DS
52 !+ /S
53 !+
54 !+ /
55 !+ - / BPHIRB * PSII*PSIJ DB
56 !+ /B
57 !+
58 !+ / /
59 !+ BM1 = - / APHIR * PSII*PSIJ DB + / C*CG* K * MU * PSII * PSIJ DS
60 !+ /B /S
61 !+
62 !+ /
63 !+ CV1 = / CPHIR * PSII DB
64 !+ /B
65 !+
66 !+ /
67 !+ CV2 = / CPHII * PSII DB
68 !+ /B
69 !+
70 !+
71 !+ WHERE S IS THE COMPUTATIONAL DOMAIN AND B ITS BOUNDARY
72 !+ PSII AND PSIJ ARE THE BASIC FUNCTIONS AT NODES I AND J
73 !+
74 !+ GIVEN THAT APHII=-APHIR, BM1 IS ALSO IN THE EQUATION IN PHII.
75 !
76 !history J-M HERVOUET (LNH)
77 !+
78 !+
79 !+ LINKED TO BIEF 5.0
80 !
81 !history D. AELBRECHT (LNH)
82 !+ 04/06/1999
83 !+ V5P1
84 !+
85 !
86 !history
87 !+ 02/04/2007
88 !+
89 !+ INVERSION OF THE SECOND EQUATION BEFORE CALL TO SOLVE IF DIRECT
90 !+ SOLVEUR IS USED
91 !
92 !history C. DENIS (SINETICS)
93 !+ 18/03/2010
94 !+ V6P0
95 !+
96 !
97 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
98 !+ 13/07/2010
99 !+ V6P0
100 !+ Translation of French comments within the FORTRAN sources into
101 !+ English comments
102 !
103 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
104 !+ 21/08/2010
105 !+ V6P0
106 !+ Creation of DOXYGEN tags for automated documentation and
107 !+ cross-referencing of the FORTRAN sources
108 !
109 !history C.PEYRARD (EDF)
110 !+ 2011
111 !+ V6P1
112 !+ 2ND ORDER BOTTOM EFFECTS ADDED TO BERKHOF EQUATION
113 !
114 !history C.PEYRARD (EDF)
115 !+ 2012
116 !+ V6P2
117 !+ NEW TYPE OF BOUNDARY CONDITIONS ADDED
118 !+ DIFFERENT IMPLEMENTATION OF CV1/CV2
119 !
120 !history C.PEYRARD (EDF)
121 !+ 2013
122 !+ V6P3
123 !+ INTEGRATION OF WAVE/CURRENT INTERACTION
124 !+ AND LOOP ON WAVE VECTOR DIRECTION ADDED
125 !
126 !history C.PEYRARD (EDF)
127 !+ 2014
128 !+ V7P0
129 !+ AUTOMATIC ANGLE CALCULATION
130 !
131 !history J,RIEHME (ADJOINTWARE)
132 !+ November 2016
133 !+ V7P2
134 !+ Replaced EXTERNAL statements to parallel functions / subroutines
135 !+ by the INTERFACE_PARALLEL
136 !
137 !history N.DURAND (HRW)
138 !+ August 2017
139 !+ V7P3
140 !+ DEGRAD and RADDEG now defined in DECLARATIONS_ARTEMIS
141 !
142 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
143 !| LF |-->| INDICATOR OF FIRST RESOLUTION FOR DISSIPATION LOOP
144 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145 !
146  USE bief
149  USE interface_artemis, ex_berkho => berkho
150 !
152  USE interface_parallel, ONLY : p_max
153  IMPLICIT NONE
154 !
155  INTEGER, INTENT(IN) :: LF
156 !
157  INTEGER I,ITERMU,IG
158 
159  DOUBLE PRECISION ECRHMU,MODHMU
160 !
161  DOUBLE PRECISION CBID
162 !
163 !--> VARIABLES FOR CURRENT AND TETAP LOOP
164  DOUBLE PRECISION ERREUR1,ERREURT
165  DOUBLE PRECISION XMUL,XK,ZERO
166  DOUBLE PRECISION TETA(nptfr) , ANGDIR(nptfr)
167 !
168  INTEGER ITERKN
169  INTEGER TMP
170 !
171 !-----------------------------------------------------------------------
172 !
173  INTRINSIC abs,min,max,log,cos,sin,atan
174 !
175 !-----------------------------------------------------------------------
176 !
177 !--------------------------
178 ! LANGAUTO=.FALSE.
179 !----------------------------------------------------------------------
180 !
181 ! INITIALISES MU AND FW: SET TO 0
182 ! FOR THE FIRST ITERATION
183 !
184  itermu=0
185  IF (lf.EQ.0) THEN
186  CALL os('X=C ', x=mu, c=0.d0)
187  CALL os('X=C ', x=fw, c=0.d0)
188  ENDIF
189 !
190 !-----------------------------------------------------------------------
191  iterkn=0
192  IF (courant) THEN
193  zero=1e-10
194 ! INITIALISATION OF WAVE VECTOR COMPONENTS X&Y : T5 , T6
195  CALL os('X=0 ',x=kancx)
196  CALL os('X=0 ',x=kancy)
197  ENDIF
198 ! WRITE(LU,*) 'AVANT BOUCLE 98'
199 
200 !
201 !-----------------------------------------------------------------------
202 !
203 ! =========================================
204 !98 : DISSIPATION : ITERATIVE LOOP : ON THE VARIABLE MU R ON THE WAVE VECTOR
205 98 CONTINUE
206 !
207 ! ITERATIVE LOOP ON TETAP (AUTOMATIC CALCULATION) AND WAVE VECTOR (WAVE-CURRENT)
208  IF ( ((courant).AND.(iterkn.GT.0))
209  & .OR.((langauto ).AND.(iterkn.GT.0)) ) THEN
210 
211 ! ==> CURRENT :
212  IF (courant) THEN
213 ! COMPUTE WAVE VECTOR (FIRST ITERATION U=0, SO NO NEED TO DO THAT)
214 ! ---------------------------------------------------------------
215  IF(debug.GT.0) WRITE(lu,*) ' - COMPUTING WAVE VECTOR (1st)'
216  DO i=1,npoin
217  xk =k%R(i)
218  CALL solvelambda(xk,
219  & uc%R(i),vc%R(i),kancx%R(i),kancy%R(i),h%R(i))
220  k%R(i) =xk
221 
222  wr%R(i)=sqrt(grav*k%R(i)*tanh(k%R(i)*h%R(i)))
223  c%R(i) =wr%R(i)/k%R(i)
224  cg%R(i)=0.5d0*c%R(i)*
225  & (1.d0 + 2.d0*k%R(i)*h%R(i)/sinh(2.d0*k%R(i)*h%R(i)))
226  ENDDO
227  IF(debug.GT.0) WRITE(lu,*) ' - WAVE VECTOR (1st) COMPUTED'
228 !
229  ENDIF
230 ! ------------------------------------------------------
231 ! ==> AUTOMATIC ANGLES
232  IF (langauto) THEN
233 ! COMPUTE TETAP ON THE BOUNDARY (FIRST ITERATION TETAP GIVEN BY USER, SO NO NEED TO DO THAT)
234 ! ---------------------------------------------------------------
235 ! ==> RELAXATION ON TETAP IF NECESARY : TETAP=TETAP + C*(TETAP-TETAPM) (default : C=0)
236  DO i=1,nptfr
237  tetap%R(i)=tetapm%R(i)+reltp*(tetap%R(i)-tetapm%R(i))
238  tetap%R(i)=min(tetap%R(i),90d0)
239  ENDDO
240 ! TETAP STORAGE IN TETAPM
241 ! --------------------------
242  CALL os( 'X=Y ' , x=tetapm , y=tetap )
243  ENDIF
244 !
245 ! ------------------------------------------------------
246 ! ACTUALIZATION OF BOUNDARY CONDITIONS
247 ! 1/ CURRENT : K HAS CHANGED
248 ! 2/ AUTO ANGLES : TETAP HAS CHANGED
249 ! ----------
250  IF(debug.GT.0) WRITE(lu,*) ' - ACTUALIZING BOUNDARY CONDITIONS'
251  CALL phbor
252  IF(debug.GT.0) WRITE(lu,*) ' - BOUNDARY CONDITIONS ACTUALIZED'
253 ! ----------
254 ! ------------------------------------------------------
255 ! END OF FIRST STEP : NEXT STEP IS COMPUTING AM AND BM
256  ENDIF
257 !
258 ! =========================================
259 ! MATRIX AM
260 ! =========================================
261  IF(debug.GT.0) WRITE(lu,*) ' - PREPARING THE AM MATRIX'
262 ! WRITE(LU,*) 'MATRIX AM'
263 ! ---------------------------
264 ! DIFFUSION MATRIX FOR AM1
265 ! ---------------------------
266 !
267  CALL os('X=YZ ', x=t1, y=c, z=cg)
268  CALL matrix(am1,'M=N ','MATDIF ',ielm,ielm,
269  & 1.d0,s,s,s,t1,t1,s,mesh,msk,maskel)
270 !
271 !-----------------------------------------------------------------------
272 !
273 ! PANCHANG, TO BE REVISITED: 7 IS GMRES
274 !
275 ! THE DIFFUSION MATRIX USED FOR PRECONDITIONING IS STORED
276 ! IF THE METHOD IS THAT OF PANCHANG ET AL. (ISOLVE(1) =7)
277 !
278 ! IF (ISOLVE(1).EQ.7) THEN
279 !
280 ! CALL OM('M=CN ',M=AM3,N=AM1,C=1.D0/(RELAX*(2.D0-RELAX)),MESH=MESH)
281 !
282 ! ENDIF
283 !
284 !-----------------------------------------------------------------------
285 !
286 ! -----------------------
287 ! MASS MATRIX FOR AM1
288 ! -----------------------
289 ! (WARNING : CAN'T USE CURRENT AND SECOND ORDER BOTTOM EFFECTS AT THE SAME TIME)
290  IF (courant) THEN
291  xmul=1.d0
292  CALL os( 'X=YZ ' , x=t1,y=cg,z=c)
293  CALL os( 'X=YZ ' , x=t2 , y=k , z=k)
294  CALL os( 'X=XY ' , x=t1 , y=t2)
295  CALL os( 'X=C ' , x=t2 , c=omega**2)
296  IF(iterkn.EQ.0)THEN
297  CALL os( 'X=C ' , x=t3 , c=omega**2)
298  ELSE
299  CALL os( 'X=YZ ' , x=t3 , y=wr , z=wr )
300  ENDIF
301  CALL os( 'X=Y+Z ' , x=t1 , y=t1 , z=t2)
302  CALL os( 'X=Y-Z ' , x=t1 , y=t1 , z=t3)
303  IF (ipentco.GT.(0.5)) THEN
304  WRITE(lu,*) 'IT IS NOT POSSIBLE TO USE '
305  WRITE(lu,*) 'CURRENT + BOTTOM EFFECTS AT THE SAME TIME'
306  WRITE(lu,*) '- FOR CURRENT ALONE, FIX IPENTO=0'
307  WRITE(lu,*) '- FOR BOTTOM EFFECTS ALONE, DON T USE CURRENT'
308  WRITE(lu,*) '-------------------------'
309  WRITE(lu,*) 'THE CODE IS GOING TO STOP'
310  WRITE(lu,*) '-------------------------'
311  stop
312  ENDIF
313  ELSE
314  CALL os( 'X=Y/Z ' , x=t1,y=cg,z=c)
315  xmul=omega**2
316 ! SECOND ORDER BOTTOM EFFECTS ?
317 ! (IPENTCO > 0 --> T1 = T1*(1+F) )
318 ! 0 : NO EFFECT / 1 : GRADIENT / 2 : CURVATURE / 3 : GRADIENT+CURVATURE
319  IF ( (ipentco.GT.(0.5)).AND.(ipentco.LT.(3.5)) ) THEN
320  CALL pentco(ipentco)
321 ! WT USED AND TO BE CONSERVED : T3 = 1+F
322 ! WT USED : T2 T4 T5 T6 T7 T9 T8 T11 T12
323  CALL os('X=YZ ', x=t1, y=t1, z=t3)
324  ENDIF
325  ENDIF
326 
327  CALL matrix(am2,'M=N ','FMATMA ', ielm , ielm ,
328  & xmul , t1,s,s,s,s,s,mesh,msk,maskel)
329 !
330 
331 ! --------------------------------------------------
332 ! COMPUTES DIFFUSION MATRIX - MASS MATRIX
333 ! --------------------------------------------------
334  CALL om('M=M+CN ', m=am1, n=am2, c=-1.d0, mesh=mesh)
335 !
336 
337 !
338  IF (courant) THEN
339 ! --------------------------------------------------
340 ! ADDS CURRENT - CONVECTION MATRIX
341 ! --------------------------------------------------
342 !
343  CALL matrix(am2,'M=N ','MAUGUG ', ielm , ielm ,
344  & 1.d0 , s,s,s,uc,vc,s,mesh,msk,maskel)
345 !
346  CALL om('M=M+CN ', m=am1, n=am2, c=-1.d0, mesh=mesh)
347 !
348  ENDIF
349 ! --------------------------------
350 ! ADDS THE BOUNDARY TERM TO AM1
351 ! --------------------------------
352 !
353 ! AM1 et AM2 --> NON-SYMETRIQUES
354  CALL om('M=X(M) ' , m=am1, mesh=mesh)
355  CALL om('M=X(M) ' , m=am2, mesh=mesh)
356 !
357 ! ----------------------------
358 ! BOUNDARY TERM: INCIDENT WAVE
359 ! ----------------------------
360 !
361  IF (nptfr .GT. 0) THEN
362  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
363  & -1.d0,bphi1b,s,s,s,s,s,mesh,.true.,mask1)
364  CALL om('M=M+N ' , m=am1 , n=mbor, mesh=mesh)
365 !
366 !
367  IF(courant) THEN
368  CALL matrix(mbor,'M=N ','MATFGUG ',ielmb,ielmb,
369  & 1.d0,mesh%XSGBOR,mesh%YSGBOR,s,uc,vc,s,
370  & mesh,.true.,mask1)
371  CALL om('M=M+N ', m=am1, n=mbor, mesh=mesh)
372  ENDIF
373 !
374  ENDIF
375 ! ------------------------------
376 ! BOUNDARY TERM: FREE EXIT
377 ! ------------------------------
378  IF (nptfr .GT. 0) THEN
379  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
380  & -1.d0,bphi2b,s,s,s,s,s,mesh,.true.,mask2)
381  CALL om('M=M+N ', m=am1, n=mbor, mesh=mesh)
382 !
383  IF(courant) THEN
384  CALL matrix(mbor,'M=N ','MATFGUG ',ielmb,ielmb,
385  & 1.d0,mesh%XSGBOR,mesh%YSGBOR,s,uc,vc,s,
386  & mesh,.true.,mask2)
387  CALL om('M=M+N ', m=am1, n=mbor, mesh=mesh)
388  ENDIF
389  ENDIF
390 ! ------------------------------
391 ! BOUNDARY TERM : SOLID BOUNDARY
392 ! ------------------------------
393  IF (nptfr .GT. 0) THEN
394  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
395  & -1.d0,bphi3b,s,s,s,s,s,mesh,.true.,mask3)
396  CALL om('M=M+N ', m=am1, n=mbor, mesh=mesh)
397  END IF
398 ! --------------------- ---------
399 ! BOUNDARY TERM: IMPOSED WAVE
400 ! ------------------------------
401  IF (nptfr .GT. 0) THEN
402  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
403  & -1.d0,bphi4b,s,s,s,s,s,mesh,.true.,mask4)
404  CALL om('M=M+N ', m=am1, n=mbor, mesh=mesh)
405  END IF
406 !
407 ! ------------------------------
408 ! BOUNDARY TERM: INCIDENT POTENTIAL
409 ! ------------------------------
410 !
411  IF (nptfr .GT. 0) THEN
412  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
413  & -1.d0,bphi1b,s,s,s,s,s,mesh,.true.,mask5)
414  CALL om('M=M+N ', m=am1, n=mbor, mesh=mesh)
415 !
416  IF(courant) THEN
417  CALL matrix(mbor,'M=N ','MATFGUG ',ielmb,ielmb,
418  & 1.d0,mesh%XSGBOR,mesh%YSGBOR,s,uc,vc,s,
419  & mesh,.true.,mask5)
420  CALL om('M=M+N ', m=am1, n=mbor, mesh=mesh)
421  ENDIF
422 !
423  ENDIF
424 !
425  IF(debug.GT.0) WRITE(lu,*) ' - AM MATRIX PREPARED'
426 !
427 ! =========================================
428 ! SECOND MEMBERS
429 ! =========================================
430  IF(debug.GT.0) WRITE(lu,*) ' - PREPARING SECOND MEMBERS CV1,CV2'
431 ! WRITE(LU,*) 'CV1 et CV2'
432 ! ---------------------
433 ! SECOND MEMBERS : CV1
434 ! ---------------------
435 !
436  CALL os('X=C ', x=cv1, c=0.d0)
437 ! ------------------------------
438 ! BOUNDARY TERM: INCIDENT WAVE
439 ! ------------------------------
440 ! --- CALCUL DE i COS(TETAP) GAMMA
441  CALL os('X=CY ', x=t1,y=tetap,c=degrad)
442  CALL os('X=COS(Y)', x=t2,y=t1)
443  CALL os('X=YZ ', x=t3,y=cphi1b,z=t2)
444  CALL os('X=C ', x=t1, c=0.d0)
445 
446  IF (nptfr .GT. 0) THEN
447  CALL vector(t1,'=','MASVEC ',ielmb,
448  & -1.d0,t3,s,s,s,s,s,mesh,.true.,mask1)
449  END IF
450  CALL osdb( 'X=X+Y ' , cv1 , t1 , sbid , cbid , mesh )
451 
452 ! --- CALCUL DE GRAD(Gamma).n : REEL
453  CALL os('X=Y ', x=t2,y=cgrx1b)
454  CALL os('X=Y ', x=t3,y=cgry1b)
455  CALL os('X=C ', x=t1, c=0.d0 )
456  CALL os('X=C ', x=t4, c=1.d0 )
457  IF (nptfr .GT. 0) THEN
458  CALL vector(t1,'=','FLUBDF ',ielmb,
459  & 1.d0,t4,s,s,t2,t3,s,mesh,.true.,mask1)
460  END IF
461  CALL osdb( 'X=X+Y ' , cv1 , t1 , sbid , cbid , mesh )
462 ! ---------------------------------
463 ! BOUNDARY TERM: INCIDENT POTENTIAL
464 ! ---------------------------------
465 ! --- CALCUL DE i COS(TETAP) GAMMA
466  CALL os('X=CY ', x=t1,y=tetap,c=degrad)
467  CALL os('X=COS(Y)', x=t2,y=t1)
468  CALL os('X=YZ ', x=t3,y=cphi1b,z=t2)
469  CALL os('X=C ', x=t1,c=0.d0)
470  IF (nptfr .GT. 0) THEN
471  CALL vector(t1,'=','MASVEC ',ielmb,
472  & -1.d0,t3,s,s,s,s,s,mesh,.true.,mask5)
473  END IF
474  CALL osdb( 'X=X+Y ' , cv1 , t1 , sbid , cbid , mesh )
475 
476 ! --- CALCUL DE GRAD(Gamma).n : REEL
477  CALL os('X=Y ', x=t2,y=cgrx1b)
478  CALL os('X=Y ', x=t3,y=cgry1b)
479  CALL os('X=C ', x=t1, c=0.d0 )
480  CALL os('X=C ', x=t4, c=1.d0 )
481  IF (nptfr .GT. 0) THEN
482  CALL vector(t1,'=','FLUBDF ',ielmb,
483  & 1.d0,t4,s,s,t2,t3,s,mesh,.true.,mask5)
484  END IF
485  CALL osdb( 'X=X+Y ' , cv1 , t1 , sbid , cbid , mesh )
486 ! ------------------------------
487 ! BOUNDARY TERM: FREE EXIT
488 ! ------------------------------
489  IF (nptfr .GT. 0) THEN
490  CALL vector(t1,'=','MASVEC ',ielmb,
491  & 1.d0,cphi2b,s,s,s,s,s,mesh,.true.,mask2)
492  CALL osdb( 'X=X+Y ' , cv1 , t1 , sbid , cbid , mesh )
493  END IF
494 ! ------------------------------
495 ! BOUNDARY TERM: SOLID BOUNDARY
496 ! ------------------------------
497  IF (nptfr .GT. 0) THEN
498  CALL vector(t1,'=','MASVEC ',ielmb,
499  & 1.d0,cphi3b,s,s,s,s,s,mesh,.true.,mask3)
500  CALL osdb( 'X=X+Y ' , cv1 , t1 , sbid , cbid , mesh )
501  END IF
502 ! ------------------------------
503 ! BOUNDARY TERM: IMPOSED WAVE
504 ! ------------------------------
505  IF (nptfr .GT. 0) THEN
506  CALL vector(t1,'=','MASVEC ',ielmb,
507  & 1.d0,cphi4b,s,s,s,s,s,mesh,.true.,mask4)
508  CALL osdb( 'X=X+Y ' , cv1 , t1 , sbid , cbid , mesh )
509  END IF
510 !
511 ! ---------------------
512 ! SECOND MEMBERS : CV2
513 ! ---------------------
514 !
515  CALL os('X=C ', x=cv2, c=0.d0)
516 ! ------------------------------
517 ! BOUNDARY TERM: INCIDENT WAVE
518 ! ------------------------------
519 ! --- CALCUL DE i COS(TETAP) GAMMA : IMAGINAIRE
520  CALL os('X=CY ' , x=t1,y=tetap,c=degrad)
521  CALL os('X=COS(Y)' , x=t2,y=t1)
522  CALL os('X=YZ ' , x=t3,y=dphi1b,z=t2)
523  CALL os('X=C ' , x=t1,c=0.d0)
524  IF (nptfr .GT. 0) THEN
525  CALL vector(t1,'=','MASVEC ',ielmb,
526  & -1.d0,t3,s,s,s,s,s,mesh,.true.,mask1)
527  END IF
528  CALL osdb( 'X=X+Y ' , cv2 , t1 , sbid , cbid , mesh )
529 
530 ! --- CALCUL DE GRAD(Gamma).n : IMAGINAIRE
531  CALL os('X=Y ', x=t2,y=dgrx1b)
532  CALL os('X=Y ', x=t3,y=dgry1b)
533  CALL os('X=C ', x=t1,c=0.d0 )
534  CALL os('X=C ', x=t4,c=1.d0 )
535 
536  IF (nptfr .GT. 0) THEN
537  CALL vector(t1,'=','FLUBDF ',ielmb,
538  & 1.d0,t4,s,s,t2,t3,s,mesh,.true.,mask1)
539  END IF
540  CALL osdb( 'X=X+Y ' , cv2 , t1 , sbid , cbid , mesh )
541 ! ---------------------------------
542 ! BOUNDARY TERM: INCIDENT POTENTIAL
543 ! ---------------------------------
544 ! --- CALCUL DE i COS(TETAP) GAMMA : IMAGINAIRE
545  CALL os('X=CY ', x=t1,y=tetap,c=degrad)
546  CALL os('X=COS(Y)', x=t2,y=t1)
547  CALL os('X=YZ ', x=t3,y=dphi1b,z=t2)
548  CALL os('X=C ', x=t1,c=0.d0)
549  IF (nptfr .GT. 0) THEN
550  CALL vector(t1,'=','MASVEC ',ielmb,
551  & -1.d0,t3,s,s,s,s,s,mesh,.true.,mask5)
552  END IF
553  CALL osdb( 'X=X+Y ' , cv2 , t1 , sbid , cbid , mesh )
554 
555 ! --- CALCUL DE GRAD(Gamma).n : IMAGINAIRE
556  CALL os('X=Y ', x=t2,y=dgrx1b)
557  CALL os('X=Y ', x=t3,y=dgry1b)
558  CALL os('X=C ', x=t1,c=0.d0)
559  CALL os('X=C ', x=t4,c=1.d0)
560 
561  IF (nptfr .GT. 0) THEN
562  CALL vector(t1,'=','FLUBDF ',ielmb,
563  & 1.d0,t4,s,s,t2,t3,s,mesh,.true.,mask5)
564  END IF
565  CALL osdb( 'X=X+Y ' , cv2 , t1 , sbid , cbid , mesh )
566 !
567 ! ------------------------------
568 ! BOUNDARY TERM: FREE EXIT
569 ! ------------------------------
570  IF (nptfr .GT. 0) THEN
571  CALL vector(t1,'=','MASVEC ',ielmb,
572  & 1.d0,dphi2b,s,s,s,s,s,mesh,.true.,mask2)
573  END IF
574  CALL osdb( 'X=X+Y ' , cv2 , t1 , sbid , cbid , mesh )
575 ! ------------------------------
576 ! BOUNDARY TERM: SOLID BOUNDARY
577 ! -----------------------------
578  IF (nptfr .GT. 0) THEN
579  CALL vector(t1,'=','MASVEC ',ielmb,
580  & 1.d0,dphi3b,s,s,s,s,s,mesh,.true.,mask3)
581  CALL osdb( 'X=X+Y ' , cv2 , t1 , sbid , cbid , mesh )
582  END IF
583 ! ------------------------------
584 ! BOUNDARY TERM: IMPOSED WAVE
585 ! ------------------------------
586  IF (nptfr .GT. 0) THEN
587  CALL vector(t1,'=','MASVEC ',ielmb,
588  & 1.d0,dphi4b,s,s,s,s,s,mesh,.true.,mask4)
589  CALL osdb( 'X=X+Y ' , cv2 , t1 , sbid , cbid , mesh )
590  END IF
591 !CP
592 ! IF (NCSIZE.GT.1) THEN
593 ! CALL PARCOM(CV2,2,MESH)
594 ! ENDIF
595 !CP
596  IF(debug.GT.0) WRITE(lu,*) ' - SECOND MEMBERS CV1,CV2 PREPARED'
597 !
598 ! =========================================
599 ! MATRIX BM
600 ! =========================================
601  IF(debug.GT.0) WRITE(lu,*) ' - PREPARING THE BM MATRIX'
602 ! WRITE(LU,*) 'MATRIX BM'
603 !
604 ! ----------------------------------------------------------
605 ! COMPUTES THE MATRIX BM1 FOR THE MU VALUES SPECIFIED
606 ! FOR THE ITERATION 'ITERMU'
607 ! ----------------------------------------------------------
608 !
609  CALL os('X=YZ ', x=t1, y=c , z=cg)
610  CALL os('X=YZ ', x=t2, y=k , z=mu)
611  CALL os('X=YZ ', x=t1, y=t1, z=t2)
612  CALL matrix(bm1,'M=N ','FMATMA ', ielm , ielm ,
613  & 1.d0 , t1,s,s,s,s,s,mesh,msk,maskel)
614 !
615  IF ((courant).AND.(iterkn.GT.0)) THEN
616 ! ----------------------------------------------------------
617 ! ADD TERMS TO BM1 FOR THE CURRENT 2*OMEGA.U TERM
618 ! ----------------------------------------------------------
619 ! ON DESYMETRISE BM1
620  CALL om('M=X(M) ', m=bm1, mesh=mesh)
621 !
622  CALL matrix(bm2,'M=N ','MATVGR ',ielm ,ielm ,
623  & 2d0*omega , s,s,s,uc,vc,s,
624  & mesh,msk,maskel)
625 !
626  CALL om('M=M+N ', m=bm1, n=bm2, mesh=mesh)
627 !
628 ! ----------------------------------------------------------
629 ! ADD TERMS TO THE MATRIX BM1 FOR THE CURRENT : DIV(U) TERM
630 ! ----------------------------------------------------------
631 !
632  CALL vector(t2 , '=' , 'MASBAS ' , ielm ,
633  & 1.d0 , s , s , s , s , s , s ,
634  & mesh , msk , maskel )
635 !
636  CALL vector(t13 , '=' , 'GRADF X' , ielm ,
637  & 1.d0 , uc , s , s , s , s , s ,
638  & mesh , msk , maskel)
639 !
640  CALL vector(t14 , '=' , 'GRADF Y' , ielm ,
641  & 1.d0 , vc , s , s , s , s , s ,
642  & mesh , msk , maskel)
643 !
644  CALL os('X=Y+Z ', x=t15 , y=t14 , z=t13)
645  CALL os('X=Y/Z ', x=t16 , y=t15 , z=t2)
646 !
647  CALL matrix(bm2,'M=N ','FMATMA ',ielm ,ielm ,
648  & omega , t16,s,s,s,s,s,
649  & mesh,msk,maskel)
650 !
651  CALL om('M=M+N ', m=bm1, n=bm2, mesh=mesh)
652  ENDIF
653 
654 
655 ! -------------------------------------------
656 ! ADDS THE BOUNDARY TERM TO BM1
657 ! -------------------------------------------
658 !
659  IF (nptfr .GT. 0) THEN
660 ! ------------------------------
661 ! BOUNDARY TERM: INCIDENT WAVE
662 ! ------------------------------
663  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
664  & -1.d0,aphi1b,s,s,s,s,s,mesh,.true.,mask1)
665 ! WRITE (*,*)'MBOR = ', MBOR%TYPEXT
666  CALL om('M=M+N ', m=bm1, n=mbor, mesh=mesh)
667  END IF
668 ! ------------------------------
669 ! BOUNDARY TERM: FREE EXIT
670 ! ------------------------------
671  IF (nptfr .GT. 0) THEN
672  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
673  & -1.d0,aphi2b,s,s,s,s,s,mesh,.true.,mask2)
674  CALL om('M=M+N ', m=bm1, n=mbor, mesh=mesh)
675  END IF
676 ! ------------------------------
677 ! BOUNDARY TERM: SOLID BOUNDARY
678 ! ------------------------------
679  IF (nptfr .GT. 0) THEN
680  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
681  & -1.d0,aphi3b,s,s,s,s,s,mesh,.true.,mask3)
682  CALL om('M=M+N ', m=bm1, n=mbor, mesh=mesh)
683  END IF
684 ! ------------------------------
685 ! BOUNDARY TERM: IMPOSED WAVE
686 ! ------------------------------
687  IF (nptfr .GT. 0) THEN
688  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
689  & -1.d0,aphi4b,s,s,s,s,s,mesh,.true.,mask4)
690  CALL om('M=M+N ', m=bm1, n=mbor, mesh=mesh)
691  END IF
692 ! ------------------------------
693 ! BOUNDARY TERM: INCIDENT POTENTIAL
694 ! ------------------------------
695  IF (nptfr .GT. 0) THEN
696  CALL matrix(mbor,'M=N ','FMATMA ',ielmb,ielmb,
697  & -1.d0,aphi1b,s,s,s,s,s,mesh,.true.,mask5)
698  CALL om('M=M+N ', m=bm1, n=mbor, mesh=mesh)
699  END IF
700 
701 ! ---------
702 ! AM2 = AM1
703 ! ---------
704 !
705  CALL om('M=N ', m=am2, n=am1, mesh=mesh)
706 !
707 ! --------------------------
708 ! BM1 BECOMES NONSYMMETRICAL
709 ! --------------------------
710 !
711 ! SI ON N'A PAS DE COURANT OU SI ON NE L'A PAS ENCORE PRIS EN COMPTE
712 !
713 ! WRITE(LU,*) 'MATRIX BM non sym'
714  IF ((.NOT.courant).OR.iterkn.EQ.0) THEN
715  CALL om('M=X(M) ', m=bm1, mesh=mesh)
716  ENDIF
717 
718 !
719 ! ----------------------------
720 ! TRIES MASS-LUMPING OF BM1
721 ! ----------------------------
722 !
723 ! MASLU = 1.D0
724 ! CALL LUMP(T1,BM1,MESH,XMESH,MASLU,MSK,MASKEL)
725 ! CALL OM('M=CM ', M=BM1, C=1.D0-MASLU, MESH=MESH)
726 ! CALL OM('M=M+D ', M=BM1, D=T1, MESH=MESH)
727 !
728 ! ----------
729 ! BM2 = -BM1
730 ! ----------
731 !
732  CALL om('M=CN ', m=bm2, n=bm1, c=-1.d0, mesh=mesh)
733 !
734  IF(debug.GT.0) WRITE(lu,*) ' - BM MATRIX PREPARED'
735 !
736 ! =======================================
737 !
738 ! TAKES INTO ACCOUNT DIRICHLET POINTS
739 !
740 ! =======================================
741 !
742  IF ((.NOT.alemon).AND.(.NOT.alemul)) THEN
743  IF (deferl .OR. frotte) THEN
744  WRITE(lu,221) itermu+1
745  ENDIF
746  ENDIF
747  221 FORMAT(/,1x,'SUB-ITERATION NUMBER :',1x,i3,/)
748 !
749  IF(debug.GT.0) WRITE(lu,*) ' - CALLING DIRICH'
751  IF(debug.GT.0) WRITE(lu,*) ' - DIRICH CALLED'
752 !
753 ! ===============================================================
754 !
755 ! INHIBITS POSSIBLE DIAGONAL PRECONDITIONING
756 ! IF AN ELEMENT OF DAM1 IS NEGATIVE OR NULL
757 !
758 ! ===============================================================
759 !
760  IF(debug.GT.0) WRITE(lu,*) ' - CALLING CNTPRE'
761  tmp = slvart%PRECON
762  CALL cntpre(am1%D%R,npoin,tmp,slvart%PRECON)
763  IF(debug.GT.0) WRITE(lu,*) ' - CNTPRE CALLED'
764 ! WRITE(LU,231) SLVART%PRECON
765 ! 231 FORMAT(/,1X,'PRECONDITIONNING AFTER CONTROL :',1X,I3)
766 !
767 ! ==========================================================
768 !
769 ! PRECONDITIONING BLOCK-DIAGONAL:
770 ! THE MATRICES BECOME NONSYMMETRICAL.
771 !
772 ! ==========================================================
773 !
774  IF (3*(slvart%PRECON/3).EQ.slvart%PRECON) THEN
775  CALL om('M=X(M) ', m=am1, mesh=mesh)
776  CALL om('M=X(M) ', m=am2, mesh=mesh)
777  ENDIF
778 !
779 ! ==============================
780 !
781 ! SOLVES THE LINEAR SYSTEM
782 !
783 ! ==============================
784 !
785 ! ----------------------------
786 ! INITIALISES THE UNKNOWN
787 ! ----------------------------
788 !
789  IF(itermu.EQ.0.AND.lf.EQ.0) THEN
790  CALL lump(t1,am1,mesh,1.d0)
791  CALL os('X=Y/Z ', x=phir, y=cv1, z=t1)
792  CALL lump(t1,am2,mesh,1.d0)
793  CALL os('X=Y/Z ', x=phii, y=cv2, z=t1)
794  ENDIF
795 !
796  WRITE(lu,241)
797  241 FORMAT(/,1x,'LINEAR SYSTEM SOLVING (SOLVE)',/)
798 !
799  IF(debug.GT.0) WRITE(lu,*) ' - SOLVING THE LINEAR SYSTEM'
801  IF(debug.GT.0) WRITE(lu,*) ' - LINEAR SYSTEM SOLVED'
802 !
803 ! ============================================================
804 ! DIRECTION LOOP
805 ! - WAVE-CURRENT :checks convergence on the wave vector
806 ! - AUTO ANGLES :checks convergence on TETAP
807 ! ============================================================
808  IF (courant.OR.langauto) THEN
809 ! ------------------------------------------------------
810 ! COMPUTE WAVE INCIDENCE USING SPEED AT THE FREE SURFACE
811 !
812 ! -----------
813  IF(debug.GT.0) WRITE(lu,*) ' - CALLING CALDIR'
814  CALL caldir()
815  IF(debug.GT.0) WRITE(lu,*) ' - CALDIR CALLED'
816 ! -----------
817 ! --> PHIR,PHII
818 ! -- T1,T2,T3,T4
819 ! <-- INCI
820 ! -- DIRECTION OF VECTOR K : INCI
821  CALL os('X=COS(Y)', x=t5,y=inci)
822  CALL os('X=SIN(Y)', x=t6,y=inci)
823 ! T5 = K COS(INCIDENCE)
824  CALL os('X=XY ' , x=t5 , y=k)
825 ! T6 = K SIN(INCIDENCE)
826  CALL os('X=XY ' , x=t6 , y=k)
827 ! ------------------------------------------------------
828 !
829 ! Error Initialisation
830  erreur1=0.d0
831  erreurt=0.d0
832 ! --------------------------------------------------
833 ! CONVERGENCE CRITERION FOR WAVE-CURRENT INTERACTION
834  IF (courant) THEN
835 ! MAX ERROR CALCULATION : NORM( Kn - Kn-1 )/NORM(Kn) < EPSDIR
836 ! ----------------------
837  IF (iterkn.GT.0) THEN
838  DO i=1,npoin
839  erreur1=max(erreur1,
840  & sqrt((kancx%R(i)-t5%R(i))**2+(kancy%R(i)-t6%R(i))**2)/
841  & sqrt(t5%R(i)**2+t6%R(i)**2)
842  & )
843  ENDDO
844  WRITE(lu,*) '--------------------------------------------'
845  WRITE(lu,*) 'WAVE-CURRENT : DIFF. BETWEEN 2 ITER. =',
846  & erreur1
847  WRITE(lu,*) 'LOOP FOR WAVE-CURRENT : TOLERANCE =',
848  & epsdir
849  ELSE
850  WRITE(lu,*) 'INITIAL LOOP FOR WAVE-CURRENT COMPLETED'
851  ENDIF
852  WRITE(lu,*) '----------------------------------------------'
853 ! OLD WAVE VECTOR STORAGE
854 ! -----------------------
855  CALL os( 'X=Y ' , x=kancx , y=t5 )
856  CALL os( 'X=Y ' , x=kancy , y=t6 )
857  ENDIF
858 ! --------------------------------------------------
859 !
860 ! -----------------------------------------------------
861 ! CONVERGENCE CRITERION FOR TETAP AUTOMATIC CALCULATION
862  IF (langauto) THEN
863 ! STORAGE OF INCIDENCE ANGLE ON THE BOUNDARY IN A TABLE
864  DO i=1,nptfr
865  ig = mesh%NBOR%I(i)
866  angdir(i)=inci%R(ig)
867  ENDDO
868 ! TETAP COMPUTATION
869  IF(debug.GT.0) WRITE(lu,*) ' - CALLING CALTETAP'
870  CALL caltetap(teta,
871  & mesh%XSGBOR%R,mesh%YSGBOR%R,angdir,nptfr)
872  IF(debug.GT.0) WRITE(lu,*) ' - CALTETAP CALLED'
873 ! MAX ERROR CALCULATION : MAX(cos(TETAPnew) - cos(TETAPold)) < EPSTP
874 ! ----------------------
875  IF (iterkn.GT.0) THEN
876  DO i=1,nptfr
877  tetap%R(i)=teta(i)
878 ! ADD FACTOR 1-R%P EXP(iALFA) ? ADD PHI?
879  erreurt=max(erreurt,
880  & abs(cos(tetap%R(i)*degrad)-cos(tetapm%R(i)*degrad))
881  & )
882  ENDDO
883  WRITE(lu,*) '-------------------------------------------'
884  WRITE(lu,*) 'AUTO-ANGLES : DIFF. BETWEEN 2 ITER. =',
885  & erreurt
886  WRITE(lu,*) 'LOOP FOR AUTO-ANGLE : TOLERANCE =',
887  & epstp
888  ELSE
889  DO i=1,nptfr
890  tetapm%R(i)=tetap%R(i)
891  tetap%R(i) =teta(i)
892  ENDDO
893  WRITE(lu,*) 'INITIAL LOOP FOR AUTOMATIC ANGLES COMPLETED'
894  ENDIF
895  WRITE(lu,*) '--------------------------------------------'
896  ENDIF
897 ! -----------------------------------------------------
898 !
899 !
900 ! MAX ERROR FOR N PROC
901  IF (ncsize.GT.1) THEN
902  erreurt = p_max(erreurt)
903  erreur1 = p_max(erreur1)
904  END IF
905 !
906 ! ----------------------------------------------------
907 ! CHECK CONVERGENCE FOR DIRECTION LOOP
908  IF ( (erreur1.GT.epsdir).OR.(erreurt.GT.epstp)
909  & .OR.(iterkn.EQ.0) ) THEN
910 ! NEW ITERATION
911  iterkn = iterkn + 1
912  IF (iterkn.LE.nittp) THEN
913  GOTO 98
914  ELSE
915  WRITE(lu,101) iterkn
916  ENDIF
917  ENDIF
918  WRITE(lu,203) iterkn
919 ! REMISE A 1 DU NOMBRE d'ITERATION SUR LE COURRANT ET LA DIRECTION
920  iterkn=1
921 ! =================================================
922 ! END OF THE LOOP ON DIRECTIONS AND WAVE NUMBER
923 ! =================================================
924  ENDIF
925 ! ----------------------------------------------------
926 !
927  101 FORMAT(/,1x,'BERKHO (ARTEMIS): YOU REACHED THE MAXIMUM',
928  & 1x,'NUMBER OF SUB-ITERATIONS FOR CURRENT OR TETAP :)',1x,i3)
929 
930  203 FORMAT(/,1x,'NUMBER OF SUB-ITERATIONS DIRECTION / CURRENT :',
931  & 1x,i3)
932 
933 ! ============================================================
934 !
935 ! COMPUTES THE TOTAL DISSIPATION COEFFICIENT MU_DEFERL + MU_FROTTE
936 ! FOR REGULAR WAVES
937 ! DISSIPATION FOR IRREGULAR WAVE IS LOOKED AT INTO ARTEMIS.F)
938 ! ============================================================
939 !
940  IF (.NOT. alemon .AND. .NOT. alemul) THEN
941  IF (deferl .OR. frotte) THEN
942  ecrhmu=0d0
943 ! COMPUTES DISSIPATION COEFFICIENT MU2
944  IF(debug.GT.0) WRITE(lu,*) ' - CALLING CALCMU'
945  CALL calcmu(itermu)
946  IF(debug.GT.0) WRITE(lu,*) ' - CALCMU CALLED'
947 ! WORK TABLE USED : T1,T4
948 ! WORK TABLE USED AND TO BE CONSERVED : T3 => QB
949 !
950 ! USE RELAXATION METHOD FOR DISSPATION COEFFICIENT MU
951  IF(debug.GT.0) WRITE(lu,*) ' - CALLING RELAXMU'
952  CALL relaxmu(ecrhmu,modhmu,itermu)
953  IF(debug.GT.0) WRITE(lu,*) ' - CALLING RELAXMU'
954 
955 ! WORK TABLE USED : NONE
956 
957 ! ----------------------------------------------------
958 ! CHECKS CONVERGENCE ON THE DISSIPATION ITERATIVE LOOP
959 ! ----------------------------------------------------
960  WRITE(lu,*) ' '
961  WRITE(lu,*) '----------------------------------------------- '
962  IF (ecrhmu.GT.epsdis*modhmu) GOTO 98
963 !
964 ! QB STORAGE
965 ! ----------
966  CALL os('X=Y ', x=qb,y=t3)
967 !
968  WRITE(lu,201) itermu
969  201 FORMAT(/,1x,'NUMBER OF SUB-ITERATIONS FOR DISSIPATION:',
970  & 1x,i3)
971 !
972  ENDIF
973  ENDIF
974 !
975 !
976 !-----------------------------------------------------------------------
977 !
978  RETURN
979  END
type(bief_obj), target am2
type(bief_obj), target unk
type(bief_obj), target am1
type(bief_obj), target mat
type(bief_obj), target h
type(bief_obj), pointer t14
type(bief_obj), pointer t6
type(bief_obj), target mask3
type(bief_obj), target mask4
type(bief_obj), target aphi2b
type(bief_obj), target dgrx1b
type(bief_obj), target mask1
type(bief_obj), target bphi1b
type(bief_obj), target tetap
type(bief_obj), target dphi2b
type(bief_obj), target mbor
subroutine solve(X, A, B, TB, CFG, INFOGR, MESH, AUX)
Definition: solve.f:7
subroutine berkho(LF)
Definition: berkho.f:7
subroutine calcmu(ITERMU)
Definition: calcmu.f:6
subroutine phbor
Definition: phbor.f:4
type(bief_obj), target maskel
type(bief_obj), target kancx
double precision, dimension(:), pointer y
type(bief_obj), target aphi3b
type(bief_obj), target tb
type(bief_obj), target cgry1b
type(bief_obj), target mask5
type(bief_obj), target aphi1b
type(bief_obj), target phii
type(bief_obj), pointer t5
type(bief_obj), target cphi1b
subroutine relaxmu(ECRHMU, MODHMU, ITERMU)
Definition: relaxmu.f:6
type(bief_obj), target phib
type(bief_obj), pointer t15
subroutine om(OP, M, N, D, C, MESH)
Definition: om.f:7
type(bief_obj), target tetapm
type(bief_obj), target cv2
subroutine solvelambda(XK, XUC, XVC, XKX, XKY, XH)
Definition: solvelambda.f:7
type(bief_obj), pointer t2
type(bief_obj), target k
integer, parameter kent
type(bief_obj), target bm1
type(bief_mesh), target mesh
subroutine caldir
Definition: caldir.f:4
type(bief_obj), target mask2
type(bief_obj), target wr
type(bief_obj), target aphi4b
subroutine cntpre(DAM, NPOIN, IPRECO, IPREC2)
Definition: cntpre.f:7
type(bief_obj), target dphi1b
type(bief_obj), target bphi2b
type(bief_obj), target fw
type(bief_obj), target inci
type(bief_obj), target dphi4b
type(bief_obj), pointer t4
type(bief_obj), target phir
type(bief_obj), target uc
type(bief_obj), target vc
subroutine matrix(M, OP, FORMUL, IELM1, IELM2, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL)
Definition: matrix.f:7
double precision, dimension(:), pointer x
subroutine dirich(F, S, SM, FBOR, LIMDIR, WORK, MESH, KDIR, MSK, MASKPT)
Definition: dirich.f:7
type(bief_obj), target rhs
type(bief_obj), target sbid
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.f:7
subroutine osdb(OP, X, Y, Z, C, MESH)
Definition: osdb.f:7
type(bief_obj), target cg
subroutine caltetap(TETA, XSGBOR, YSGBOR, ADIR, NPTFR)
Definition: caltetap.f:6
type(bief_obj), target qb
type(bief_obj), target cgrx1b
type(bief_obj), target cv1
type(bief_obj), pointer t3
type(bief_obj), target bm2
type(bief_obj), target kancy
type(bief_obj), target mu
type(bief_obj), target am3
type(bief_obj), target bphi4b
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
type(bief_obj), target cphi2b
type(bief_obj), target cphi4b
type(bief_obj), pointer t1
type(bief_obj), target lidir
type(bief_obj), target c
type(bief_obj), target s
subroutine pentco(II)
Definition: pentco.f:6
type(bief_obj), pointer t13
type(bief_obj), target dgry1b
type(bief_obj), pointer t16
subroutine lump(DIAG, A, MESH, XMUL)
Definition: lump.f:7
type(bief_obj), target cphi3b
type(bief_obj), target bphi3b
type(bief_obj), target dphi3b
Definition: bief.f:3