Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
Méso-NH code
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
RODIER Quentin
Méso-NH code
Commits
a014e9dd
Commit
a014e9dd
authored
8 months ago
by
RODIER Quentin
Browse files
Options
Downloads
Patches
Plain Diff
Quentin 26/06/2024: add kernels on rotate_wind and update_rotate_wind
parent
73050fec
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/PHYEX/turb/mode_rotate_wind.f90
+47
-23
47 additions, 23 deletions
src/PHYEX/turb/mode_rotate_wind.f90
with
47 additions
and
23 deletions
src/PHYEX/turb/mode_rotate_wind.f90
+
47
−
23
View file @
a014e9dd
...
@@ -123,8 +123,6 @@ INTEGER :: JI,JJ
...
@@ -123,8 +123,6 @@ INTEGER :: JI,JJ
!* 1. PRELIMINARIES
!* 1. PRELIMINARIES
! -------------
! -------------
!
!
PUSLOPE
(:,:)
=
0.
PVSLOPE
(:,:)
=
0.
!
!
IIB
=
2
IIB
=
2
IJB
=
2
IJB
=
2
...
@@ -134,6 +132,12 @@ IIE = IIU - 1
...
@@ -134,6 +132,12 @@ IIE = IIU - 1
IJE
=
IJU
-
1
IJE
=
IJU
-
1
IKB
=
1
+
JPVEXT
IKB
=
1
+
JPVEXT
!
!
!
!$acc kernels
!$mnh_expand_array(JI=1:IIU,JJ=1:IJU)
PUSLOPE
(:,:)
=
0.
PVSLOPE
(:,:)
=
0.
!
ZWGROUND
(:,:)
=
PW
(:,:,
IKB
)
ZWGROUND
(:,:)
=
PW
(:,:,
IKB
)
!
!
!* 2. INTERPOLATE THE CARTESIAN COMPONENTS
!* 2. INTERPOLATE THE CARTESIAN COMPONENTS
...
@@ -141,11 +145,11 @@ ZWGROUND(:,:) = PW(:,:,IKB)
...
@@ -141,11 +145,11 @@ ZWGROUND(:,:) = PW(:,:,IKB)
!
!
ILOC
(:,:)
=
NINT
(
SIGN
(
1.
,
-
PCOSSLOPE
(:,:)))
ILOC
(:,:)
=
NINT
(
SIGN
(
1.
,
-
PCOSSLOPE
(:,:)))
JLOC
(:,:)
=
NINT
(
SIGN
(
1.
,
-
PSINSLOPE
(:,:)))
JLOC
(:,:)
=
NINT
(
SIGN
(
1.
,
-
PSINSLOPE
(:,:)))
!$mnh_end_expand_array(JI=1:IIT,JJ=1:IJT)
!
!
! interpolation in x direction
! interpolation in x direction
!
!
DO
JJ
=
1
,
IJU
DO
CONCURRENT
(
JJ
=
1
:
IJU
,
JI
=
IIB
:
IIE
)
DO
JI
=
IIB
,
IIE
ZCOEFF
(
JI
,
JJ
)
=
&
ZCOEFF
(
JI
,
JJ
)
=
&
(
0.5
*
PDXX
(
JI
,
JJ
,
IKB
)
+
0.5
*
PDZZ
(
JI
,
JJ
,
IKB
)
*
PDIRCOSXW
(
JI
,
JJ
)
)
&
(
0.5
*
PDXX
(
JI
,
JJ
,
IKB
)
+
0.5
*
PDZZ
(
JI
,
JJ
,
IKB
)
*
PDIRCOSXW
(
JI
,
JJ
)
)
&
*
2.
/
(
PDXX
(
JI
,
JJ
,
IKB
)
+
PDXX
(
JI
+1
,
JJ
,
IKB
))
*
2.
/
(
PDXX
(
JI
,
JJ
,
IKB
)
+
PDXX
(
JI
+1
,
JJ
,
IKB
))
...
@@ -160,13 +164,11 @@ DO JJ = 1,IJU
...
@@ -160,13 +164,11 @@ DO JJ = 1,IJU
ZWINT
(
JI
,
JJ
)
=
ZCOEFM
(
JI
,
JJ
)
*
(
PW
(
JI
,
JJ
,
IKB
+1
)
+
ZWGROUND
(
JI
,
JJ
))
*
0.5
&
ZWINT
(
JI
,
JJ
)
=
ZCOEFM
(
JI
,
JJ
)
*
(
PW
(
JI
,
JJ
,
IKB
+1
)
+
ZWGROUND
(
JI
,
JJ
))
*
0.5
&
+
(
1.
-
ZCOEFM
(
JI
,
JJ
))
&
+
(
1.
-
ZCOEFM
(
JI
,
JJ
))
&
*
(
PW
(
JI
+
ILOC
(
JI
,
JJ
),
JJ
,
IKB
+1
)
+
ZWGROUND
(
JI
+
ILOC
(
JI
,
JJ
),
JJ
))
*
0.5
*
(
PW
(
JI
+
ILOC
(
JI
,
JJ
),
JJ
,
IKB
+1
)
+
ZWGROUND
(
JI
+
ILOC
(
JI
,
JJ
),
JJ
))
*
0.5
END
DO
END
DO
END
DO
!
!
! interpolation in y direction
! interpolation in y direction
!
!
DO
JJ
=
IJB
,
IJE
DO
CONCURRENT
(
JJ
=
IJB
:
IJE
,
JI
=
IIB
:
IIE
)
DO
JI
=
IIB
,
IIE
ZCOEFF
(
JI
,
JJ
)
=
&
ZCOEFF
(
JI
,
JJ
)
=
&
(
0.5
*
PDYY
(
JI
,
JJ
,
IKB
)
+
0.5
*
PDZZ
(
JI
,
JJ
,
IKB
)
*
PDIRCOSYW
(
JI
,
JJ
)
)
&
(
0.5
*
PDYY
(
JI
,
JJ
,
IKB
)
+
0.5
*
PDZZ
(
JI
,
JJ
,
IKB
)
*
PDIRCOSYW
(
JI
,
JJ
)
)
&
*
2.
/
(
PDYY
(
JI
,
JJ
,
IKB
)
+
PDYY
(
JI
+1
,
JJ
,
IKB
))
*
2.
/
(
PDYY
(
JI
,
JJ
,
IKB
)
+
PDYY
(
JI
+1
,
JJ
,
IKB
))
...
@@ -179,15 +181,13 @@ DO JJ = IJB,IJE
...
@@ -179,15 +181,13 @@ DO JJ = IJB,IJE
(
1.
-
ZCOEFM
(
JI
,
JJ
))
*
ZUINT
(
JI
,
JJ
+
JLOC
(
JI
,
JJ
))
(
1.
-
ZCOEFM
(
JI
,
JJ
))
*
ZUINT
(
JI
,
JJ
+
JLOC
(
JI
,
JJ
))
ZWFIN
(
JI
,
JJ
)
=
ZCOEFM
(
JI
,
JJ
)
*
ZWINT
(
JI
,
JJ
)
+
&
ZWFIN
(
JI
,
JJ
)
=
ZCOEFM
(
JI
,
JJ
)
*
ZWINT
(
JI
,
JJ
)
+
&
(
1.
-
ZCOEFM
(
JI
,
JJ
))
*
ZWINT
(
JI
,
JJ
+
JLOC
(
JI
,
JJ
))
(
1.
-
ZCOEFM
(
JI
,
JJ
))
*
ZWINT
(
JI
,
JJ
+
JLOC
(
JI
,
JJ
))
END
DO
END
DO
END
DO
!
!
!* 3. ROTATE THE WIND
!* 3. ROTATE THE WIND
! ---------------
! ---------------
!
!
!
!
DO
JJ
=
IJB
,
IJE
DO
CONCURRENT
(
JJ
=
IJB
:
IJE
,
JI
=
IIB
:
IIE
)
DO
JI
=
IIB
,
IIE
PUSLOPE
(
JI
,
JJ
)
=
PCOSSLOPE
(
JI
,
JJ
)
*
PDIRCOSZW
(
JI
,
JJ
)
*
ZUFIN
(
JI
,
JJ
)
+
&
PUSLOPE
(
JI
,
JJ
)
=
PCOSSLOPE
(
JI
,
JJ
)
*
PDIRCOSZW
(
JI
,
JJ
)
*
ZUFIN
(
JI
,
JJ
)
+
&
PSINSLOPE
(
JI
,
JJ
)
*
PDIRCOSZW
(
JI
,
JJ
)
*
ZVFIN
(
JI
,
JJ
)
+
&
PSINSLOPE
(
JI
,
JJ
)
*
PDIRCOSZW
(
JI
,
JJ
)
*
ZVFIN
(
JI
,
JJ
)
+
&
SQRT
(
1.
-
PDIRCOSZW
(
JI
,
JJ
)
**
2
)
*
ZWFIN
(
JI
,
JJ
)
SQRT
(
1.
-
PDIRCOSZW
(
JI
,
JJ
)
**
2
)
*
ZWFIN
(
JI
,
JJ
)
...
@@ -195,9 +195,9 @@ DO JJ = IJB,IJE
...
@@ -195,9 +195,9 @@ DO JJ = IJB,IJE
PVSLOPE
(
JI
,
JJ
)
=-
PSINSLOPE
(
JI
,
JJ
)
*
ZUFIN
(
JI
,
JJ
)
+
&
PVSLOPE
(
JI
,
JJ
)
=-
PSINSLOPE
(
JI
,
JJ
)
*
ZUFIN
(
JI
,
JJ
)
+
&
PCOSSLOPE
(
JI
,
JJ
)
*
ZVFIN
(
JI
,
JJ
)
PCOSSLOPE
(
JI
,
JJ
)
*
ZVFIN
(
JI
,
JJ
)
!
!
END
DO
END
DO
END
DO
!
!
!$acc end kernels
!
!
!
!
!----------------------------------------------------------------------------
!----------------------------------------------------------------------------
...
@@ -229,6 +229,9 @@ USE MODE_ll, ONLY: ADD2DFIELD_ll, UPDATE_HALO_ll, CLEANLIST_ll, &
...
@@ -229,6 +229,9 @@ USE MODE_ll, ONLY: ADD2DFIELD_ll, UPDATE_HALO_ll, CLEANLIST_ll, &
LWEST_ll
,
LEAST_ll
,
LSOUTH_ll
,
LNORTH_ll
LWEST_ll
,
LEAST_ll
,
LSOUTH_ll
,
LNORTH_ll
USE
MODD_ARGSLIST_ll
,
ONLY
:
LIST_ll
USE
MODD_ARGSLIST_ll
,
ONLY
:
LIST_ll
USE
MODD_DIMPHYEX
,
ONLY
:
DIMPHYEX_t
USE
MODD_DIMPHYEX
,
ONLY
:
DIMPHYEX_t
#ifdef MNH_OPENACC
USE
MODI_GET_HALO
#endif
IMPLICIT
NONE
IMPLICIT
NONE
!
!
!* 0.1 Declarations of dummy arguments :
!* 0.1 Declarations of dummy arguments :
...
@@ -239,6 +242,8 @@ REAL, DIMENSION(D%NIT,D%NJT), INTENT(INOUT) :: PUSLOPE,PVSLOPE
...
@@ -239,6 +242,8 @@ REAL, DIMENSION(D%NIT,D%NJT), INTENT(INOUT) :: PUSLOPE,PVSLOPE
!
!
TYPE
(
LIST_ll
),
POINTER
::
TZFIELDS_ll
! list of fields to exchange
TYPE
(
LIST_ll
),
POINTER
::
TZFIELDS_ll
! list of fields to exchange
INTEGER
::
IINFO_ll
! return code of parallel routine
INTEGER
::
IINFO_ll
! return code of parallel routine
logical
::
gwest
,
geast
,
gnorth
,
gsouth
INTEGER
::
IIB
,
IIE
,
IJB
,
IJE
!
!
! tangential surface fluxes in the axes following the orography
! tangential surface fluxes in the axes following the orography
!
!
...
@@ -246,33 +251,52 @@ INTEGER :: IINFO_ll ! return code of parallel routine
...
@@ -246,33 +251,52 @@ INTEGER :: IINFO_ll ! return code of parallel routine
!
!
NULLIFY
(
TZFIELDS_ll
)
NULLIFY
(
TZFIELDS_ll
)
!
!
IIB
=
D
%
NIB
IJB
=
D
%
NJB
IIE
=
D
%
NIE
IJE
=
D
%
NJE
! 2 Update halo if necessary
! 2 Update halo if necessary
!
!
!!$IF (NHALO == 1) THEN
!!$IF (NHALO == 1) THEN
#ifndef MNH_OPENACC
CALL
ADD2DFIELD_ll
(
TZFIELDS_ll
,
PUSLOPE
,
'UPDATE_ROTATE_WIND::PUSLOPE'
)
CALL
ADD2DFIELD_ll
(
TZFIELDS_ll
,
PUSLOPE
,
'UPDATE_ROTATE_WIND::PUSLOPE'
)
CALL
ADD2DFIELD_ll
(
TZFIELDS_ll
,
PVSLOPE
,
'UPDATE_ROTATE_WIND::PVSLOPE'
)
CALL
ADD2DFIELD_ll
(
TZFIELDS_ll
,
PVSLOPE
,
'UPDATE_ROTATE_WIND::PVSLOPE'
)
CALL
UPDATE_HALO_ll
(
TZFIELDS_ll
,
IINFO_ll
)
CALL
UPDATE_HALO_ll
(
TZFIELDS_ll
,
IINFO_ll
)
CALL
CLEANLIST_ll
(
TZFIELDS_ll
)
CALL
CLEANLIST_ll
(
TZFIELDS_ll
)
#else
!
! /!\ warning conner needed -> GET_HALO...C
!
CALL
GET_2D_HALO_DDC
(
PUSLOPE
,
HNAME
=
'UPDATE_ROTATE_WIND::PUSLOPE'
)
CALL
GET_2D_HALO_DDC
(
PVSLOPE
,
HNAME
=
'UPDATE_ROTATE_WIND::PVSLOPE'
)
#endif
!!$ENDIF
!!$ENDIF
!
!
! 3 Boundary conditions for non cyclic case
! 3 Boundary conditions for non cyclic case
!
!
IF
(
HLBCX
(
1
)
/
=
"CYCL"
.AND.
LWEST_ll
())
THEN
gwest
=
HLBCX
(
1
)
/
=
"CYCL"
.AND.
LWEST_ll
()
PUSLOPE
(
D
%
NIB
-1
,:)
=
PUSLOPE
(
D
%
NIB
,:)
geast
=
HLBCX
(
2
)
/
=
"CYCL"
.AND.
LEAST_ll
()
PVSLOPE
(
D
%
NIB
-1
,:)
=
PVSLOPE
(
D
%
NIB
,:)
gsouth
=
HLBCY
(
1
)
/
=
"CYCL"
.AND.
LSOUTH_ll
()
gnorth
=
HLBCY
(
2
)
/
=
"CYCL"
.AND.
LNORTH_ll
()
!$acc kernels present_cr(PUSLOPE,PVSLOPE)
IF
(
gwest
)
THEN
PUSLOPE
(
IIB
-1
,:)
=
PUSLOPE
(
IIB
,:)
PVSLOPE
(
IIB
-1
,:)
=
PVSLOPE
(
IIB
,:)
END
IF
END
IF
IF
(
HLBCX
(
2
)
/
=
"CYCL"
.AND.
LEAST_ll
()
)
THEN
IF
(
geast
)
THEN
PUSLOPE
(
D
%
N
IE
+1
,:)
=
PUSLOPE
(
D
%
N
IE
,:)
PUSLOPE
(
I
IE
+1
,:)
=
PUSLOPE
(
I
IE
,:)
PVSLOPE
(
D
%
N
IE
+1
,:)
=
PVSLOPE
(
D
%
N
IE
,:)
PVSLOPE
(
I
IE
+1
,:)
=
PVSLOPE
(
I
IE
,:)
END
IF
END
IF
IF
(
HLBCY
(
1
)
/
=
"CYCL"
.AND.
LSOUTH_ll
()
)
THEN
IF
(
gsouth
)
THEN
PUSLOPE
(:,
D
%
N
JB
-1
)
=
PUSLOPE
(:,
D
%
N
JB
)
PUSLOPE
(:,
I
JB
-1
)
=
PUSLOPE
(:,
I
JB
)
PVSLOPE
(:,
D
%
N
JB
-1
)
=
PVSLOPE
(:,
D
%
N
JB
)
PVSLOPE
(:,
I
JB
-1
)
=
PVSLOPE
(:,
I
JB
)
END
IF
END
IF
IF
(
HLBCY
(
2
)
/
=
"CYCL"
.AND.
LNORTH_ll
()
)
THEN
IF
(
gnorth
)
THEN
PUSLOPE
(:,
D
%
N
JE
+1
)
=
PUSLOPE
(:,
D
%
N
JE
)
PUSLOPE
(:,
I
JE
+1
)
=
PUSLOPE
(:,
I
JE
)
PVSLOPE
(:,
D
%
N
JE
+1
)
=
PVSLOPE
(:,
D
%
N
JE
)
PVSLOPE
(:,
I
JE
+1
)
=
PVSLOPE
(:,
I
JE
)
END
IF
END
IF
!$acc end kernels
!
!
END
SUBROUTINE
UPDATE_ROTATE_WIND
END
SUBROUTINE
UPDATE_ROTATE_WIND
END
MODULE
MODE_ROTATE_WIND
END
MODULE
MODE_ROTATE_WIND
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment