WAVEWATCH III  beta 0.0.1
w3canomd.F90
Go to the documentation of this file.
1 
8 
9 #include "w3macros.h"
10 !/ ------------------------------------------------------------------- /
23 MODULE w3canomd
24  !/
25  !/ +-----------------------------------+
26  !/ | |
27  !/ | P.A.E.M. Janssen |
28  !/ | FORTRAN 90 |
29  !/ | Last update : 21-Aug-2014 |
30  !/ +-----------------------------------+
31  !/
32  !/ XX-Jul-2010 : Origination by PAEM JANSSEN
33  !/ 18-Oct-2012 : Adapted to WAVEWATCH III: F. Ardhuin( version 4.07 )
34  !/ 21-Aug-2014 : Bug corrected: only first call wasOK( version 5.01 )
35  !/
36  ! 0. Note by F. Ardhuin:
37  ! In adapting the orginal program to be a WAVEWATCH module, I
38  ! have so far strived to keep the original code. As a result
39  ! some routines are unnecessarily duplicated (e.g. the calculation of
40  ! the group velocity ...). But this can improve the traceability of
41  ! the code.
42  ! The first spectrum (JONSWAP) has been removed from the code
43  !
44  ! 1. Purpose :
45  !
46  !
47  ! CALCULATION OF THE SECOND ORDER CORRECTION TO THE SURFACE GRAVITY
48  ! WAVE SPECTRUM
49  !
50  ! DOCUMENTATION.
51  ! -------------
52  !
53  ! PRESENTLY, THE SOFTWARE IS SET UP TO DO FOR A GIVING FIRST-ORDER
54  ! SPECTRUM AT A GIVEN DEPTH THE DETERMINATION OF THE SECOND ORDER
55  ! CORRECTION (INCLUDING SECOND-HARMONICS, WAVE SET DOWN AND DOPPLER SHIFT
56  ! OWING TO THE STOKES FREQUENCY CORRECTION.
57  !
58  ! EVALUATION OF THE INTERACTION COEFFICIENTS FOR ARBRITRARY DEPTH WOULD
59  ! BE VERY TIME CONSUMING. THEREFORE, THE APPROACH IN THE WAM MODEL IS
60  ! FOLLOWED, WHERE TABLES ARE GENERATED FOR A LOGARITHMIC DEPTH TABLE
61  !
62  ! D(JD) = DEPTHA*DEPTHD**(JD-1)
63  !
64  ! WITH JD AN INTEGER. IN THE PRESENT OPERATIONAL VERSION OF ECWAM JD
65  ! RANGES FROM 1 TO NDEPTH = 74, WHILE DEPTHA = 1. AND DEPTHD = 1.1
66  !
67  ! FINALLY, THIS IS A VERY TIME-CONSUMING CALCULATION, AT LEAST FOR AN
68  ! OPERATIONAL MODEL. i HAVE THEREFORE INTRODUCED THE OPTION THAT THE SECOND-ORDER
69  ! SPECTRUM IS CALCULATED ON A LOWER RESOLUTION GRID (TYPICALLY HALF THE
70  ! RESOLUTION) WHILE THE INFORMATION CONTAINED IN THE FIRST-ORDER SPECTRUM
71  ! IS KEPT ON THE ORIGINAL SPECTRAL GRID.
72  !
73  ! ----------------------------------------------------------------------
74  !
75  !
76  ! 2. Variables and types :
77  !
78  ! Name Type Scope Description
79  ! ----------------------------------------------------------------
80  ! ----------------------------------------------------------------
81  !
82  ! 3. Subroutines and functions :
83  !
84  ! Name Type Scope Description
85  ! ----------------------------------------------------------------
86  ! W3SREF Subr. Public Reflection of waves (shorline, islands...)
87  ! ----------------------------------------------------------------
88  !
89  ! 4. Subroutines and functions used :
90  !
91  ! Name Type Module Description
92  ! ----------------------------------------------------------------
93  ! STRACE Subr. W3SERVMD Subroutine tracing.
94  ! ----------------------------------------------------------------
95  !
96  ! 5. Remarks :
97  !
98  !
99  ! 6. Switches :
100  !
101  ! !/S Enable subroutine tracing.
102  !
103  ! 7. Source code :
104  !/
105  !/ ------------------------------------------------------------------- /
106  !/
107  !
108  !/
109  !/ Public variables
110  !/
111 
112  REAL :: g, pi, zpi, rad, deg
113  INTEGER :: ndepth
114  REAL :: deptha ! first depth in table
115  REAL, SAVE , PRIVATE, ALLOCATABLE :: omega(:)
116 #ifdef W3_OMPG
117  !$omp threadprivate( OMEGA )
118 #endif
119  INTEGER, SAVE , PRIVATE :: counter = 0
120 #ifdef W3_OMPG
121  !$omp threadprivate( COUNTER )
122 #endif
123  ! Tables for non-linear coefficients ...
124  REAL, SAVE , PRIVATE, ALLOCATABLE :: ta(:,:,:,:),tb(:,:,:,:),tc_ql(:,:,:,:),&
125  tt_4m(:,:,:,:),tt_4p(:,:,:,:),tfakh(:,:), &
126  tfak(:,:)
127 #ifdef W3_OMPG
128  !$omp threadprivate( TA, TB, TC_QL, TT_4M, TT_4P, TFAKH, TFAK )
129 #endif
130  INTEGER, SAVE, PRIVATE, ALLOCATABLE :: im_p(:,:),im_m(:,:)
131 #ifdef W3_OMPG
132  !$omp threadprivate( IM_P, IM_M )
133 #endif
134 
135 
136  !
137  !/
138 CONTAINS
139  !/ ------------------------------------------------------------------- /
152  SUBROUTINE w3add2ndorder(E,DEPTH,WN,CG,IACTION)
153  !/
154  !/ +-----------------------------------+
155  !/ | WAVEWATCH III NOAA/NCEP |
156  !/ | F. Ardhuin |
157  !/ | FORTRAN 90 |
158  !/ | Last update : 19-Oct-2012 |
159  !/ +-----------------------------------+
160  !/
161  !/ 19-Oct-2012 : Origination ( version 4.08 )
162  !/
163  ! 1. Purpose :
164  !
165  ! Adds second order spectrum on top of first order spectrum
166  !
167  ! 2. Method :
168  !
169  ! Uses P. Janssen's code for the inverse canonical transform
170  !
171  !
172  ! 3. Parameters :
173  !
174  ! Parameter list
175  ! ----------------------------------------------------------------
176  ! A R.A. I Action density spectrum (1-D)
177  ! CG R.A. I Group velocities.
178  ! WN R.A. I Wavenumbers.
179  ! DEPTH Real I Mean water depth.
180  ! S R.A. O Source term (1-D version).
181  ! D R.A. O Diagonal term of derivative (1-D version).
182  ! ----------------------------------------------------------------
183  ! ----------------------------------------------------------------
184  ! E R.A. I/O Energy density spectrum (1-D), f-theta
185  ! DEPTH Real I Water depth
186  ! WN R.A. wavenumbers
187  ! CG R.A. group velocities
188  ! IACTION Int I Switch to specify if the input spectrum
189  ! is E(f,theta) or A(k,theta)
190  ! ----------------------------------------------------------------
191  !
192  ! 4. Subroutines used :
193  !
194  ! Name Type Module Description
195  ! ----------------------------------------------------------------
196  ! STRACE Subr. W3SERVMD Subroutine tracing.
197  ! ----------------------------------------------------------------
198  !
199  ! 5. Called by :
200  !
201  ! Name Type Module Description
202  ! ----------------------------------------------------------------
203  ! W3SREF Subr. W3REF1MD Shoreline reflection source term
204  ! W3EXPO Subr. N/A Point output post-processor.
205  ! ----------------------------------------------------------------
206  !
207  ! 6. Error messages :
208  !
209  ! None.
210  !
211  ! 7. Remarks :
212  !
213  ! 8. Structure :
214  !
215  ! See source code.
216  !
217  ! 9. Switches :
218  !
219  ! !/S Enable subroutine tracing.
220  !
221  ! 10. Source code :
222  !
223  !/ ------------------------------------------------------------------- /
224  USE constants, ONLY: grav
225  USE w3dispmd
226  USE w3gdatmd, ONLY: nk, nth, nspec, sig, th, dth, igpars
227 
228 #ifdef W3_S
229  USE w3servmd, ONLY: strace
230 #endif
231  !/
232  !
233  IMPLICIT NONE
234  !/
235  !/ ------------------------------------------------------------------- /
236  !/ Parameter list
237  !/
238  REAL, INTENT(INOUT) :: E(NSPEC)
239  REAL, INTENT(IN) :: DEPTH
240  REAL, INTENT(IN) :: WN(NK)
241  REAL, INTENT(IN) :: CG(NK)
242  INTEGER, INTENT(IN) :: IACTION
243  !/
244  !/ ------------------------------------------------------------------- /
245  !/ Local parameters
246  !/
247  INTEGER :: ISPEC, IK, ITH, M
248  REAL :: CO1, ATOE, DPTH
249 #ifdef W3_S
250  INTEGER, SAVE :: IENT = 0
251 #endif
252  LOGICAL, SAVE :: FIRST = .true.
253 #ifdef W3_OMPG
254  !$omp threadprivate( FIRST )
255 #endif
256  REAL, ALLOCATABLE, SAVE :: FR(:), DFIM(:)
257  REAL, ALLOCATABLE, SAVE :: F1(:,:), F3(:,:)
258 #ifdef W3_OMPG
259  !$omp threadprivate( FR, DFIM, F1, F3 )
260 #endif
261  INTEGER, SAVE :: NFRE, NANG
262  INTEGER, SAVE :: NFREH, NANGH
263 #ifdef W3_OMPG
264  !$omp threadprivate( NFRE, NANG, NFREH, NANGH )
265 #endif
266  !/
267  !/ ------------------------------------------------------------------- /
268  !/
269 #ifdef W3_S
270  CALL strace (ient, 'W3ADD2NDORDER')
271 #endif
272  !
273  ! 0. Initializations ------------------------------------------------ *
274  !
275  IF (first) THEN
276  first=.false.
277  nfre=nk
278  nang=nth
279  nfreh=nk
280  nangh=nth
281  g=grav
282  pi = 4.*atan(1.)
283  zpi=2*pi
284  rad = pi/180.
285  deg = 180./pi
286  ALLOCATE(fr(nfre), dfim(nfre))
287  fr(1:nfre)=sig(1:nk)/zpi
288  ! The following can be replaced using DSIP from WWATCH
289  co1 = 0.5*dth
290  dfim(1)= co1*(fr(2)-fr(1))
291  DO m=2,nfre-1
292  dfim(m)=co1*(fr(m+1)-fr(m-1))
293  ENDDO
294  dfim(nfre)=co1*(fr(nfre)-fr(nfre-1))
295  !
296  ALLOCATE(f1(nang,nfre), f3(nang,nfre))
297  ndepth=igpars(6)
298  deptha=igpars(7)
299  END IF
300  dpth = depth
301 
302  DO ik=1,nk
303  IF (iaction.EQ.0) THEN
304  atoe=1
305  ELSE
306  atoe=sig(ik)*zpi / cg(ik)
307  END IF
308  DO ith=1,nth
309  ispec=ith+(ik-1)*nth
310  f1(ith,ik)=e(ispec)*atoe
311  END DO
312  !WRITE(100,'(100G16.8)') SIG(IK)*ZPI,(F1(ITH,IK),ITH=1,NTH)
313 
314  END DO
315  !
316  ! 1. DETERMINE SECOND-ORDER SPECTRUM.
317  !
318 
319  CALL cal_sec_order_spec(f1,f3,nfre,nang,fr,dfim,th, &
320  dth,dpth,+1., nfreh, nangh)
321 
322  !
323  ! 2. Adds 2nd order spectrum to 1st order
324  !
325  DO ik=1,nk
326  IF (iaction.EQ.0) THEN
327  atoe=1
328  ELSE
329  atoe=sig(ik)*zpi / cg(ik)
330  END IF
331  DO ith=1,nth
332  ispec=ith+(ik-1)*nth
333  e(ispec)=f3(ith,ik)/atoe
334  END DO
335  !WRITE(101,'(I3,100G16.8)') SIG(IK)*ZPI,(F3(ITH,IK),ITH=1,NTH)
336  END DO
337 
338 #ifdef W3_T
339  print*,' END CAL_SEC_ORDER_SPEC'
340 #endif
341  RETURN
342 
343  END SUBROUTINE w3add2ndorder
344  !/ ------------------------------------------------------------------- /
345 
346  !-----------------------------------------------------------------------
347  !
367  SUBROUTINE cal_sec_order_spec(F1,F3,NFRE,NANG,FR,DFIM,TH,DELTH, &
368  DPTH,SIGM, NFREH, NANGH)
369  !
370  !*** *CAL_SEC_ORDER_SPEC* DETERMINES SECOND_ORDER SPECTRUM
371  !
372  ! PETER JANSSEN
373  !
374  ! PURPOSE.
375  ! --------
376  !
377  ! DETERMINATION OF SECOND-ORDER SPECTRUM
378  !
379  ! INTERFACE.
380  ! ----------
381  ! *CALL* *CAL_SEC_ORDER_SPEC(F1,F3,NFRE,NANG,FR,
382  ! DFIM,TH,DELTH,DPTH,SIGM)*
383  !
384  ! INPUT:
385  ! *F1* - 2-D FREE WAVE SPECTRUM
386  ! *NFRE* - NUMBER OF FREQUENCIES
387  ! *NANG* - NUMBER OF DIRECTIONS
388  ! *FR* - FREQUENCIES
389  ! *DFIM* - FREQUENCY INCREMENT
390  ! *TH* - DIRECTIONAL ARRAY
391  ! *DELTH* - DIRECTIONAL INCREMENT
392  ! *DPTH* - DEPTH ARRAY
393  ! *SIGM* - FOR SIGM = 1 FORWARD MAPPING
394  ! WHILE FOR SIGM = -1 INVERSE
395  ! MAPPING.
396  !
397  ! OUTPUT:
398  ! *F3* - 2-D SPECTRUM INCLUDING SECOND-ORDER
399  ! CORRECTION
400  !
401  ! METHOD.
402  ! -------
403  ! IS DESCRIBED IN JANSSEN (2009), JFM, 637, 1-44.
404  !
405  ! EXTERNALS.
406  ! ----------
407  ! NONE
408  !
409  !-----------------------------------------------------------------------
410  !
411  IMPLICIT NONE
412 
413  REAL, INTENT(IN) :: F1(NANG,NFRE)
414  REAL, INTENT(OUT) :: F3(NANG,NFRE)
415 
416  INTEGER, INTENT(IN) :: NFRE,NANG,NFREH, NANGH
417 
418  REAL, INTENT(IN) :: DFIM(NFRE),FR(NFRE), TH(NANG), DELTH
419  REAL, INTENT(IN) :: DPTH, SIGM
420 
421  LOGICAL FRSTIME,DOUBLEP
422 
423  INTEGER MDW,M,K, K0,M0,MP,KP,MM,KM,KL,KLL,ML,JD
424  INTEGER, SAVE :: MR, MA,NMAX
425 #ifdef W3_OMPG
426  !$omp threadprivate( MR, MA, NMAX )
427 #endif
428 
429  ! PARAMETER (NFREH=32,NANGH=36)
430 
431  INTEGER, SAVE :: INDEP
432 #ifdef W3_OMPG
433  !$omp threadprivate( INDEP )
434 #endif
435  REAL,ALLOCATABLE :: PF1(:,:),PF3(:,:)
436 
437 
438  REAL DEPTH,ALPHA,GAM_J,DEPTHD
439  REAL OM0,AA1,BB1,&
440  F,EPSMIN,DELFF,SPEC1,SQRTK
441  REAL FRAC,DEL,DELF,D1,D2,D3,D4,C1,&
442  C2,XM,XK
443  REAL, SAVE :: OMSTART
444  REAL, SAVE :: XMR,XMA, DELTHH, CO1
445 #ifdef W3_OMPG
446  !$omp threadprivate( OMSTART, XMR,XMA, DELTHH, CO1 )
447 #endif
448  REAL :: F13(NFREH,NANGH)
449  REAL :: SUM0,AKMEAN
450  REAL :: DELOM(NFREH),THH(NANGH),DFDTH(NFREH)
451 
452  DATA frstime/.true./
453 
454  common/const/depth,alpha,mdw,gam_j,depthd
455  common/precis/doublep
456 
457  !
458  !*** 2. DETERMINE SECOND ORDER CORRECTION TO THE SPECTRUM
459  ! ----------------------------------------------------
460 
461  !
462 #ifdef W3_T
463  print*,' START SECOND-ORDER CALC.'
464 #endif
465 
466  doublep = .true.
467  !
468  !*** 2.1 SET UP OF LOW-RESOLUTION CALCULATION GRID.
469  ! ---------------------------------------------
470  !
471  epsmin = 1.0e-4
472  frac = 0.1
473  omstart = zpi*fr(1)
474  mr = max(1,nfre/nfreh)
475  xmr = 1./float(mr)
476  ma = nang/nangh
477  xma = 1./float(ma)
478  delthh = float(ma)*delth
479 
480  IF (frstime) THEN
481  ! IF (COUNTER.GT.0) THEN
482  ! DEALLOCATE(OMEGA,TFAK,TA,TB,TC_QL,TT_4M,TT_4P,IM_P,IM_M,TFAKH)
483  ! ENDIF
484  ALLOCATE(omega(nfreh))
485  ALLOCATE(tfak(nfre,ndepth))
486  ALLOCATE(ta(nangh,nfreh,nfreh,ndepth))
487  ALLOCATE(tb(nangh,nfreh,nfreh,ndepth))
488  ALLOCATE(tc_ql(nangh,nfreh,nfreh,ndepth))
489  ALLOCATE(tt_4m(nangh,nfreh,nfreh,ndepth))
490  ALLOCATE(tt_4p(nangh,nfreh,nfreh,ndepth))
491  ALLOCATE(im_p(nfreh,nfreh))
492  ALLOCATE(im_m(nfreh,nfreh))
493  ALLOCATE(tfakh(nfreh,ndepth))
494 
495  DO m=1,nfreh
496  omega(m) = zpi*fr(mr*m)
497  ENDDO
498 
499  DO k=1,nangh
500  k0 = ma*k+1
501  IF (k0.GT.nang) k0 = k0-nang
502  thh(k) = th(k0)
503  ENDDO
504 
505  co1 = 1./2.*delthh
506  delom(1) = co1*(omega(2)-omega(1))
507  DO m=2,nfreh-1
508  delom(m)=co1*(omega(m+1)-omega(m-1))
509  ENDDO
510  delom(nfreh)=co1*(omega(nfreh)-omega(nfreh-1))
511  !
512  dfdth = delom/zpi
513  !
514  !*** 2.2 INITIALISE TABLES
515  ! ---------------------
516  !
517  nmax = xmr*(1+nint(log(2.*omega(nfreh)/omstart)/log(1.+frac)))
518  nmax = nmax+1
519 #ifdef W3_T
520  print*,' NMAX = ',nmax
521 #endif
522 
523  depthd = 1.1
524 
525  DO jd=1,ndepth
526  depth = deptha*depthd**(jd-1)
527  DO m=1,nfre
528  om0 = zpi*fr(m)
529  tfak(m,jd) = aki(om0,depth)
530  ENDDO
531  ENDDO
532 
533  indep = 1+nint(log(dpth/deptha)/log(depthd))
534  indep = min(ndepth,indep)
535  indep = max(1,indep)
536 
537  CALL tables_2nd(nfreh,nangh,ndepth,deptha,omstart,frac,xmr,&
538  dfdth,omega,thh)
539  print*, '2ND ORDER TABLES GENERATED:',ndepth,deptha, delthh
540 
541  frstime = .false.
542  ENDIF ! end of test on FRSTIME
543  !
544  counter=counter+1
545  !
546  !*** DETERMINE SOME MOMENTS.
547  ! ----------------------
548  !
549  sum0 = 0.
550  akmean = 0.
551  DO m=1,nfre
552  DO k=1,nang
553  sqrtk=sqrt(tfak(m,indep))
554  sum0 = sum0+f1(k,m)*dfim(m)
555  akmean = akmean+f1(k,m)*dfim(m)/sqrtk
556  ENDDO
557  ENDDO
558  !
559  ! NB: AKMEAN is the mean wavenumber corresponding to Tm0,-1 in deep water
560  !
561  akmean = (sum0/akmean)**2
562 
563  !
564  !*** 2.2 INTERPOLATION OR NOT.
565  ! ------------------------
566  !
567  IF (mr.EQ.1 .AND. ma.EQ.1) THEN
568  !
569  !*** 2.21 NO INTERPOLATION.
570  ! ----------------------
571  !
572 #ifdef W3_T
573  print*,' NO THINNING AND INTERPOLATION'
574  print*,'nanG:',nang,nmax,nfre,ndepth,deptha,depthd,dpth,'##',delth,delthh
575 #endif
576 
577  CALL secspom(f1,f3,nfre,nang,nmax,ndepth,&
578  deptha,depthd,omstart,frac,mr,dfdth,omega,&
579  dpth,akmean,ta,tb,tc_ql,tt_4m,tt_4p,&
580  im_p,im_m,counter)
581  DO m=1,nfre
582  DO k=1,nang
583  delf = f3(k,m)
584  f3(k,m)=max(0.00000001,f1(k,m)+sigm*delf)
585  ENDDO
586  ENDDO
587 
588  ELSE
589 
590  !
591  !*** 2.22 ENERGY CONSERVING INTERPOLATION SCHEME
592  ! -------------------------------------------
593  !
594  print*,' !THINNING AND INTERPOLATION!'
595  ALLOCATE(pf1(nangh,nfreh))
596  ALLOCATE(pf3(nangh,nfreh))
597 
598  pf1 = 0.
599  DO m=1,nfreh
600  DO k=1,nangh
601  m0 = mr*m
602  mp = m0+1
603  mp = min(nfre,mp)
604  mm = m0-1
605 
606  k0 = ma*k+1
607  kp = k0+1
608  km = k0-1
609  delff = 0.
610  DO kl = km,kp
611  kll = kl
612  IF (kll.GT.nang) kll = kll-nang
613  IF (kll.LT.1) kll = kll+nang
614  DO ml = mm,mp
615  del = dfim(ml)
616  delff = delff+del
617  spec1 = f1(kll,ml)
618  pf1(k,m)=pf1(k,m)+spec1*del
619  ENDDO
620  ENDDO
621  pf1(k,m) =pf1(k,m)/delff
622  ENDDO
623  ENDDO
624  !
625  !*** 2.23 DETERMINE SECOND-ORDER SPEC
626  ! --------------------------------
627  !
628  CALL secspom(pf1,pf3,nfreh,nangh,nmax,ndepth,&
629  deptha,depthd,omstart,frac,mr,dfdth,omega,&
630  dpth,akmean,ta,tb,tc_ql,tt_4m,tt_4p,&
631  im_p,im_m,counter)
632  !
633  !*** 2.24 INTERPOLATE TOWARDS HIGH-RES GRID
634  ! --------------------------------------
635  !
636  DO m=1,nfre
637  DO k=1,nang
638  xm = real(m/mr)
639  xk = real((k-1)/ma)
640 
641  m0 = max(1,int(xm))
642  k0 = int(xk)
643 
644  d1 = real(m)/real(mr)-xm
645  d2 = 1.-d1
646  d3 = real(k-1)/real(ma)-xk
647  d4 = 1.-d3
648 
649  IF (k0.LT.1) k0 = k0+nangh
650  mp = min(nfreh,m0+1)
651  kp = k0+1
652  IF (kp.GT.nangh) kp = kp-nangh
653 
654  c1 = pf3(k0,m0)*d4+pf3(kp,m0)*d3
655  c2 = pf3(kp,mp)*d3+pf3(k0,mp)*d4
656 
657  delf = c1*d2+c2*d1
658  f3(k,m)=max(0.00000001,f1(k,m)+sigm*delf)
659  ENDDO
660  ENDDO
661 
662  ENDIF
663 
664 
665  IF (mr.GT.1 .OR. ma.GT.1 ) THEN
666  DO m=1,nfreh
667  aa1 = 0.
668  DO k=1,nangh
669  aa1 = aa1+pf1(k,m)*delthh
670  ENDDO
671  aa1 = max(aa1,epsmin)
672 
673  bb1 = 0.
674  DO k=1,nangh
675  bb1 = bb1+(pf1(k,m)+pf3(k,m))*delthh
676  ENDDO
677  bb1 = max(bb1,epsmin)
678  f = omega(m)/zpi
679 
680 #ifdef W3_T
681  WRITE(6,62) m,f,aa1,bb1,delthh
682  WRITE(80,62) m,f,aa1,bb1,delthh
683 #endif
684  ENDDO
685 
686  DO m=1,nfreh
687  DO k=1,nangh
688  f13(m,k)=pf1(k,m)+pf3(k,m)
689  ENDDO
690  ENDDO
691  ENDIF
692 
693  !
694 #ifdef W3_T
695 62 FORMAT(i4,9f16.9)
696 #endif
697  !
698  RETURN
699  END SUBROUTINE cal_sec_order_spec
700  !
701  !--------------------------------------------------------------------
702  !
720  SUBROUTINE tables_2nd(NFRE,NANG,NDEPTH,DEPTHA,OMSTART,FRAC,XMR,&
721  DFDTH,OMEGA,TH)
722  !
723  !--------------------------------------------------------------------
724  !
725  !*****TABLES** COMPUTES TABLES FOR SECOND ORDER SPECTRUM IN FREQUENCY SPACE.
726  !
727  ! P.JANSSEN DECEMBER 2008
728  !
729  ! PURPOSE
730  ! -------
731  ! DETERMINES TABLES, BASED ON JANSSEN (2008)
732  ! THERE ARE THREE CORRECTIONS:
733  ! 1) GENERATION OF SECOND-HARMONICS
734  ! 2) QUASI-LINEAR EFFECT
735  ! 3) SHIFT OF SPECTRUM BECAUSE OF STOKES FREQUENCY
736  ! CORRECTION.
737  !
738  ! INTERFACE
739  ! ---------
740  ! *CALL* *TABLES(NFRE,NANG,NDEPTH,OMSTART,FRAC,XMR,
741  ! OMEGA,TA,TB,TC_QL,TT_4M,TT_4P,IM_P,IM_M,
742  ! TFAK)*
743  !
744  !
745  ! PARAMETER TYPE PURPOSE.
746  ! --------- ---- -------
747  !
748  ! NFRE INTEGER NUMBER OF FREQUENCIES
749  ! NANG INTEGER NUMBER OF DIRECTIONS
750  ! NDEPTH INTEGER NUMBER OF ENTRIES IN THE DEPTH TABLE
751  ! OMSTART REAL START FREQUENCY
752  ! FRAC REAL FRACTIONAL INCREASE IN FREQUENCY SPACE
753  ! XMR REAL INVERSE OF THINNING FACTOR IN FREQUENCY SPACE
754  ! OMEGA REAL ANGULAR FREQUENCY ARRAY
755  ! DFDTH REAL PRODUCT OF INCREMENT IN FREQUENCY AND DIRECTION
756  ! TH REAL DIRECTION ARRAY
757  ! TA REAL TABLE FOR MINUS INTERACTIONS
758  ! TB REAL TABLE FOR PLUS INTERACTIONS
759  ! TC_QL REAL TABLE FOR QUASI-LINEAR INTERACTIONS
760  ! TT_4M REAL TABLE FOR STOKES FREQUENCY CORRECTION
761  ! TT_4P REAL TABLE FOR STOKES FREQUENCY CORRECTION
762  ! IM_P INTEGER TABLE FOR WAVENUMBER M2 PLUS
763  ! IM_M INTEGER TABLE FOR WAVENUMBER M2 MIN
764  ! TFAK REAL WAVENUMBER TABLE
765  !
766  !
767  ! METHOD
768  ! ------
769  !
770  ! EXTERNALS
771  ! ---------
772  ! NONE
773  !
774  ! REFERENCES
775  ! ----------
776  ! V.E. ZAKHAROV, HAMILTONIAN APPROACH (1968)
777  ! M.A. SROKOSZ, J.G.R.,91,995-1006 (1986)
778  ! P.A.E.M. JANSSEN, ECMWF TECH MEMO (2008),JFM PAPER (2009)
779  !
780  !
781  !--------------------------------------------------------------------
782  !
783  !
784  !
785  IMPLICIT NONE
786 
787  INTEGER NFRE,NANG,NDEPTH,MDW,JD,M,K,M1,K1,MP,MM,L
788 
789  REAL DEPTH,ALPHA,GAM_J,DEPTHA,DEPTHD
790  REAL OM0,TH0,XK0,OM1,TH1,XK1,OM2,XK2,OM0P,XK0P,OM0M,XK0M,OMSTART,&
791  FRAC,XMR,XM2,FAC
792  REAL OMEGA(NFRE),TH(NANG),DFDTH(NFRE)
793 
794  common/const/depth,alpha,mdw,gam_j,depthd
795  !
796  ! 1. COMPUTATION OF WAVENUMBER ARRAY TFAK
797  ! ---------------------------------------
798  !
799  !
800  DO jd=1,ndepth
801  depth = deptha*depthd**(jd-1)
802  DO m=1,nfre
803  om0 = omega(m)
804  tfak(m,jd) = aki(om0,depth)
805  ENDDO
806  WRITE(6,*) 'GENERATING TABLES FOR DEPTH:',jd,depth,deptha,ndepth
807  !
808  ! 2. COMPUTATION OF THE 2nd ORDER COEFFICIENTS.
809  ! ---------------------------------------------
810  !
811  !
812  k1 = 0
813  th1 = th(nang)
814  DO m=1,nfre
815  om0 = omega(m)
816  xk0 = tfak(m,jd)
817 
818  mp = min(m+1,nfre)
819  om0p = omega(mp)
820  xk0p = tfak(mp,jd)
821 
822  mm = max(m-1,1)
823  om0m = omega(mm)
824  xk0m = tfak(mm,jd)
825 
826  DO m1=1,nfre
827 
828  om1 = omega(m1)
829 
830  DO l=1,nang
831  !
832  ! XK0-XK1 CASE
833  !
834  k = k1+l
835  th0 = th(k)
836  om2 = om0-om1
837 
838 
839  IF (abs(om1).LT.om0/2.) THEN
840  xm2 = log(om2/omstart)/log(1.+frac)
841  im_m(m1,m) = nint(xmr*(xm2+1.))
842  xk1 = tfak(m1,jd)
843  xk2 = aki(om2,depth)
844 
845  ta(l,m1,m,jd) = dfdth(m1)*a(xk1,xk2,th1,th0)**2
846  ELSE
847  ta(l,m1,m,jd) = 0.
848  im_m(m1,m) = 1
849  ENDIF
850  !
851  ! XK1+XK0 CASE
852  !
853  om2 = om1+om0
854  xm2 = log(om2/omstart)/log(1.+frac)
855  im_p(m1,m) = nint(xmr*(xm2+1.))
856  xk1 = tfak(m1,jd)
857  xk2 = aki(om2,depth)
858 
859  tb(l,m1,m,jd) = dfdth(m1)*b(xk1,xk2,th1,th0)**2
860  !
861  ! QUASI-LINEAR EFFECT
862  !
863  !
864  tc_ql(l,m1,m,jd) = dfdth(m1)*c_ql(xk0,xk1,th0,th1)
865  !
866  ! STOKES-FREQUENCY CORRECTION
867  !
868  !
869  fac = 2.*g/om1*dfdth(m1)
870  tt_4m(l,m1,m,jd) = &
871  fac*(w2(xk0m,xk1,xk1,xk0m,th0,th1,th1,th0)+&
872  v2(xk0m,xk1,xk1,xk0m,th0,th1,th1,th0))
873  tt_4p(l,m1,m,jd) = &
874  fac*(w2(xk0p,xk1,xk1,xk0p,th0,th1,th1,th0)+&
875  v2(xk0p,xk1,xk1,xk0p,th0,th1,th1,th0))
876  ! Table identical to Janssen: verified.
877  ! IF (JD.EQ.1) WRITE(998,'(F4.1,3I3,5G11.3)') DEPTH,M,M1,L, TB(L,M1,M,JD), &
878  ! TC_QL(L,M1,M,JD) , FAC, TT_4M(L,M1,M,JD), TT_4P(L,M1,M,JD)
879  ENDDO
880  ENDDO
881  ENDDO
882  ENDDO
883  !
884  !
885  !--------------------------------------------------------------------
886  !
887  RETURN
888  END SUBROUTINE tables_2nd
889  !
890  !--------------------------------------------------------------------
891  !
921  SUBROUTINE secspom(F1,F3,NFRE,NANG,NMAX,NDEPTH,&
922  DEPTHA,DEPTHD,OMSTART,FRAC,MR,DFDTH,OMEGA,&
923  DEPTH,AKMEAN,TA,TB,TC_QL,TT_4M,TT_4P,&
924  IM_P,IM_M,COUNTER)
925  !
926  !--------------------------------------------------------------------
927  !
928  !*****SECSPOM** COMPUTES SECOND ORDER SPECTRUM IN FREQUENCY SPACE.
929  !
930  ! P.JANSSEN JULY 2008
931  !
932  ! PURPOSE
933  ! -------
934  ! DETERMINES SECOND-ORDER SPECTRUM, BASED ON JANSSEN (2008)
935  ! THERE ARE THREE CORRECTIONS:
936  ! 1) GENERATION OF SECOND-HARMONICS
937  ! 2) QUASI-LINEAR EFFECT
938  ! 3) SHIFT OF SPECTRUM BECAUSE OF STOKES FREQUENCY
939  ! CORRECTION.
940  !
941  ! INTERFACE
942  ! ---------
943  ! *CALL* *SECSPOM(F1,F3,NFRE,NANG,NMAX,NDEPTH,
944  ! DEPTHA,DEPTHD,OMSTART,FRAC,MR,DFDTH,OMEGA,
945  ! DEPTH,AKMEAN,TA,TB,TC_QL,TT_4M,TT_4P,
946  ! IM_P,IM_M)*
947  !
948  !
949  ! PARAMETER TYPE PURPOSE.
950  ! --------- ---- -------
951  !
952  ! F1 REAL 2D FREE WAVE SPECTRUM (INPUT)
953  ! F3 REAL BOUND WAVES SPECTRUM (OUTPUT)
954  ! NFRE INTEGER NUMBER OF FREQUENCIES
955  ! NANG INTEGER NUMBER OF DIRECTIONS
956  ! NMAX INTEGER MAXIMUM INDEX CORRESPONDS TO TWICE THE CUT-OFF
957  ! FREQUENCY
958  ! NDEPTH INTEGER NUMBER OF ENTRIES IN DEPTH TABLE
959  ! DEPTHA REAL START VALUE DEPTH ARRAY
960  ! DEPTHD REAL INCREMENT DEPTH ARRAY
961  ! OMSTART REAL START VALUE ANG. FREQUENCY ARRAY
962  ! FRAC REAL FRACTIONAL INCREASE IN FREQUENCY SPACE
963  ! MR INTEGER THINNING FACTOR IN FREQUENCY SPACE
964  ! OMEGA REAL ANGULAR FREQUENCY ARRAY
965  ! DEPTH REAL DEPTH ARRAY
966  ! AKMEAN REAL MEAN WAVENUMBER ARRAY
967  ! TA REAL TABLE FOR MINUS INTERACTIONS
968  ! TB REAL TABLE FOR PLUS INTERACTIONS
969  ! TC_QL REAL TABLE FOR QUASI-LINEAR INTERACTIONS
970  ! TT_4M REAL TABLE FOR STOKES FREQUENCY CORRECTION
971  ! TT_4P REAL TABLE FOR STOKES FREQUENCY CORRECTION
972  ! IM_P INTEGER TABLE FOR WAVENUMBER M2 PLUS
973  ! IM_M INTEGER TABLE FOR WAVENUMBER M2 MIN
974  !
975  !
976  !
977  ! METHOD
978  ! ------
979  ! EVALUATE SECOND ORDER SPECTRUM IN FREQUENCY BASED ON
980  ! KRASITSKII'S CANONICAL TRANSFORMATION.
981  !
982  ! EXTERNALS
983  ! ---------
984  ! NONE
985  !
986  ! REFERENCES
987  ! ----------
988  ! V.E. ZAKHAROV, HAMILTONIAN APPROACH (1968)
989  ! M.A. SROKOSZ, J.G.R.,91,995-1006 (1986)
990  ! P.A.E.M. JANSSEN, JFM (2009)
991  !
992  !
993  !--------------------------------------------------------------------
994  !
995  !
996  !
997  USE w3gdatmd, ONLY: igpars
998  IMPLICIT NONE
999 
1000  INTEGER NFRE,NANG,NDEPTH,M,K,M1,K1,M2_M,M2_P,K2,MP,&
1001  MM,L,MR,NMAX,JD,COUNTER
1002  INTEGER IM_P(NFRE,NFRE),IM_M(NFRE,NFRE),IL(NANG,NANG)
1003 
1004  REAL OM0,OM0H,OM1,OM0P,OM0M,&
1005  OMSTART,FRAC,XINCR1,XINCR2,XINCR3,XINCR4,FAC1,FAC2,&
1006  FAC3,T_4M,T_4P,F2K,F2KP,F2KM,F2K1,F2K2,DELM1,DEPTHA,DEPTHD,&
1007  XD,X_MIN
1008  REAL OMEGA(NFRE), DFDTH(NFRE), OMEGAHF(NFRE+1:NMAX)
1009  REAL TA(NANG,NFRE,NFRE,NDEPTH),TB(NANG,NFRE,NFRE,NDEPTH),&
1010  TC_QL(NANG,NFRE,NFRE,NDEPTH),TT_4M(NANG,NFRE,NFRE,NDEPTH),&
1011  TT_4P(NANG,NFRE,NFRE,NDEPTH)
1012  REAL F1(NANG,NFRE),F3(NANG,NFRE),DEPTH
1013  REAL AKMEAN
1014  REAL G1(NANG,NMAX),G3(NANG,NFRE)
1015 
1016  LOGICAL :: LL2H
1017 
1018  !
1019  !*** 1. COMPUTATION OF TAIL OF THE SPECTRUM AND INDEX JD
1020  ! ---------------------------------------------------
1021  !
1022  !
1023  x_min = igpars(9) ! this was 1.1 in Janssen's original code
1024 
1025  DO m=nfre+1,nmax
1026  omegahf(m) = omstart*(1.+frac)**(mr*m-1)
1027  ENDDO
1028 
1029  DO k=1,nang
1030  DO k1=1,nang
1031  l = k-k1
1032  IF (l.GT.nang) l=l-nang
1033  IF (l.LT.1) l=l+nang
1034  il(k,k1) = l
1035  ENDDO
1036  ENDDO
1037 
1038 
1039  ! This was Janssen's version ... limited to kD > X_MIN ... (here set to 1.1)
1040  xd = max(x_min/akmean,depth) ! note by FA: why do we have X_MIN/AKMEAN??!
1041  xd = depth
1042  xd = log(xd/deptha)/log(depthd)+1.
1043  jd = nint(xd)
1044  jd = max(jd,1)
1045  jd = min(jd,ndepth)
1046 
1047  DO m=1,nfre
1048  DO k=1,nang
1049  g1(k,m) = f1(k,m)
1050  g3(k,m) = 0.
1051  ENDDO
1052  ENDDO
1053 
1054  DO m=nfre+1,nmax
1055  DO k=1,nang
1056  g1(k,m) = omega(nfre)**5*g1(k,nfre)/omegahf(m)**5
1057  ENDDO
1058  ENDDO
1059  !
1060  !
1061  !
1062  !
1063  !*** 2. COMPUTATION OF THE 2nd ORDER FREQUENCY SPECTRUM.
1064  ! ---------------------------------------------------
1065  !
1066  !
1067  DO m=1,nfre
1068  om0 = omega(m)
1069  om0h = om0/2.
1070  mp = min(m+1,nfre)
1071  om0p = omega(mp)
1072  mm = max(m-1,1)
1073  om0m = omega(mm)
1074  delm1 = 1./(om0p-om0m)
1075  DO k=1,nang
1076  k2 = k
1077  f2k = g1(k,m)
1078  f2kp = g1(k,mp)
1079  f2km = g1(k,mm)
1080  DO m1=1,nfre
1081  om1 = omega(m1)
1082  ll2h = (abs(om1).LT.om0h)
1083  m2_m = im_m(m1,m)
1084  m2_p = im_p(m1,m)
1085  DO k1=1,nang
1086  f2k1 = g1(k1,m1)
1087  l = il(k,k1)
1088  !
1089  ! 2.1 OM0-OM1 CASE: SECOND HARMONICS
1090  ! OM2 = OM0-OM1
1091  !
1092  IF (ll2h) THEN
1093  f2k2 = g1(k2,m2_m)
1094  fac1 = ta(l,m1,m,jd)
1095  fac2 = f2k1*f2k2+g1(k2,m1)*g1(k1,m2_m)
1096 
1097  xincr1 = fac1*fac2
1098  g3(k,m) = g3(k,m)+xincr1
1099  ENDIF
1100  !
1101  ! 2.2 OM1+OM0 CASE: INFRA-GRAVITY WAVES
1102  ! OM2 = OM1+OM0
1103  !
1104  f2k2 = g1(k2,m2_p)
1105  fac3 = 2.*tb(l,m1,m,jd)
1106  xincr2 = fac3*f2k2
1107  !
1108  ! 2.3 QUASI-LINEAR EFFECT
1109  !
1110  xincr3 = tc_ql(l,m1,m,jd)*f2k
1111  !
1112  ! 2.4 STOKES-FREQUENCY CORRECTION
1113  !
1114  t_4m = tt_4m(l,m1,m,jd)
1115  t_4p = tt_4p(l,m1,m,jd)
1116  xincr4 = -(f2kp*t_4p-f2km*t_4m)*delm1
1117 
1118  g3(k,m) = g3(k,m)+f2k1*(xincr2+xincr3+xincr4)
1119 
1120  ENDDO
1121  ENDDO
1122  ENDDO
1123  ENDDO
1124  !
1125  DO m=1,nfre
1126  DO k=1,nang
1127  f3(k,m) = g3(k,m)
1128  ENDDO
1129  ENDDO
1130  !
1131  !--------------------------------------------------------------------
1132  !
1133  RETURN
1134  END SUBROUTINE secspom
1135 
1136  !
1151  REAL FUNCTION A(XI,XJ,THI,THJ)
1152  !-----------------------------------------------------------------------
1153  !
1154  !*** *REAL FUNCTION* *A(XI,XJ,THI,THJ)
1155  !
1156  !-----------------------------------------------------------------------
1157  !
1158  !*** *A* DETERMINES THE MINUS INTERACTIONS.
1159  !
1160  ! PETER JANSSEN
1161  !
1162  ! PURPOSE.
1163  ! --------
1164  !
1165  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR THREE
1166  ! WAVE INTERACTIONS OF GRAVITY WAVES IN THE
1167  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV)
1168  !
1169  ! INTERFACE.
1170  ! ----------
1171  ! *A(XI,XJ)*
1172  ! *XI* - WAVE NUMBER
1173  ! *XJ* - WAVE NUMBER
1174  ! METHOD.
1175  ! -------
1176  ! NONE
1177  !
1178  ! EXTERNALS.
1179  ! ----------
1180  ! NONE.
1181  !
1182  !-----------------------------------------------------------------------
1183  !
1184  IMPLICIT NONE
1185  common/const/depth,alpha,mdw,gam_j,depthd
1186  INTEGER mdw
1187  REAL depth,alpha,gam_j,deptha,depthd
1188  REAL ri,rj,rk,xi,xj,thi,thj,thk,oi,oj,ok,fi,fj,fk
1189  !
1190  !*** 1. DETERMINE NONLINEAR TRANSFER.
1191  ! --------------------------------
1192  !
1193 
1194  ri = xi
1195  rj = xj
1196  rk = vabs(ri,rj,thi,thj)
1197  thk = vdir(ri,rj,thi,thj)
1198 
1199  oi=omeg(ri)
1200  oj=omeg(rj)
1201  ok=omeg(rk)
1202 
1203  fi = sqrt(oi/(2.*g))
1204  fj = sqrt(oj/(2.*g))
1205  fk = sqrt(ok/(2.*g))
1206 
1207 
1208  a = fk/(fi*fj)*(a1(rk,ri,rj,thk,thi,thj)+&
1209  a3(rk,ri,rj,thk-pi,thi,thj))
1210 
1211  RETURN
1212  END FUNCTION a
1213  !
1228  REAL function b(xi,xj,thi,thj)
1229  !*** *REAL FUNCTION* *B(XI,XJ,THI,THJ)
1230  !
1231  !-----------------------------------------------------------------------
1232  !
1233  !*** *B* DETERMINES THE PLUS INTERACTION COEFFICIENTS.
1234  !
1235  ! PETER JANSSEN
1236  !
1237  ! PURPOSE.
1238  ! --------
1239  !
1240  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR THREE
1241  ! WAVE INTERACTIONS OF GRAVITY WAVES IN THE
1242  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV)
1243  !
1244  ! INTERFACE.
1245  ! ----------
1246  ! *B(XI,XJ)*
1247  ! *XI* - WAVE NUMBER
1248  ! *XJ* - WAVE NUMBER
1249  ! METHOD.
1250  ! -------
1251  ! NONE
1252  !
1253  ! EXTERNALS.
1254  ! ----------
1255  ! NONE.
1256  !
1257  !-----------------------------------------------------------------------
1258  !
1259  IMPLICIT NONE
1260  common/const/depth,alpha,mdw,gam_j,depthd
1261  INTEGER mdw
1262  REAL depth,alpha,gam_j,deptha,depthd
1263  REAL del,ri,rj,rk,xi,xj,thi,thj,thk,oi,oj,ok,fi,fj,fk
1264  !
1265  !*** 1. DETERMINE NONLINEAR TRANSFER.
1266  ! --------------------------------
1267  !
1268  del = 0.
1269  ri = xi
1270  rj = xj
1271  rk = vabs(rj,ri,thj,thi-pi)
1272  thk = vdir(rj,ri,thj,thi-pi)
1273 
1274  oi=omeg(ri)+del
1275  oj=omeg(rj)+del
1276  ok=omeg(rk)+del
1277 
1278  fi = sqrt(oi/(2.*g))
1279  fj = sqrt(oj/(2.*g))
1280  fk = sqrt(ok/(2.*g))
1281 
1282  b = 0.5*fk/(fi*fj)*(a2(rk,ri,rj,thk,thi,thj)+&
1283  a2(rk,rj,ri,thk-pi,thj,thi))
1284 
1285  RETURN
1286  END FUNCTION b
1287  !
1300  REAL function c_ql(xk0,xk1,th0,th1)
1301  !-----------------------------------------------------------------------
1302  !
1303  !*** *REAL FUNCTION* *C_QL(XK0,XK1,TH0,TH1)
1304  !
1305  !-----------------------------------------------------------------------
1306  !
1307  !*** *A* DETERMINES THE QUASI-LINEAR TERM.
1308  !
1309  ! PETER JANSSEN
1310  !
1311  ! PURPOSE.
1312  ! --------
1313  !
1314  ! DETERMINE CONTRIBUTION BY QUASI-LINEAR TERMS
1315  !
1316  ! INTERFACE.
1317  ! ----------
1318  ! *C_QL(XK0,XK1)*
1319  ! *XK0* - WAVE NUMBER
1320  ! *XK1* - WAVE NUMBER
1321  ! METHOD.
1322  ! -------
1323 
1324  ! NONE
1325  !
1326  ! EXTERNALS.
1327  ! ----------
1328  ! NONE.
1329  !
1330  !-----------------------------------------------------------------------
1331  !
1332  IMPLICIT NONE
1333  common/const/depth,alpha,mdw,gam_j,depthd
1334  INTEGER mdw
1335  REAL depth,alpha,gam_j,deptha,depthd
1336  REAL xk0,xk1,th0,th1,om1,f1
1337  !
1338  !*** 1. DETERMINE NONLINEAR TRANSFER.
1339  ! --------------------------------
1340  !
1341  om1 = omeg(xk1)
1342  f1 = sqrt(om1/(2.*g))
1343 
1344  c_ql = 2./f1**2*(b2(xk0,xk1,xk1,xk0,th0,th1,th1,th0)+&
1345  b3(xk0,xk0,xk1,xk1,th0-pi,th0,th1,th1))
1346 
1347  RETURN
1348  END FUNCTION c_ql
1349 
1350  !
1351  !
1367  REAL function vplus(xi,xj,xk,thi,thj,thk)
1368  !-----------------------------------------------------------------------
1369  !
1370  !*** *REAL FUNCTION* *VPLUS(XI,XJ,XK,THI,THJ,THK)
1371  !
1372  !-----------------------------------------------------------------------
1373  !
1374  !*** *VPLUS* DETERMINES THE SECOND-ORDER TRANSFER COEFFICIENT
1375  ! FOR THREE WAVE INTERACTIONS OF GRAVITY WAVES.
1376  !
1377  ! PETER JANSSEN
1378  !
1379  ! PURPOSE.
1380  ! --------
1381  !
1382  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR THREE
1383  ! WAVE INTERACTIONS OF GRAVITY WAVES IN THE
1384  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV)
1385  !
1386  ! INTERFACE.
1387  ! ----------
1388  ! *VPLUS(XI,XJ,XK)*
1389  ! *XI* - WAVE NUMBER
1390  ! *XJ* - WAVE NUMBER
1391  ! *XK* - WAVE NUMBER
1392  ! *THI* - WAVE DIRECTION
1393  ! *THJ* - WAVE DIRECTION
1394  ! *THK* - WAVE DIRECTION
1395  ! METHOD.
1396  ! -------
1397  ! NONE
1398  !
1399  ! EXTERNALS.
1400  ! ----------
1401  ! NONE.
1402  !
1403  !-----------------------------------------------------------------------
1404  !
1405  IMPLICIT NONE
1406  common/const/depth,alpha,mdw,gam_j,depthd
1407  INTEGER mdw
1408  REAL depth,alpha,gam_j,deptha,depthd
1409  REAL del1,ri,rj,rk,xi,xj,xk,thi,thj,thk,oi,oj,ok,qi,qj,qk,&
1410  rij,rik,rjk,sqijk,sqikj,sqjki,zconst
1411  !
1412  !*** 1. DETERMINE NONLINEAR TRANSFER.
1413  ! --------------------------------
1414  !
1415  del1 = 10.**(-12)
1416  zconst=1./(4*sqrt(2.))
1417 
1418  ri = xi
1419  rj = xj
1420  rk = xk
1421 
1422  oi=omeg(ri)+del1
1423  oj=omeg(rj)+del1
1424  ok=omeg(rk)+del1
1425 
1426  qi=oi**2/g
1427  qj=oj**2/g
1428  qk=ok**2/g
1429 
1430  rij = ri*rj*cos(thj-thi)
1431  rik = ri*rk*cos(thk-thi)
1432  rjk = rj*rk*cos(thk-thj)
1433 
1434  sqijk=sqrt(g*ok/(oi*oj))
1435  sqikj=sqrt(g*oj/(oi*ok))
1436  sqjki=sqrt(g*oi/(oj*ok))
1437 
1438  vplus=zconst*( (rij+qi*qj)*sqijk + (rik+qi*qk)*sqikj&
1439  + (rjk+qj*qk)*sqjki )
1440  RETURN
1441  END FUNCTION vplus
1442  !
1458  REAL function vmin(xi,xj,xk,thi,thj,thk)
1459  !-----------------------------------------------------------------------
1460  !
1461  !*** *REAL FUNCTION* *VMIN(XI,XJ,XK,THI,THJ,THK)
1462  !
1463  !-----------------------------------------------------------------------
1464  !
1465  !*** *VMIN* DETERMINES THE SECOND-ORDER TRANSFER COEFFICIENT FOR
1466  ! THREE WAVE INTERACTIONS OF GRAVITY WAVES.
1467  !
1468  ! PETER JANSSEN
1469  !
1470  ! PURPOSE.
1471  ! --------
1472  !
1473  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR THREE
1474  ! WAVE INTERACTIONS OF GRAVITY WAVES IN THE
1475  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV)
1476  !
1477  ! INTERFACE.
1478  ! ----------
1479  ! *VMIN(XI,XJ,XK)*
1480  ! *XI* - WAVE NUMBER
1481  ! *XJ* - WAVE NUMBER
1482  ! *XK* - WAVE NUMBER
1483  ! *THI* - WAVE DIRECTION
1484  ! *THJ* - WAVE DIRECTION
1485  ! *THK* - WAVE DIRECTION
1486  ! METHOD.
1487  ! -------
1488  ! NONE
1489  !
1490  ! EXTERNALS.
1491  ! ----------
1492  ! NONE.
1493  !
1494  !-----------------------------------------------------------------------
1495  !
1496  IMPLICIT NONE
1497  common/const/depth,alpha,mdw,gam_j,depthd
1498  INTEGER mdw
1499  REAL depth,alpha,gam_j,deptha,depthd
1500  REAL del1,ri,rj,rk,xi,xj,xk,thi,thj,thk,oi,oj,ok,qi,qj,qk,&
1501  rij,rik,rjk,sqijk,sqikj,sqjki,zconst
1502  !
1503  !*** 1. DETERMINE NONLINEAR TRANSFER.
1504  ! --------------------------------
1505  !
1506  del1 = 10.**(-12)
1507  zconst=1./(4*sqrt(2.))
1508 
1509  ri = xi
1510  rj = xj
1511  rk = xk
1512 
1513  oi=omeg(ri)+del1
1514  oj=omeg(rj)+del1
1515  ok=omeg(rk)+del1
1516 
1517  qi=oi**2/g
1518  qj=oj**2/g
1519  qk=ok**2/g
1520 
1521  rij = ri*rj*cos(thj-thi)
1522  rik = ri*rk*cos(thk-thi)
1523  rjk = rj*rk*cos(thk-thj)
1524 
1525  sqijk=sqrt(g*ok/(oi*oj))
1526  sqikj=sqrt(g*oj/(oi*ok))
1527  sqjki=sqrt(g*oi/(oj*ok))
1528 
1529  vmin=zconst*( (rij-qi*qj)*sqijk + (rik-qi*qk)*sqikj&
1530  + (rjk+qj*qk)*sqjki )
1531  RETURN
1532  END FUNCTION vmin
1533  !
1551  REAL function u(xi,xj,xk,xl,thi,thj,thk,thl)
1552  !-----------------------------------------------------------------------
1553  !
1554  !*** *REAL FUNCTION* *U(XI,XJ,XK,XL,THI,THJ,THK,THL)
1555  !
1556  !-----------------------------------------------------------------------
1557  !
1558  !*** *U* DETERMINES THE THIRD-ORDER TRANSFER COEFFICIENT FOR FOUR
1559  ! WAVE INTERACTIONS OF GRAVITY WAVES.
1560  !
1561  ! PETER JANSSEN
1562  !
1563  ! PURPOSE.
1564  ! --------
1565  !
1566  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
1567  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
1568  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND CRAWFORD ET AL)
1569  !
1570  ! INTERFACE.
1571  ! ----------
1572  ! *U(XI,XJ,XK,XL)*
1573  ! *XI* - WAVE NUMBER
1574  ! *XJ* - WAVE NUMBER
1575  ! *XK* - WAVE NUMBER
1576  ! *XL* - WAVE NUMBER
1577  ! METHOD.
1578  ! -------
1579  ! NONE
1580  !
1581  ! EXTERNALS.
1582  ! ----------
1583  ! NONE.
1584  !
1585  !-----------------------------------------------------------------------
1586  !
1587  IMPLICIT NONE
1588  common/const/depth,alpha,mdw,gam_j,depthd
1589  INTEGER mdw
1590  REAL depth,alpha,gam_j,deptha,depthd
1591  REAL xi,xj,xk,xl,thi,thj,thk,thl,oi,oj,ok,ol,xik,xjk,xil,xjl,&
1592  oik,ojk,oil,ojl,qi,qj,qik,qjk,qil,qjl,sqijkl,zconst
1593  !
1594  !*** 1. DETERMINE NONLINEAR TRANSFER.
1595  ! --------------------------------
1596  !
1597  zconst=1./(16.)
1598 
1599  oi=omeg(xi)
1600  oj=omeg(xj)
1601  ok=omeg(xk)
1602  ol=omeg(xl)
1603 
1604  xik = vabs(xi,xk,thi,thk)
1605  xjk = vabs(xj,xk,thj,thk)
1606  xil = vabs(xi,xl,thi,thl)
1607  xjl = vabs(xj,xl,thj,thl)
1608  oik=omeg(xik)
1609  ojk=omeg(xjk)
1610  oil=omeg(xil)
1611  ojl=omeg(xjl)
1612 
1613  qi=oi**2/g
1614  qj=oj**2/g
1615  qik=oik**2/g
1616  qjk=ojk**2/g
1617  qil=oil**2/g
1618  qjl=ojl**2/g
1619  sqijkl=sqrt(ok*ol/(oi*oj))
1620  u = zconst*sqijkl*( 2.*(xi**2*qj+xj**2*qi)-qi*qj*(&
1621  qik+qjk+qil+qjl) )
1622  RETURN
1623  END FUNCTION u
1624  !
1642  REAL function w2(xi,xj,xk,xl,thi,thj,thk,thl)
1643  !-----------------------------------------------------------------------
1644  !
1645  !*** *REAL FUNCTION* *W2(XI,XJ,XK,XL,THI,THJ,THK,THL)
1646  !
1647  !-----------------------------------------------------------------------
1648  !
1649  !*** *W2* DETERMINES THE CONTRIBUTION OF THE DIRECT FOUR-WAVE
1650  ! INTERACTIONS OF GRAVITY WAVES OF THE TYPE
1651  ! A_2^*A_3A_4.
1652  !
1653  ! PETER JANSSEN
1654  !
1655  ! PURPOSE.
1656  ! --------
1657  !
1658  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
1659  ! WAVE INTERACTIONS OF GRAVITY WAVES IN THE
1660  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND CRAWFORD ET AL)
1661  !
1662  ! INTERFACE.
1663  ! ----------
1664  ! *W(XI,XJ,XK,XL)*
1665  ! *XI* - WAVE NUMBER
1666  ! *XJ* - WAVE NUMBER
1667  ! *XK* - WAVE NUMBER
1668  ! *XL* - WAVE NUMBER
1669  ! METHOD.
1670  ! -------
1671  ! NONE
1672  !
1673  ! EXTERNALS.
1674  ! ----------
1675  ! NONE.
1676  !
1677  !-----------------------------------------------------------------------
1678  !
1679  IMPLICIT NONE
1680  REAL xi,xj,xk,xl,thi,thj,thk,thl
1681  !
1682  !*** 1. DETERMINE NONLINEAR TRANSFER.
1683  ! --------------------------------
1684  !
1685  w2= u(xi,xj,xk,xl,thi-pi,thj-pi,thk,thl)+&
1686  u(xk,xl,xi,xj,thk,thl,thi-pi,thj-pi)-&
1687  u(xk,xj,xi,xl,thk,thj-pi,thi-pi,thl)-&
1688  u(xi,xk,xj,xl,thi-pi,thk,thj-pi,thl)-&
1689  u(xi,xl,xk,xj,thi-pi,thl,thk,thj-pi)-&
1690  u(xl,xj,xk,xi,thl,thj-pi,thk,thi-pi)
1691  RETURN
1692  END FUNCTION w2
1693  !
1711  REAL function v2(xi,xj,xk,xl,thi,thj,thk,thl)
1712  !-----------------------------------------------------------------------
1713  !
1714  !*** *REAL FUNCTION* *V2(XI,XJ,XK,XL,THI,THJ,THK,THL)
1715  !
1716  !-----------------------------------------------------------------------
1717  !
1718  !*** *V2* DETERMINES THE CONTRIBUTION OF THE VIRTUAL
1719  ! FOUR-WAVE INTERACTIONS OF GRAVITY WAVES.
1720  !
1721  ! PETER JANSSEN
1722  !
1723  ! PURPOSE.
1724  ! --------
1725  !
1726  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
1727  ! WAVE INTERACTIONS OF GRAVITY WAVES IN THE
1728  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND
1729  ! CRAWFORD ET AL)
1730  !
1731  ! INTERFACE.
1732  ! ----------
1733  ! *V2(XI,XJ,XK,XL)*
1734  ! *XI* - WAVE NUMBER
1735  ! *XJ* - WAVE NUMBER
1736  ! *XK* - WAVE NUMBER
1737  ! *XL* - WAVE NUMBER
1738  ! METHOD.
1739  ! -------
1740  ! NONE
1741  !
1742  !
1743  ! EXTERNALS.
1744  ! ----------
1745  ! NONE.
1746  !
1747  !-----------------------------------------------------------------------
1748  !
1749  IMPLICIT NONE
1750  common/const/depth,alpha,mdw,gam_j,depthd
1751  common/precis/doublep
1752  LOGICAL doublep
1753  INTEGER mdw
1754  REAL depth,alpha,gam_j,deptha,depthd
1755  REAL del1,xi,xj,xk,xl,thi,thj,thk,thl,oi,oj,ok,ol,ri,rj,rk,rl,&
1756  rij,rik,rli,rjl,rjk,rkl,thij,thik,thli,thjl,thjk,thkl,oij,&
1757  oik,ojl,ojk,oli,okl,xnik,xnjl,xnjk,xnil,ynil,ynjk,ynjl,ynik,&
1758  znij,znkl,zpij,zpkl,thlj,thil,thkj,thki,thji,thlk
1759  !
1760  !*** 1. DETERMINE NONLINEAR TRANSFER.
1761  ! --------------------------------
1762  !
1763  IF (doublep) THEN
1764  del1=10.**(-5)
1765  ELSE
1766  del1=10.**(-2)
1767  ENDIF
1768 
1769 
1770  ri=xi+del1
1771  rj=xj+del1/2.
1772  rk=xk+del1/3.
1773  rl=xl+del1*(1.+1./2.-1./3.)
1774 
1775  oi=omeg(ri)
1776  oj=omeg(rj)
1777  ok=omeg(rk)
1778  ol=omeg(rl)
1779 
1780  rij = vabs(ri,rj,thi,thj)
1781  thij = vdir(ri,rj,thi,thj)
1782 
1783  rik = vabs(ri,rk,thi,thk-pi)
1784  thik = vdir(ri,rk,thi,thk-pi)
1785 
1786  rli = vabs(rl,ri,thl,thi-pi)
1787  thli = vdir(xl,xi,thl,thi-pi)
1788 
1789  rjl = vabs(rj,rl,thj,thl-pi)
1790  thjl = vdir(rj,rl,thj,thl-pi)
1791 
1792  rjk = vabs(rj,rk,thj,thk-pi)
1793  thjk = vdir(rj,rk,thj,thk-pi)
1794 
1795  rkl = vabs(rk,rl,thk,thl)
1796  thkl = vdir(rk,rl,thk,thl)
1797 
1798  oij=omeg(rij)
1799  oik=omeg(rik)
1800  ojl=omeg(rjl)
1801  ojk=omeg(rjk)
1802  oli=omeg(rli)
1803  okl=omeg(rkl)
1804 
1805  xnik = ok+oik-oi
1806  xnjl = oj+ojl-ol
1807  xnjk = ok+ojk-oj
1808  xnil = oi+oli-ol
1809 
1810  ynil = ol+oli-oi
1811  ynjk = oj+ojk-ok
1812  ynjl = ol+ojl-oj
1813  ynik = oi+oik-ok
1814 
1815  znij = oij-oi-oj
1816  znkl = okl-ok-ol
1817  zpij = oij+oi+oj
1818  zpkl = okl+ok+ol
1819 
1820  thlj = thjl-pi
1821  thil = thli-pi
1822  thkj = thjk-pi
1823  thki = thik-pi
1824  thji = thij-pi
1825  thlk = thkl-pi
1826 
1827  v2= vmin(ri,rk,rik,thi,thk,thik)*vmin(rl,rj,rjl,thl,thj,thlj)*&
1828  (1./xnik+1./xnjl)&
1829  +vmin(rj,rk,rjk,thj,thk,thjk)*vmin(rl,ri,rli,thl,thi,thli)*&
1830  (1./xnjk+1./xnil)&
1831  +vmin(ri,rl,rli,thi,thl,thil)*vmin(rk,rj,rjk,thk,thj,thkj)*&
1832  (1./ynil+1./ynjk)&
1833  +vmin(rj,rl,rjl,thj,thl,thjl)*vmin(rk,ri,rik,thk,thi,thki)*&
1834  (1./ynjl+1./ynik)&
1835  +vmin(rij,ri,rj,thij,thi,thj)*vmin(rkl,rk,rl,thkl,thk,thl)*&
1836  (1./znij+1./znkl)&
1837  +vplus(rij,ri,rj,thji,thi,thj)*vplus(rkl,rk,rl,thlk,thk,thl)*&
1838  (1./zpij+1./zpkl)
1839 
1840  v2 = -v2
1841 
1842  RETURN
1843  END FUNCTION v2
1844  !
1862  REAL function w1(xi,xj,xk,xl,thi,thj,thk,thl)
1863  !-----------------------------------------------------------------------
1864  !
1865  !*** *REAL FUNCTION* *W1(XI,XJ,XK,XL,THI,THJ,THK,THL)
1866  !
1867  !-----------------------------------------------------------------------
1868  !
1869  !*** *W1* DETERMINES THE NONLINEAR TRANSFER COEFFICIENT FOR FOUR
1870  ! WAVE INTERACTIONS OF GRAVITY WAVES OF THE TYPE
1871  ! A_2A_3A_4.
1872  !
1873  ! PETER JANSSEN
1874  !
1875  ! PURPOSE.
1876  ! --------
1877  !
1878  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
1879  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
1880  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND CRAWFORD ET AL)
1881  !
1882  ! INTERFACE.
1883  ! ----------
1884  ! *W1(XI,XJ,XK,XL)*
1885  ! *XI* - WAVE NUMBER
1886  ! *XJ* - WAVE NUMBER
1887  ! *XK* - WAVE NUMBER
1888  ! *XL* - WAVE NUMBER
1889  ! METHOD.
1890  ! -------
1891  ! NONE
1892  !
1893  ! EXTERNALS.
1894  ! ----------
1895  ! NONE.
1896  !
1897  !-----------------------------------------------------------------------
1898  !
1899  IMPLICIT NONE
1900  common/const/depth,alpha,mdw,gam_j,depthd
1901  INTEGER mdw
1902  REAL depth,alpha,gam_j,deptha,depthd
1903  REAL xi,xj,xk,xl,thi,thj,thk,thl
1904  !
1905  !
1906  !*** 1. DETERMINE NONLINEAR TRANSFER.
1907  ! --------------------------------
1908  !
1909  w1= -u(xi,xj,xk,xl,thi-pi,thj,thk,thl)-&
1910  u(xi,xk,xj,xl,thi-pi,thk,thj,thl)-&
1911  u(xi,xl,xj,xk,thi-pi,thl,thj,thk)+&
1912  u(xj,xk,xi,xl,thj,thk,thi-pi,thl)+&
1913  u(xj,xl,xi,xk,thj,thl,thi-pi,thk)+&
1914  u(xk,xl,xi,xj,thk,thl,thi-pi,thj)
1915 
1916  w1=w1/3.
1917 
1918  RETURN
1919  END FUNCTION w1
1920  !
1938  REAL function w4(xi,xj,xk,xl,thi,thj,thk,thl)
1939  !-----------------------------------------------------------------------
1940  !
1941  !*** *REAL FUNCTION* *W4(XI,XJ,XK,XL,THI,THJ,THK,THL)
1942  !
1943  !-----------------------------------------------------------------------
1944  !
1945  !*** *W4* DETERMINES THE NONLINEAR TRANSFER COEFFICIENT FOR FOUR
1946  ! WAVE INTERACTIONS OF GRAVITY WAVES of the type
1947  ! A_^*A_3^*A_4^*.
1948  !
1949  ! PETER JANSSEN
1950  !
1951  ! PURPOSE.
1952  ! --------
1953  !
1954  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
1955  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
1956  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND CRAWFORD ET AL)
1957  !
1958  ! INTERFACE.
1959  ! ----------
1960  ! *W4(XI,XJ,XK,XL)*
1961  ! *XI* - WAVE NUMBER
1962  ! *XJ* - WAVE NUMBER
1963  ! *XK* - WAVE NUMBER
1964  ! *XL* - WAVE NUMBER
1965  ! METHOD.
1966  ! -------
1967  ! NONE
1968  !
1969  ! EXTERNALS.
1970  ! ----------
1971  ! NONE.
1972  !
1973  !-----------------------------------------------------------------------
1974  !
1975  IMPLICIT NONE
1976  common/const/depth,alpha,mdw,gam_j,depthd
1977  INTEGER mdw
1978  REAL depth,alpha,gam_j,deptha,depthd
1979  REAL xi,xj,xk,xl,thi,thj,thk,thl
1980  !
1981  !
1982  !*** 1. DETERMINE NONLINEAR TRANSFER.
1983  ! --------------------------------
1984  !
1985 
1986  w4= u(xi,xj,xk,xl,thi,thj,thk,thl)+&
1987  u(xi,xk,xj,xl,thi,thk,thj,thl)+&
1988  u(xi,xl,xj,xk,thi,thl,thj,thk)+&
1989  u(xj,xk,xi,xl,thj,thk,thi,thl)+&
1990  u(xj,xl,xi,xk,thj,thl,thi,thk)+&
1991  u(xk,xl,xi,xj,thk,thl,thi,thj)
1992 
1993 
1994  w4=w4/3.
1995 
1996  RETURN
1997  END FUNCTION w4
1998 
2015  REAL function b3(xi,xj,xk,xl,thi,thj,thk,thl)
2016  !-----------------------------------------------------------------------
2017  !
2018  !*** *REAL FUNCTION* *B3(XI,XJ,XK,XL,THI,THJ,THK,THL)
2019  !
2020  !-----------------------------------------------------------------------
2021  !
2022  !*** *B3* WEIGHTS OF THE A_2^*A_3^*A_4 PART OF THE
2023  ! CANONICAL TRANSFORMATION.
2024  !
2025  ! PETER JANSSEN
2026  !
2027  ! PURPOSE.
2028  ! --------
2029  !
2030  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
2031  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
2032  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND CRAWFORD ET AL)
2033  !
2034  ! INTERFACE.
2035  ! ----------
2036  ! *B3(XI,XJ,XK,XL)*
2037  ! *XI* - WAVE NUMBER
2038  ! *XJ* - WAVE NUMBER
2039  ! *XK* - WAVE NUMBER
2040  ! *XL* - WAVE NUMBER
2041  ! METHOD.
2042  ! -------
2043  ! NONE
2044  !
2045  !
2046  ! EXTERNALS.
2047  ! ----------
2048  ! NONE.
2049  !
2050  !-----------------------------------------------------------------------
2051  !
2052  IMPLICIT NONE
2053  common/const/depth,alpha,mdw,gam_j,depthd
2054  common/precis/doublep
2055  LOGICAL doublep
2056  INTEGER mdw
2057  REAL depth,alpha,gam_j,deptha,depthd
2058  REAL del1,xi,xj,xk,xl,thi,thj,thk,thl,oi,oj,ok,ol,ri,rj,rk,rl,&
2059  rij,rji,rik,rki,rlj,rjl,rjk,rkj,rli,ril,rlk,rkl,thij,thji,&
2060  thik,thki,thlj,thjl,thjk,thkj,thli,thil,thlk,thkl,zijkl
2061  !
2062  !*** 1. DETERMINE NONLINEAR TRANSFER.
2063  ! --------------------------------
2064  !
2065  IF (doublep) THEN
2066  del1=10.**(-5)
2067  ELSE
2068  del1=0.01
2069  ENDIF
2070 
2071  ri=xi
2072  rj=xj
2073  rk=xk
2074  rl=xl
2075 
2076  oi=omeg(ri)+del1
2077  oj=omeg(rj)+del1
2078  ok=omeg(rk)+del1
2079  ol=omeg(rl)+del1
2080 
2081  rij = vabs(ri,rj,thi,thj)
2082  thij = vdir(ri,rj,thi,thj)
2083 
2084  rji = vabs(rj,ri,thj,thi)
2085  thji = vdir(rj,ri,thj,thi)
2086 
2087  rik = vabs(ri,rk,thi,thk)
2088  thik = vdir(ri,rk,thi,thk)
2089 
2090  rki = vabs(rk,ri,thk,thi)
2091  thki = vdir(rk,ri,thk,thi)
2092 
2093  rlj = vabs(rl,rj,thl,thj-pi)
2094  thlj = vdir(rl,rj,thl,thj-pi)
2095 
2096  rjl = vabs(rj,rl,thj,thl-pi)
2097  thjl = vdir(rj,rl,thj,thl-pi)
2098 
2099  rjk = vabs(rj,rk,thj,thk)
2100  thjk = vdir(rj,rk,thj,thk)
2101 
2102  rkj = vabs(rk,rj,thk,thj)
2103  thkj = vdir(rk,rj,thk,thj)
2104 
2105  rli = vabs(rl,ri,thl,thi-pi)
2106  thli = vdir(rl,ri,thl,thi-pi)
2107 
2108  ril = vabs(ri,rl,thi,thl-pi)
2109  thil = vdir(ri,rl,thi,thl-pi)
2110 
2111  rlk = vabs(rl,rk,thl,thk-pi)
2112  thlk = vdir(rl,rk,thl,thk-pi)
2113 
2114  rkl = vabs(rk,rl,thk,thl-pi)
2115  thkl = vdir(rk,rl,thk,thl-pi)
2116 
2117  zijkl = oi+oj+ok-ol
2118 
2119  b3= -1./zijkl*(2.*( &
2120  vmin(rl,ri,rli,thl,thi,thli)*a1(rjk,rj,rk,thjk,thj,thk)&
2121  -vmin(rij,ri,rj,thij,thi,thj)*a1(rl,rk,rlk,thl,thk,thlk)&
2122  -vmin(rik,ri,rk,thik,thi,thk)*a1(rl,rj,rlj,thl,thj,thlj)&
2123  -vplus(rj,ri,rji,thj,thi,thji-pi)*a1(rk,rl,rkl,thk,thl,thkl)&
2124  -vplus(rk,ri,rki,thk,thi,thki-pi)*a1(rj,rl,rjl,thj,thl,thjl)&
2125  +vmin(ri,rl,ril,thi,thl,thil)*a3(rj,rk,rjk,thj,thk,thjk-pi))&
2126  +3.*w1(rl,rk,rj,ri,thl,thk,thj,thi) )
2127 
2128  RETURN
2129  END FUNCTION b3
2130  !
2148  REAL function b4(xi,xj,xk,xl,thi,thj,thk,thl)
2149  !-----------------------------------------------------------------------
2150  !
2151  !*** *REAL FUNCTION* *B4(XI,XJ,XK,XL,THI,THJ,THK,THL)
2152  !
2153  !-----------------------------------------------------------------------
2154  !
2155  !*** *B4* WEIGHTS OF THE A_2^*A_3^*A_4^* PART OF THE CANONICAL
2156  ! TRANSFORMATION.
2157  !
2158  ! PETER JANSSEN
2159  !
2160  ! PURPOSE.
2161  ! --------
2162  !
2163  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
2164  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
2165  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND CRAWFORD ET AL)
2166  !
2167  ! INTERFACE.
2168  ! ----------
2169  ! *B4(XI,XJ,XK,XL)*
2170  ! *XI* - WAVE NUMBER
2171  ! *XJ* - WAVE NUMBER
2172  ! *XK* - WAVE NUMBER
2173  ! *XL* - WAVE NUMBER
2174  ! METHOD.
2175  ! -------
2176  ! NONE
2177  !
2178  !
2179  ! EXTERNALS.
2180  ! ----------
2181  ! NONE.
2182  !
2183  !-----------------------------------------------------------------------
2184  !
2185  IMPLICIT NONE
2186  common/const/depth,alpha,mdw,gam_j,depthd
2187  common/precis/doublep
2188  LOGICAL doublep
2189  INTEGER mdw
2190  REAL depth,alpha,gam_j,deptha,depthd
2191  REAL del1,xi,xj,xk,xl,thi,thj,thk,thl,oi,oj,ok,ol,ri,rj,rk,rl,&
2192  rij,rik,ril,rjl,rjk,rkl,thij,thik,thil,thjl,thjk,thlk,thkl,&
2193  zijkl
2194  !
2195  !*** 1. DETERMINE NONLINEAR TRANSFER.
2196  ! --------------------------------
2197  !
2198 
2199 
2200  ri=xi
2201  rj=xj
2202  rk=xk
2203  rl=xl
2204 
2205  oi=omeg(ri)
2206  oj=omeg(rj)
2207  ok=omeg(rk)
2208  ol=omeg(rl)
2209 
2210 
2211  rij = vabs(ri,rj,thi,thj)
2212  thij = vdir(ri,rj,thi,thj)
2213 
2214  rik = vabs(ri,rk,thi,thk)
2215  thik = vdir(ri,rk,thi,thk)
2216 
2217  ril = vabs(ri,rl,thi,thl)
2218  thil = vdir(ri,rl,thi,thl)
2219 
2220  rjl = vabs(rj,rl,thj,thl)
2221  thjl = vdir(rj,rl,thj,thl)
2222 
2223  rjk = vabs(rj,rk,thj,thk)
2224  thjk = vdir(rj,rk,thj,thk)
2225 
2226  rkl = vabs(rk,rl,thk,thl)
2227  thkl = vdir(rk,rl,thk,thl)
2228 
2229 
2230  zijkl = oi+oj+ok+ol
2231 
2232  b4= -1./zijkl*(2./3.*( &
2233  vplus(rij,ri,rj,thij-pi,thi,thj)*a1(rkl,rk,rl,thkl,thk,thl)&
2234  +vplus(rik,ri,rk,thik-pi,thi,thk)*a1(rjl,rj,rl,thjl,thj,thl)&
2235  +vplus(ril,ri,rl,thil-pi,thi,thl)*a1(rjk,rj,rk,thjk,thj,thk)&
2236  +vmin(rik,ri,rk,thik,thi,thk)*a3(rjl,rj,rl,thjl-pi,thj,thl)&
2237  +vmin(ril,ri,rl,thil,thi,thl)*a3(rjk,rj,rk,thjk-pi,thj,thk)&
2238  +vmin(rij,ri,rj,thij,thi,thj)*a3(rkl,rk,rl,thkl-pi,thk,thl) )&
2239  +w4(ri,rj,rk,rl,thi,thj,thk,thl) )
2240 
2241  RETURN
2242  END FUNCTION b4
2243  !
2261  REAL function b1(xi,xj,xk,xl,thi,thj,thk,thl)
2262  !-----------------------------------------------------------------------
2263  !
2264  !*** *REAL FUNCTION* *B1(XI,XJ,XK,XL,THI,THJ,THK,THL)
2265  !
2266  !-----------------------------------------------------------------------
2267  !
2268  !*** *B1* WEIGHTS OF THE A_2A_3A_4 PART OF THE CANONICAL
2269  ! TRANSFORMATION.
2270  !
2271  ! PETER JANSSEN
2272  !
2273  ! PURPOSE.
2274  ! --------
2275  !
2276  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
2277  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
2278  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND CRAWFORD ET AL)
2279  !
2280  ! INTERFACE.
2281  ! ----------
2282  ! *B1(XI,XJ,XK,XL)*
2283  ! *XI* - WAVE NUMBER
2284  ! *XJ* - WAVE NUMBER
2285  ! *XK* - WAVE NUMBER
2286  ! *XL* - WAVE NUMBER
2287  ! METHOD.
2288  ! -------
2289  ! NONE
2290  !
2291  !
2292  ! EXTERNALS.
2293  ! ----------
2294  ! NONE.
2295  !
2296  !-----------------------------------------------------------------------
2297  !
2298  IMPLICIT NONE
2299  common/const/depth,alpha,mdw,gam_j,depthd
2300  common/precis/doublep
2301  LOGICAL doublep
2302  INTEGER mdw
2303  REAL depth,alpha,gam_j,deptha,depthd
2304  REAL del1,xi,xj,xk,xl,thi,thj,thk,thl,oi,oj,ok,ol,ri,rj,rk,rl,&
2305  rij,rji,rik,rki,rjl,rjk,rli,ril,rkl,thij,thji,&
2306  thik,thki,thjl,thjk,thli,thil,thkl,zijkl
2307  !
2308  !
2309  !*** 1. DETERMINE NONLINEAR TRANSFER.
2310  ! --------------------------------
2311  !
2312 
2313  ri=xi
2314  rj=xj
2315  rk=xk
2316  rl=xl
2317 
2318  oi=omeg(ri)
2319  oj=omeg(rj)
2320  ok=omeg(rk)
2321  ol=omeg(rl)
2322 
2323  rij = vabs(ri,rj,thi,thj-pi)
2324  thij = vdir(ri,rj,thi,thj-pi)
2325 
2326  rji = vabs(rj,ri,thj,thi-pi)
2327  thji = vdir(rj,ri,thj,thi-pi)
2328 
2329  rik = vabs(ri,rk,thi,thk-pi)
2330  thik = vdir(ri,rk,thi,thk-pi)
2331 
2332  rki = vabs(rk,ri,thk,thi-pi)
2333  thki = vdir(rk,ri,thk,thi-pi)
2334 
2335  ril = vabs(ri,rl,thi,thl-pi)
2336  thil = vdir(ri,rl,thi,thl-pi)
2337 
2338  rli = vabs(rl,ri,thl,thi-pi)
2339  thli = vdir(rl,ri,thl,thi-pi)
2340 
2341  rjl = vabs(rj,rl,thj,thl)
2342  thjl = vdir(rj,rl,thj,thl)
2343 
2344  rjk = vabs(rj,rk,thj,thk)
2345  thjk = vdir(rj,rk,thj,thk)
2346 
2347  rkl = vabs(rk,rl,thk,thl)
2348  thkl = vdir(rk,rl,thk,thl)
2349 
2350  zijkl = oi-oj-ok-ol
2351 
2352  b1= -1./zijkl*(2./3.*( &
2353  min(ri,rj,rij,thi,thj,thij)*a1(rkl,rk,rl,thkl,thk,thl)&
2354  +vmin(ri,rk,rik,thi,thk,thik)*a1(rjl,rj,rl,thjl,thj,thl)&
2355  +vmin(ri,rl,ril,thi,thl,thil)*a1(rjk,rj,rk,thjk,thj,thk)&
2356  +vmin(rk,ri,rki,thk,thi,thki)*a3(rjl,rj,rl,thjl-pi,thj,thl)&
2357  +vmin(rl,ri,rli,thl,thi,thli)*a3(rjk,rj,rk,thjk-pi,thj,thk)&
2358  +vmin(rj,ri,rji,thj,thi,thji)*a3(rkl,rk,rl,thkl-pi,thk,thl) &
2359  ) +w1(ri,rj,rk,rl,thi,thj,thk,thl) )
2360  RETURN
2361  END FUNCTION b1
2362  !
2380  REAL function b2(xi,xj,xk,xl,thi,thj,thk,thl)
2381  !-----------------------------------------------------------------------
2382  !
2383  !*** *REAL FUNCTION* *B2(XI,XJ,XK,XL,THI,THJ,THK,THL)
2384  !
2385  !-----------------------------------------------------------------------
2386  !
2387  !*** *B2* WEIGHTS OF THE A_2^*A_3A_4 PART OF THE CANONICAL
2388  ! TRANSFORMATION.
2389  !
2390  ! PETER JANSSEN
2391  !
2392  ! PURPOSE.
2393  ! --------
2394  !
2395  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR FOUR
2396  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
2397  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV,AND CRAWFORD ET AL)
2398  !
2399  ! INTERFACE.
2400  ! ----------
2401  ! *B2(XI,XJ,XK,XL)*
2402  ! *XI* - WAVE NUMBER
2403  ! *XJ* - WAVE NUMBER
2404  ! *XK* - WAVE NUMBER
2405  ! *XL* - WAVE NUMBER
2406  ! METHOD.
2407  ! -------
2408  ! NONE
2409  !
2410  !
2411  ! EXTERNALS.
2412  ! ----------
2413  ! NONE.
2414  !
2415  !-----------------------------------------------------------------------
2416  !
2417  IMPLICIT NONE
2418  common/const/depth,alpha,mdw,gam_j,depthd
2419  common/precis/doublep
2420  LOGICAL doublep
2421  INTEGER mdw
2422  REAL depth,alpha,gam_j,deptha,depthd
2423  REAL del1,xi,xj,xk,xl,thi,thj,thk,thl,oi,oj,ok,ol,ri,rj,rk,rl,&
2424  rij,rik,rki,rjl,rlj,rjk,rkj,rli,ril,rkl,thij,&
2425  thik,thki,thjl,thlj,thjk,thkj,thli,thil,thkl,zijkl
2426  !
2427  !*** 1. DETERMINE NONLINEAR TRANSFER.
2428  ! --------------------------------
2429  !
2430 
2431  ri=xi
2432  rj=xj
2433  rk=xk
2434  rl=xl
2435 
2436  rij = vabs(ri,rj,thi,thj)
2437  thij = vdir(ri,rj,thi,thj)
2438 
2439  rik = vabs(ri,rk,thi,thk-pi)
2440  thik = vdir(ri,rk,thi,thk-pi)
2441 
2442  rki = vabs(rk,ri,thk,thi-pi)
2443  thki = vdir(rk,ri,thk,thi-pi)
2444 
2445  ril = vabs(ri,rl,thi,thl-pi)
2446  thil = vdir(ri,rl,thi,thl-pi)
2447 
2448  rli = vabs(rl,ri,thl,thi-pi)
2449  thli = vdir(rl,ri,thl,thi-pi)
2450 
2451  rjl = vabs(rj,rl,thj,thl-pi)
2452  thjl = vdir(rj,rl,thj,thl-pi)
2453 
2454  rlj = vabs(rl,rj,thl,thj-pi)
2455  thlj = vdir(rl,rj,thl,thj-pi)
2456 
2457  rjk = vabs(rj,rk,thj,thk-pi)
2458  thjk = vdir(rj,rk,thj,thk-pi)
2459 
2460  rkj = vabs(rk,rj,thk,thj-pi)
2461  thkj = vdir(rk,rj,thk,thj-pi)
2462 
2463  rkl = vabs(rk,rl,thk,thl)
2464  thkl = vdir(rk,rl,thk,thl)
2465 
2466  b2= a3(ri,rj,rij,thi,thj,thij-pi)*a3(rk,rl,rkl,thk,thl,thkl-pi)&
2467  +a1(rj,rk,rjk,thj,thk,thjk)*a1(rl,ri,rli,thl,thi,thli)&
2468  +a1(rj,rl,rjl,thj,thl,thjl)*a1(rk,ri,rki,thk,thi,thki)&
2469  -a1(rij,ri,rj,thij,thi,thj)*a1(rkl,rk,rl,thkl,thk,thl)&
2470  -a1(ri,rk,rik,thi,thk,thik)*a1(rl,rj,rlj,thl,thj,thlj)&
2471  -a1(ri,rl,ril,thi,thl,thil)*a1(rk,rj,rkj,thk,thj,thkj)
2472 
2473 
2474  RETURN
2475  END FUNCTION b2
2476  !
2491  REAL function a1(xi,xj,xk,thi,thj,thk)
2492  !-----------------------------------------------------------------------
2493  !
2494  !*** *REAL FUNCTION* *A1(XI,XJ,XK,THI,THJ,THK)
2495  !
2496  !-----------------------------------------------------------------------
2497  !
2498  !*** *A1* AUXILIARY SECOND-ORDER COEFFICIENT.
2499  !
2500  ! PETER JANSSEN
2501  !
2502  ! PURPOSE.
2503  ! --------
2504  !
2505  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR THREE
2506  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
2507  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV)
2508  !
2509  ! INTERFACE.
2510  ! ----------
2511  ! *VMIN(XI,XJ,XK)*
2512  ! *XI* - WAVE NUMBER
2513  ! *XJ* - WAVE NUMBER
2514  ! *XK* - WAVE NUMBER
2515  ! METHOD.
2516  ! -------
2517  ! NONE
2518  !
2519  ! EXTERNALS.
2520  ! ----------
2521  ! NONE.
2522  !
2523  !-----------------------------------------------------------------------
2524  !
2525  IMPLICIT NONE
2526  common/const/depth,alpha,mdw,gam_j,depthd
2527  common/precis/doublep
2528  LOGICAL doublep
2529  INTEGER mdw
2530  REAL depth,alpha,gam_j,deptha,depthd
2531  REAL del1,xi,xj,xk,thi,thj,thk,oi,oj,ok
2532  !
2533  !*** 1. DETERMINE NONLINEAR TRANSFER.
2534  ! --------------------------------
2535  !
2536  IF (doublep) THEN
2537  del1 = 10.**(-8)
2538  ELSE
2539  del1 = 10.**(-4)
2540  ENDIF
2541 
2542  oi=omeg(xi)+del1
2543  oj=omeg(xj)+del1
2544  ok=omeg(xk)+del1
2545 
2546  a1 = -vmin(xi,xj,xk,thi,thj,thk)/(oi-oj-ok)
2547 
2548  RETURN
2549  END FUNCTION a1
2550  !
2565  REAL function a2(xi,xj,xk,thi,thj,thk)
2566  !-----------------------------------------------------------------------
2567  !
2568  !*** *REAL FUNCTION* *A2(XI,XJ,XK,THI,THJ,THK)
2569  !
2570  !-----------------------------------------------------------------------
2571  !
2572  !*** *A2* AUXILIARY SECOND-ORDER FUNCTION.
2573  !
2574  ! PETER JANSSEN
2575  !
2576  ! PURPOSE.
2577  ! --------
2578  !
2579  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR THREE
2580  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
2581  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV)
2582  !
2583  ! INTERFACE.
2584  ! ----------
2585  ! *VMIN(XI,XJ,XK)*
2586  ! *XI* - WAVE NUMBER
2587  ! *XJ* - WAVE NUMBER
2588  ! *XK* - WAVE NUMBER
2589  ! METHOD.
2590  ! -------
2591  ! NONE
2592  !
2593  ! EXTERNALS.
2594  ! ----------
2595  ! NONE.
2596  !
2597  !-----------------------------------------------------------------------
2598  !
2599  IMPLICIT NONE
2600  REAL del1,xi,xj,xk,thi,thj,thk
2601  !
2602  !*** 1. DETERMINE NONLINEAR TRANSFER.
2603  ! --------------------------------
2604  !
2605  a2 = -2.*a1(xk,xj,xi,thk,thj,thi)
2606  RETURN
2607  END FUNCTION a2
2608  !
2623  REAL function a3(xi,xj,xk,thi,thj,thk)
2624  !-----------------------------------------------------------------------
2625  !
2626  !*** *REAL FUNCTION* *A3(XI,XJ,XK,THI,THJ,THK)
2627  !
2628  !-----------------------------------------------------------------------
2629  !
2630  !*** *A3* AUXILIARY SECOND-ORDER FUNCTION.
2631  !
2632  ! PETER JANSSEN
2633  !
2634  ! PURPOSE.
2635  ! --------
2636  !
2637  ! GIVES NONLINEAR TRANSFER COEFFICIENT FOR THREE
2638  ! WAVE INTERACTIONS OF GRAVITY-CAPILLARY WAVES IN THE
2639  ! IDEAL CASE OF NO CURRENT. (CF.ZAKHAROV)
2640  !
2641  ! INTERFACE.
2642  ! ----------
2643  ! *VMIN(XI,XJ,XK)*
2644  ! *XI* - WAVE NUMBER
2645  ! *XJ* - WAVE NUMBER
2646  ! *XK* - WAVE NUMBER
2647  ! METHOD.
2648  ! -------
2649  ! NONE
2650  !
2651  ! EXTERNALS.
2652  ! ----------
2653  ! NONE.
2654  !
2655  !-----------------------------------------------------------------------
2656  !
2657  IMPLICIT NONE
2658  common/precis/doublep
2659  LOGICAL doublep
2660  REAL del1,oi,oj,ok,xi,xj,xk,thi,thj,thk
2661  !
2662  !*** 1. DETERMINE NONLINEAR TRANSFER.
2663  ! --------------------------------
2664  !
2665  IF (doublep) THEN
2666  del1 = 10.**(-8)
2667  ELSE
2668  del1 = 10.**(-4)
2669  ENDIF
2670 
2671 
2672  oi=omeg(xi)+del1
2673  oj=omeg(xj)+del1
2674  ok=omeg(xk)+del1
2675 
2676  a3 = -vplus(xi,xj,xk,thi,thj,thk)/(oi+oj+ok)
2677  RETURN
2678  END FUNCTION a3
2679 
2680  !
2691  REAL function omeg(x)
2692  !-----------------------------------------------------------------------
2693  !
2694  !*** *REAL FUNCTION* *OMEG(X)*
2695  !
2696  !-----------------------------------------------------------------------
2697  !
2698  !
2699  !*** *OMEG* DETERMINES THE DISPERSION RELATION FOR GRAVITY
2700  ! WAVES.
2701  !
2702  ! PETER JANSSEN
2703  !
2704  ! PURPOSE.
2705  ! --------
2706  !
2707  ! GIVES DISPERSION RELATION FOR GRAVITY-
2708  ! WAVES IN THE IDEAL CASE OF NO CURRENT.
2709  !
2710  ! INTERFACE.
2711  ! ----------
2712  ! *OMEG(X)*
2713  ! *X* - WAVE NUMBER
2714  !
2715  ! METHOD.
2716  ! -------
2717  ! NONE
2718  !
2719  ! EXTERNALS.
2720  ! ----------
2721  ! NONE.
2722  !
2723  !-----------------------------------------------------------------------
2724  !
2725  IMPLICIT NONE
2726  common/const/depth,alpha,mdw,gam_j,depthd
2727  INTEGER mdw
2728  REAL depth,alpha,gam_j,depthd
2729  REAL d,xk,x,t
2730 
2731  d = depth
2732  xk = abs(x)
2733  t = tanh(xk*d)
2734  omeg=sqrt(g*xk*t)
2735 
2736  RETURN
2737  END FUNCTION omeg
2738  !
2748  REAL function vg(x)
2749  !-----------------------------------------------------------------------
2750  !
2751  !*** *REAL FUNCTION* *VG(X)*
2752  !
2753  !-----------------------------------------------------------------------
2754  !
2755  !*** *VG* DETERMINES THE GROUP VELOCITY FOR GRAVITY- WAVES.
2756  !
2757  ! PETER JANSSEN
2758  !
2759  ! PURPOSE.
2760  ! --------
2761  !
2762  ! GIVES GROUP VELOCITY FOR GRAVITY-
2763  ! WAVES IN THE IDEAL CASE OF NO CURRENT.
2764  !
2765  ! INTERFACE.
2766  ! ----------
2767  ! *VG(X)*
2768  ! *X* - WAVE NUMBER
2769  !
2770  ! METHOD.
2771  ! -------
2772  ! NONE
2773  !
2774  ! EXTERNALS.
2775  ! ----------
2776  ! NONE.
2777  !
2778  !-----------------------------------------------------------------------
2779  !
2780  IMPLICIT NONE
2781  common/const/depth,alpha,mdw,gam_j,depthd
2782  INTEGER mdw
2783  REAL depth,alpha,gam_j,depthd
2784  REAL d,xk,x,xd
2785 
2786  d = depth
2787  xk = abs(x)
2788  xd = xk*depth
2789 
2790  vg = 0.5*sqrt(g*tanh(xd)/xk)*(1.+2.*xd/sinh(2.*xd))
2791 
2792  RETURN
2793  END FUNCTION vg
2794  !---------------------------------------------------------------------
2805  REAL function aki(om,beta)
2806  ! This function gives the wavenumber ...
2807  !---------------------------------------------------------------------
2808  !
2809  IMPLICIT NONE
2810  REAL om,beta,g,ebs,akm1,akm2,ao,akp,bo,th,sth
2811 
2812  g =9.806
2813  ebs=0.0001
2814  akm1=om**2/(4.*g )
2815  akm2=om/(2.*sqrt(g*beta))
2816  ao=max(akm1,akm2)
2817 10 CONTINUE
2818  akp=ao
2819  bo=beta*ao
2820  ! IF (BO.GT.10) GO TO 20
2821  IF (bo.GT.20.) GO TO 20
2822  th=g*ao*tanh(bo)
2823  sth=sqrt(th)
2824  ao=ao+(om-sth)*sth*2./(th/ao+g*bo/cosh(bo)**2)
2825  IF (abs(akp-ao).GT.ebs*ao) GO TO 10
2826  aki=ao
2827  RETURN
2828 20 CONTINUE
2829  aki=om**2/g
2830  RETURN
2831  END FUNCTION aki
2832  !
2845  REAL function vabs(xi,xj,thi,thj)
2846  !
2847  !---------------------------------------------------------------------
2848  !
2849  IMPLICIT NONE
2850  REAL xi,xj,thi,thj,arg
2851 
2852  arg = xi**2+xj**2+2.*xi*xj*cos(thi-thj)
2853 
2854  IF (arg.LE.0.) THEN
2855  vabs = 0.
2856  ELSE
2857  vabs = sqrt(arg)
2858  ENDIF
2859 
2860  RETURN
2861  END FUNCTION vabs
2862  !
2875  REAL function vdir(xi,xj,thi,thj)
2876  !
2877  !---------------------------------------------------------------------
2878  !
2879  IMPLICIT NONE
2880  REAL xi,xj,thi,thj,eps,y,x
2881 
2882  eps = 0.
2883 
2884  y = xj*sin(thj-thi)
2885  x = xi+xj*cos(thj-thi)+eps
2886  vdir = atan2(y,x)+thi
2887  IF (x.EQ.0.) vdir = 0.
2888 
2889  RETURN
2890  END FUNCTION vdir
2891  !/
2892  !/ End of module W3CANOMD -------------------------------------------- /
2893  !/
2894 END MODULE w3canomd
w3gdatmd::nk
integer, pointer nk
Definition: w3gdatmd.F90:1230
w3canomd::c_ql
real function c_ql(XK0, XK1, TH0, TH1)
Determine contribution by quasi-linear terms.
Definition: w3canomd.F90:1301
w3canomd::pi
real pi
Definition: w3canomd.F90:112
w3canomd::aki
real function aki(OM, BETA)
Gives the wavenumber.
Definition: w3canomd.F90:2806
w3gdatmd::dth
real, pointer dth
Definition: w3gdatmd.F90:1232
w3canomd::b
real function b(XI, XJ, THI, THJ)
Gives nonlinear transfer coefficient for three wave interactions interactions of gravity waves in the...
Definition: w3canomd.F90:1229
w3gdatmd::nspec
integer, pointer nspec
Definition: w3gdatmd.F90:1230
w3canomd::rad
real rad
Definition: w3canomd.F90:112
w3canomd::vmin
real function vmin(XI, XJ, XK, THI, THJ, THK)
Determines the second-order transfer coefficient for three wave interactions of gravity waves.
Definition: w3canomd.F90:1459
w3canomd::b2
real function b2(XI, XJ, XK, XL, THI, THJ, THK, THL)
Weights of the A_2^*A_3A_4 part of the canonical transformation.
Definition: w3canomd.F90:2381
w3gdatmd::sig
real, dimension(:), pointer sig
Definition: w3gdatmd.F90:1234
w3canomd::ndepth
integer ndepth
Definition: w3canomd.F90:113
w3gdatmd::th
real, dimension(:), pointer th
Definition: w3gdatmd.F90:1234
w3canomd::tables_2nd
subroutine tables_2nd(NFRE, NANG, NDEPTH, DEPTHA, OMSTART, FRAC, XMR, DFDTH, OMEGA, TH)
Computes tables for second order spectrum in frequency space.
Definition: w3canomd.F90:722
w3canomd::b3
real function b3(XI, XJ, XK, XL, THI, THJ, THK, THL)
Weights of the A_2^*A_3^*A_4 part of the canonical transformation.
Definition: w3canomd.F90:2016
w3canomd::vplus
real function vplus(XI, XJ, XK, THI, THJ, THK)
Determines the second-order transfer coefficient for three wave interactions of gravity waves.
Definition: w3canomd.F90:1368
w3canomd::w1
real function w1(XI, XJ, XK, XL, THI, THJ, THK, THL)
Determines the nonlinear transfer coefficient for four wave interactions of gravity waves of the type...
Definition: w3canomd.F90:1863
w3canomd
Calculation of the second order correction to the surface gravity wave spectrum.
Definition: w3canomd.F90:23
w3servmd
Definition: w3servmd.F90:3
w3canomd::g
real g
Definition: w3canomd.F90:112
w3canomd::u
real function u(XI, XJ, XK, XL, THI, THJ, THK, THL)
Determines the third-order transfer coefficient for four wave interactions of gravity waves.
Definition: w3canomd.F90:1552
w3gdatmd::nth
integer, pointer nth
Definition: w3gdatmd.F90:1230
w3canomd::a3
real function a3(XI, XJ, XK, THI, THJ, THK)
Auxiliary second-order function.
Definition: w3canomd.F90:2624
w3canomd::vdir
real function vdir(XI, XJ, THI, THJ)
NA.
Definition: w3canomd.F90:2876
w3canomd::w2
real function w2(XI, XJ, XK, XL, THI, THJ, THK, THL)
Determines the contribution of the direct four-wave interactions of gravity waves of the type A_2^*A_...
Definition: w3canomd.F90:1643
w3canomd::omeg
real function omeg(X)
Determines the dispersion relation for gravity waves.
Definition: w3canomd.F90:2692
w3canomd::cal_sec_order_spec
subroutine cal_sec_order_spec(F1, F3, NFRE, NANG, FR, DFIM, TH, DELTH, DPTH, SIGM, NFREH, NANGH)
Determines second order spectrum.
Definition: w3canomd.F90:369
w3canomd::w4
real function w4(XI, XJ, XK, XL, THI, THJ, THK, THL)
Determines the nonlinear transfer coefficient for four wave interactions of gravity waves of the type...
Definition: w3canomd.F90:1939
w3canomd::deg
real deg
Definition: w3canomd.F90:112
w3canomd::vg
real function vg(X)
Determines the group velocity for gravity- waves.
Definition: w3canomd.F90:2749
w3servmd::strace
subroutine strace(IENT, SNAME)
Definition: w3servmd.F90:148
w3canomd::a2
real function a2(XI, XJ, XK, THI, THJ, THK)
Auxiliary second-order function.
Definition: w3canomd.F90:2566
w3canomd::b1
real function b1(XI, XJ, XK, XL, THI, THJ, THK, THL)
Weights of the A_2A_3A_4 part of the canonical transformation.
Definition: w3canomd.F90:2262
w3canomd::v2
real function v2(XI, XJ, XK, XL, THI, THJ, THK, THL)
Determines the contribution of the virtual four-wave interactions of gravity waves.
Definition: w3canomd.F90:1712
w3canomd::deptha
real deptha
Definition: w3canomd.F90:114
constants
Define some much-used constants for global use (all defined as PARAMETER).
Definition: constants.F90:20
w3gdatmd
Definition: w3gdatmd.F90:16
w3gdatmd::igpars
real, dimension(:), pointer igpars
Definition: w3gdatmd.F90:1142
w3canomd::zpi
real zpi
Definition: w3canomd.F90:112
w3canomd::w3add2ndorder
subroutine w3add2ndorder(E, DEPTH, WN, CG, IACTION)
Adds second order spectrum on top of first order spectrum.
Definition: w3canomd.F90:153
w3canomd::b4
real function b4(XI, XJ, XK, XL, THI, THJ, THK, THL)
Weights of the A_2^*A_3^*A_4^* part of the canonical transformation.
Definition: w3canomd.F90:2149
w3canomd::a1
real function a1(XI, XJ, XK, THI, THJ, THK)
Auxiliary second-order coefficient.
Definition: w3canomd.F90:2492
w3canomd::vabs
real function vabs(XI, XJ, THI, THJ)
NA.
Definition: w3canomd.F90:2846
w3dispmd
Definition: w3dispmd.F90:3
w3canomd::secspom
subroutine secspom(F1, F3, NFRE, NANG, NMAX, NDEPTH, DEPTHA, DEPTHD, OMSTART, FRAC, MR, DFDTH, OMEGA, DEPTH, AKMEAN, TA, TB, TC_QL, TT_4M, TT_4P, IM_P, IM_M, COUNTER)
Computes second order spectrum in frequency space.
Definition: w3canomd.F90:925
w3canomd::a
real function a(XI, XJ, THI, THJ)
Gives nonlinear transfer coefficient for three wave interactions interactions of gravity waves in the...
Definition: w3canomd.F90:1152
constants::grav
real, parameter grav
GRAV Acc.
Definition: constants.F90:61