Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bugfix/ounp #263

Merged
merged 54 commits into from
Oct 23, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
0c91309
add feature for fixed filename with ndates=0 for ww3_ounf
mickaelaccensi May 21, 2019
f179a1d
Merge branch 'feature/fixedname' into 'develop'
mickaelaccensi May 21, 2019
a02ef75
bugfix for netcdf file id allocation
mickaelaccensi May 21, 2019
9a00ef8
Merge branch 'bugfix/netcdfounf' into 'develop'
mickaelaccensi May 21, 2019
868c91a
remove extra line due to copy/paste error
mickaelaccensi May 21, 2019
369b8ac
Merge branch 'bugfix/lineshel' into 'develop'
mickaelaccensi May 21, 2019
f6e2c60
change vers from 7.00 to 7.01
mickaelaccensi May 21, 2019
581c28c
Merge branch 'feature/fixedname' into 'develop'
mickaelaccensi May 21, 2019
77563f7
Merge remote-tracking branch 'noaa-emc/develop' into develop
mickaelaccensi May 29, 2019
2df1e72
add WCOR to switch list
mickaelaccensi Jun 3, 2019
94ecdaa
Merge branch 'bugfix/wcor' into 'develop'
mickaelaccensi Jun 3, 2019
442984a
add check on array index
mickaelaccensi Jun 3, 2019
deabe20
Merge branch 'bugfix/ugbound' into 'develop'
mickaelaccensi Jun 3, 2019
cbf4450
revert comment on wcc and wcf in manual
mickaelaccensi Nov 13, 2019
f2a653b
Update of IS2 default parameters and associated change to regtest.
Jan 16, 2020
045f919
TEST
Jan 16, 2020
f945163
Merge branch 'develop' of https://github.com/NOAA-EMC/WW3 into develop
mickaelaccensi Jan 22, 2020
0a7a619
Merge branch 'develop' of https://gitlab.ifremer.fr/wave/WW3 into dev…
Jan 28, 2020
f8e7b8d
correct SSDSC array to re-enable T500
mickaelaccensi Feb 7, 2020
76f55bd
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Feb 12, 2020
8c56170
First cleanup before introducing Romero's dissipation
Feb 20, 2020
8583692
Merged STX from Romero into ST4 ... running but not same result yet
Feb 25, 2020
0e0ba5e
Fixed bug in Romero option: now working OK.
Feb 25, 2020
484e3bf
Merge branch 'feature/ST4tail' of https://gitlab.ifremer.fr/wave/WW3 …
mickaelaccensi Mar 2, 2020
b32e50c
Merge branch 'develop' into feature/ST4tail
mickaelaccensi Mar 2, 2020
1d98045
Merge branch 'develop' of https://github.com/NOAA-EMC/WW3 into develop
mickaelaccensi Mar 2, 2020
7b7efe6
Merge branch 'develop' into feature/ST4tail
mickaelaccensi Mar 2, 2020
6c42cef
Minor update
Mar 3, 2020
1de555b
Merge branch 'feature/ST4tail' of https://gitlab.ifremer.fr/wave/WW3 …
Mar 3, 2020
9b9e2e8
Updated the method for computing modulation
Mar 5, 2020
21c7316
Bug correction: MSSSUM was not computed in some cases
Mar 5, 2020
ac5c363
Final but correction for MSSSUM .
Mar 6, 2020
983f5f6
Corrected one more bug in the MSSSUM calculation ...
Mar 6, 2020
9816fdb
Added namelist parameters that were missing in SDS4
Mar 6, 2020
337fe6d
Corrected for bug in additional turbulence dissipation
Mar 6, 2020
82837c7
Since I was at it, I added also the effect of water viscosity on the
Mar 6, 2020
381e3f7
Merge branch 'develop' of https://github.com/NOAA-EMC/WW3 into develop
mickaelaccensi Apr 6, 2020
8eb6ad7
This reverts commits which are in feature/ST4tail:
mickaelaccensi Apr 6, 2020
24d3cff
Revert "Update of IS2 default parameters and associated change to reg…
mickaelaccensi Apr 6, 2020
63bcf9d
correct conflict in previous merge
mickaelaccensi Apr 6, 2020
b16ae72
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Apr 14, 2020
3853a96
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Apr 14, 2020
593fc80
manually merge noaa/develop into develop
mickaelaccensi Apr 14, 2020
5f84350
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Apr 21, 2020
05425ad
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Apr 27, 2020
28d179d
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi May 11, 2020
e737f78
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi May 14, 2020
828cbcb
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi May 15, 2020
5de3554
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi May 25, 2020
453e075
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Jul 27, 2020
192ec7a
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Aug 24, 2020
82e155b
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Aug 27, 2020
cadebce
Merge remote-tracking branch 'noaa/develop' into develop
mickaelaccensi Oct 6, 2020
b82f4f0
correct missing statements for 40 characters names
mickaelaccensi Oct 19, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Updated the method for computing modulation
  • Loading branch information
Fabrice Ardhuin committed Mar 5, 2020
commit 9b9e2e8713810cc4ec75e3ba8d39a70965a19347
252 changes: 132 additions & 120 deletions model/ftn/w3src4md.ftn
Original file line number Diff line number Diff line change
Expand Up @@ -1671,7 +1671,7 @@
REAL :: DK(NK), HS(NK), KBAR(NK), DCK(NK)
REAL :: EFDF(NK) ! Energy integrated over a spectral band
INTEGER :: IKSUP(NK)
REAL :: FACSAT, DKHS, FACSTRAIN
REAL :: FACSAT, DKHS, FACSTRAINB, FACSTRAINL
REAL :: BTH0(NK) !saturation spectrum
REAL :: BTH(NSPEC) !saturation spectrum
REAL :: BTH0S(NK) !smoothed saturation spectrum
Expand Down Expand Up @@ -1815,13 +1815,13 @@
MSSTH=(MSSSUM(IKC,1)-MSSSUM(IKC,2))*EC2(1+ABS(ITH-IMSSMAX (IKC))) &
+MSSSUM(IKC,2)*ES2(1+ABS(ITH-IMSSMAX (IKC)))
!
FACSTRAIN=1+SSDSC(8)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IKC,ITH))
FACSTRAINB=1+SSDSC(8)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IKC,ITH))
ELSE
FACSTRAIN=1
FACSTRAINB=1
END IF
!
BTH(IS)=DOT_PRODUCT(SATWEIGHTS(:,ITH), A(IS0+SATINDICES(:,ITH)) ) &
*FACSAT*FACSTRAIN
*FACSAT*FACSTRAINB
END DO

IF (SSDSISO.NE.1) THEN
Expand Down Expand Up @@ -1930,174 +1930,186 @@
!
CASE(2)
!
! 2.b Computes spontaneous breaking for T500 //////////////
! 2.b Computes spontaneous breaking for T500 (Filipot et al. JGR 2010)
!
IF (SSDSBCK.GT.0) THEN ! test for (Filipot et al. 2010)'s disspation source term
E1 = 0.
HS = 0.
SRHS = 0.
DDIAG = 0.
PB2 = 0.
E1 = 0.
HS = 0.
SRHS = 0.
DDIAG = 0.
PB2 = 0.
!
E1(IK)=0.
DO ITH=1,NTH
IS=ITH+(IK-1)*NTH
E1(IK)=E1(IK)+(A(IS)*SIG(IK))*DTH
END DO
DK(IK)=DDEN(IK)/(DTH*SIG(IK)*CG(IK))
! Computes Wavenumber spectrum E1 integrated over direction and computes dk
!
DO IK=IK1, NK
E1(IK)=0.
DO ITH=1,NTH
IS=ITH+(IK-1)*NTH
E1(IK)=E1(IK)+(A(IS)*SIG(IK))*DTH
END DO
DK(IK)=DDEN(IK)/(DTH*SIG(IK)*CG(IK))
END DO
!
! Gets windows indices of IKTAB
!
ID=MIN(NINT(DEPTH),NDTAB)
IF (ID < 1) THEN
ID = 1
ELSE IF(ID > NDTAB) THEN
ID = NDTAB
END IF
ID=MIN(NINT(DEPTH),NDTAB)
IF (ID < 1) THEN
ID = 1
ELSE IF(ID > NDTAB) THEN
ID = NDTAB
END IF
!
! loop over wave scales
!
HS=0.
EFDF=0.
KBAR=0.
EFDF=0.
NKL=0. !number of windows
DO IKL=1,NK
IKSUP(IKL)=IKTAB(IKL,ID)
IF (IKSUP(IKL) .LE. NK) THEN
EFDF(IKL) = DOT_PRODUCT(E1(IKL:IKSUP(IKL)-1),DK(IKL:IKSUP(IKL)-1))
IF (EFDF(IKL) .NE. 0) THEN
KBAR(IKL) = DOT_PRODUCT(K(IKL:IKSUP(IKL)-1)*E1(IKL:IKSUP(IKL)-1), &
DK(IKL:IKSUP(IKL)-1)) / EFDF(IKL)
ELSE
KBAR(IKL)=0.
END IF
! estimation of Significant wave height of a given scale
HS(IKL) = 4*SQRT(EFDF(IKL))
NKL = NKL+1
HS=0.
EFDF=0.
KBAR=0.
NKL=0. !number of windows
DO IKL=1,NK
IKSUP(IKL)=IKTAB(IKL,ID)
IF (IKSUP(IKL) .LE. NK) THEN
EFDF(IKL) = DOT_PRODUCT(E1(IKL:IKSUP(IKL)-1),DK(IKL:IKSUP(IKL)-1))
IF (EFDF(IKL) .NE. 0) THEN
KBAR(IKL) = DOT_PRODUCT(K(IKL:IKSUP(IKL)-1)*E1(IKL:IKSUP(IKL)-1), &
DK(IKL:IKSUP(IKL)-1)) / EFDF(IKL)
ELSE
KBAR(IKL)=0.
END IF
END DO
! estimation of Significant wave height of a given scale
HS(IKL) = 4*SQRT(EFDF(IKL))
NKL = NKL+1
END IF
END DO
!
! Computes Dissipation and breaking probability in each scale
!
DCK=0.
QB =0.
DKHS = KHSMAX/NKHS
DO IKL=1, NKL
IF (HS(IKL) .NE. 0. .AND. KBAR(IKL) .NE. 0.) THEN
!
DCK=0.
QB =0.
DKHS = KHSMAX/NKHS
DO IKL=1, NKL
IF (HS(IKL) .NE. 0. .AND. KBAR(IKL) .NE. 0.) THEN
! gets indices for tabulated dissipation DCKI and breaking probability QBI
!
IKD = FAC_KD2+ANINT(LOG(KBAR(IKL)*DEPTH)/LOG(FAC_KD1))
IKHS= 1+ANINT(KBAR(IKL)*HS(IKL)/DKHS)
IF (IKD > NKD) THEN ! Deep water
IKD = NKD
ELSE IF (IKD < 1) THEN ! Shallow water
IKD = 1
END IF
IF (IKHS > NKHS) THEN
IKHS = NKHS
ELSE IF (IKHS < 1) THEN
IKHS = 1
END IF
XT = TANH(KBAR(IKL)*DEPTH)
IKD = FAC_KD2+ANINT(LOG(KBAR(IKL)*DEPTH)/LOG(FAC_KD1))
IKHS= 1+ANINT(KBAR(IKL)*HS(IKL)/DKHS)
IF (IKD > NKD) THEN ! Deep water
IKD = NKD
ELSE IF (IKD < 1) THEN ! Shallow water
IKD = 1
END IF
IF (IKHS > NKHS) THEN
IKHS = NKHS
ELSE IF (IKHS < 1) THEN
IKHS = 1
END IF
XT = TANH(KBAR(IKL)*DEPTH)
!
! Gamma corrected for water depth
! Gamma corrected for water depth
!
GAM=1.0314*(XT**3)-1.9958*(XT**2)+1.5522*XT+0.1885
GAM=1.0314*(XT**3)-1.9958*(XT**2)+1.5522*XT+0.1885
!
! Computes the energy dissipated for the scale IKL
! using DCKI which is tabulated in INSIN4
!
DCK(IKL)=((KBAR(IKL)**(-2.5))*(KBAR(IKL)/(2*PI)))*DCKI(IKHS,IKD)
DCK(IKL)=((KBAR(IKL)**(-2.5))*(KBAR(IKL)/(2*PI)))*DCKI(IKHS,IKD)
!
! Get the breaking probability for the scale IKL
!
QB(IKL) = QBI(IKHS,IKD) ! QBI is tabulated in INSIN4
ELSE
DCK(IKL)=0.
QB(IKL) =0.
END IF
END DO
QB(IKL) = QBI(IKHS,IKD) ! QBI is tabulated in INSIN4
ELSE
DCK(IKL)=0.
QB(IKL) =0.
END IF
END DO
!
! Distributes scale dissipation over the frequency spectrum
!
S1 = 0.
S2 = 0.
NTIMES = 0
DO IKL=1, NKL
IF (EFDF(IKL) .GT. 0.) THEN
S1(IKL:IKSUP(IKL)) = S1(IKL:IKSUP(IKL)) + &
DCK(IKL)*E1(IKL:IKSUP(IKL)) / EFDF(IKL)
S2(IKL:IKSUP(IKL)) = S2(IKL:IKSUP(IKL)) + &
QB(IKL) *E1(IKL:IKSUP(IKL)) / EFDF(IKL)
NTIMES(IKL:IKSUP(IKL)) = NTIMES(IKL:IKSUP(IKL)) + 1
END IF
END DO
S1 = 0.
S2 = 0.
NTIMES = 0
DO IKL=1, NKL
IF (EFDF(IKL) .GT. 0.) THEN
S1(IKL:IKSUP(IKL)) = S1(IKL:IKSUP(IKL)) + &
DCK(IKL)*E1(IKL:IKSUP(IKL)) / EFDF(IKL)
S2(IKL:IKSUP(IKL)) = S2(IKL:IKSUP(IKL)) + &
QB(IKL) *E1(IKL:IKSUP(IKL)) / EFDF(IKL)
NTIMES(IKL:IKSUP(IKL)) = NTIMES(IKL:IKSUP(IKL)) + 1
END IF
END DO
!
! Finish the average
!
WHERE (NTIMES .GT. 0)
S1 = S1 / NTIMES
S2 = S2 / NTIMES
ELSEWHERE
S1 = 0.
S2 = 0.
END WHERE
WHERE (NTIMES .GT. 0)
S1 = S1 / NTIMES
S2 = S2 / NTIMES
ELSEWHERE
S1 = 0.
S2 = 0.
END WHERE
! goes back to action for dissipation source term
S1(1:NK) = S1(1:NK) / SIG(1:NK)
S1(1:NK) = S1(1:NK) / SIG(1:NK)
!
! Makes Isotropic distribution
!
ASUM = 0.
DO IK = 1, NK
ASUM = (SUM(A(((IK-1)*NTH+1):(IK*NTH)))*DTH)
IF (ASUM.GT.1.E-8) THEN
FORALL (IS=1+(IK-1)*NTH:IK*NTH) DDIAG(IS) = S1(IK)/ASUM
FORALL (IS=1+(IK-1)*NTH:IK*NTH) PB2(IS) = S2(IK)/ASUM
ELSE
FORALL (IS=1+(IK-1)*NTH:IK*NTH) DDIAG(IS) = 0.
FORALL (IS=1+(IK-1)*NTH:IK*NTH) PB2(IS) = 0.
END IF
IF (PB2(1+(IK-1)*NTH).GT.0.001) THEN
BTH0(IK) = 2.*SSDSBR
ELSE
BTH0(IK) = 0.
END IF
END DO
ASUM = 0.
DO IK = 1, NK
ASUM = (SUM(A(((IK-1)*NTH+1):(IK*NTH)))*DTH)
IF (ASUM.GT.1.E-8) THEN
FORALL (IS=1+(IK-1)*NTH:IK*NTH) DDIAG(IS) = S1(IK)/ASUM
FORALL (IS=1+(IK-1)*NTH:IK*NTH) PB2(IS) = S2(IK)/ASUM
ELSE
FORALL (IS=1+(IK-1)*NTH:IK*NTH) DDIAG(IS) = 0.
FORALL (IS=1+(IK-1)*NTH:IK*NTH) PB2(IS) = 0.
END IF
IF (PB2(1+(IK-1)*NTH).GT.0.001) THEN
BTH0(IK) = 2.*SSDSBR
ELSE
BTH0(IK) = 0.
END IF
END DO
!
PB = (1-SSDSC(1))*PB2*A + SSDSC(1)*PB
PB = (1-SSDSC(1))*PB2*A + SSDSC(1)*PB
! Compute Lambda = PB* l(k,th)
! with l(k,th)=1/(2*pi²)= the breaking crest density
BRLAMBDA = PB / (2.*PI**2.)
!
END IF ! END OF TEST ON SSDSBCK
BRLAMBDA = PB / (2.*PI**2.)
!
CASE(3)
!
! 2c Romero
! 2c Romero (GRL 2019)
!
! directional saturation I
! integrate in azimuth
KO=(GRAV/(1E-6+USTAR**2))/(28./SSDSC(16))**2
DO IK=1,NK
IS0=(IK-1)*NTH
BTH(1:NTH)=MAX(A(IS0+1:IS0+NTH)*SIG(IK)*K(IK)**3,.00000000000001)
!
IF (SSDSC(8).GT.0) THEN ! Applies modulation factor on B
DO ITH=1,NTH
MSSTH=(MSSSUM(IK,1)-MSSSUM(IK,2))*EC2(1+ABS(ITH-IMSSMAX (IK))) &
+MSSSUM(IK,2)*ES2(1+ABS(ITH-IMSSMAX (IK)))
BTH(ITH)=BTH(ITH)*(1.+SSDSC(8)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IK,ITH)))
END DO
END IF
!
C=SIG(IK)/K(IK)
BTH0(IK)=sum(BTH(1:NTH)*DTH)

DO ITH=1,NTH
IF (SSDSC(11).GT.0) THEN
MSSTH=(MSSSUM(IK,1)-MSSSUM(IK,2))*EC2(1+ABS(ITH-IMSSMAX (IK))) &
IF (SSDSC(18).GT.0) THEN ! Applies modulation factor on Lambda
DO ITH=1,NTH
IF (SSDSC(11).GT.0) THEN
MSSTH=(MSSSUM(IK,1)-MSSSUM(IK,2))*EC2(1+ABS(ITH-IMSSMAX (IK))) &
+MSSSUM(IK,2)*ES2(1+ABS(ITH-IMSSMAX (IK)))
FACSTRAIN=1+SSDSC(8)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IK,ITH))
ELSE
FACSTRAIN=1.+SSDSC(8)*(MSSSUM(IK,1)**SSDSC(14) * & ! Romero
FACSTRAINL=1.+SSDSC(18)*SQRT(MSSTH)+SSDSC(11)*SQRT(MSSSUM2(IK,ITH))
ELSE
FACSTRAINL=1.+SSDSC(18)*(MSSSUM(IK,1)**SSDSC(14) * & ! Romero
(ECOS(ITH)*COS(DLWMEAN)+ESIN(ITH)*SIN(DLWMEAN))**2)
ENDIF
LMODULATION(ITH)= FACSTRAIN**SSDSC(19)
END DO
ENDIF
LMODULATION(ITH)= FACSTRAINL**SSDSC(19)
END DO
ELSE
LMODULATION(:)= 1.
END IF

! Lambda
BRLAMBDA(IS0+1:IS0+NTH)=SSDSC(9)*EXP(-SSDSBR/BTH(1:NTH)) &
*( 1.0+SSDSC(13)*MAX(1.,(K(IK)/KO))**SSDSC(15) ) &
Expand Down
Loading