source: LMDZ6/branches/Amaury_dev/libf/dynphy_lonlat/phylmd/callphysiq_mod.F90

Last change on this file was 5128, checked in by abarral, 8 weeks ago

Correct bug in vlspltqs_loc.f90 from r2270 where we call SSUM with incorrect arguments.
Merge the three different versions of abort_gcm into one
Fix seq, para 3D compilation broken from r5107 onwards
(lint) usual + Remove uneeded fixed-form continuations

File size: 4.2 KB
Line 
1
2! $Id: $
3
4MODULE callphysiq_mod
5
6IMPLICIT NONE
7
8CONTAINS
9
10SUBROUTINE call_physiq(klon,llm,nqtot,tname,                              &
11                       debut_split,lafin_split,                           &
12                       jD_cur,jH_cur_split,zdt_split,                     &
13                       zplev_omp,zplay_omp,                               &
14                       zpk_omp,zphi_omp,zphis_omp,                        &
15                       presnivs_omp,                                      &
16                       zufi_omp,zvfi_omp,zrfi_omp,ztfi_omp,zqfi_omp,      &
17                       flxwfi_omp,pducov,                                 &
18                       zdufi_omp,zdvfi_omp,zdtfi_omp,zdqfi_omp,zdpsrf_omp)
19
20
21  USE lmdz_grid_phy, ONLY: nbp_lon, nbp_lat
22  USE control_mod, ONLY: planet_type, ok_dyn_xios
23  USE physiq_mod, ONLY: physiq
24  USE lmdz_xios, ONLY: xios_set_current_context, xios_get_current_context, xios_context
25
26
27  IMPLICIT NONE
28
29  INTEGER,INTENT(IN) :: klon ! (local) number of atmospheric columns
30  INTEGER,INTENT(IN) :: llm  ! number of atmospheric layers
31  INTEGER,INTENT(IN) :: nqtot ! number of tracers
32  CHARACTER(len=*),INTENT(IN) :: tname(nqtot) ! tracer names
33  LOGICAL,INTENT(IN) :: debut_split ! .TRUE. if very first CALL to physics
34  LOGICAL,INTENT(IN) :: lafin_split ! .TRUE. if last CALL to physics
35  REAL,INTENT(IN) :: JD_cur ! Julian day
36  REAL,INTENT(IN) :: JH_cur_split ! Julian hour (fraction of day)
37  REAL,INTENT(IN) :: zdt_split ! time step over which the physics are evaluated
38  REAL,INTENT(IN) :: zplev_omp(klon,llm+1) ! interlayer pressure (Pa)
39  REAL,INTENT(IN) :: zplay_omp(klon,llm) ! mid-layer pressure (Pa)
40  REAL,INTENT(IN) :: zpk_omp(klon,llm) ! Exner function
41  REAL,INTENT(IN) :: zphi_omp(klon,llm) ! geopotential at midlayer
42  REAL,INTENT(IN) :: zphis_omp(klon) ! surface geopotential
43  REAL,INTENT(IN) :: presnivs_omp(llm) ! approximate pressure of atm. layers
44  REAL,INTENT(IN) :: zufi_omp(klon,llm) ! zonal wind (m/s)
45  REAL,INTENT(IN) :: zvfi_omp(klon,llm) ! meridional wind (m/s)
46  REAL,INTENT(IN) :: zrfi_omp(klon,llm) ! relative wind vorticity, in s-1
47  REAL,INTENT(IN) :: ztfi_omp(klon,llm) ! temperature (K)
48  REAL,INTENT(IN) :: zqfi_omp(klon,llm,nqtot) ! tracers (*/kg of air)
49  REAL,INTENT(IN) :: flxwfi_omp(klon,llm) ! Vertical mass flux on lower mesh interfaces (kg/s)
50  REAL,INTENT(IN) :: pducov(nbp_lon+1,nbp_lat,llm) ! dynamical tendency on ucov
51  ! tendencies (in */s) from the physics:
52  REAL,INTENT(OUT) :: zdufi_omp(klon,llm) ! tendency on zonal winds
53  REAL,INTENT(OUT) :: zdvfi_omp(klon,llm) ! tendency on meridional winds
54  REAL,INTENT(OUT) :: zdtfi_omp(klon,llm) ! tendency on temperature
55  REAL,INTENT(OUT) :: zdqfi_omp(klon,llm,nqtot) ! tendency on tracers
56  REAL,INTENT(OUT) :: zdpsrf_omp(klon) ! tendency on surface pressure
57  TYPE(xios_context) :: dyn3d_ctx_handle
58
59  ! Local variables
60  CHARACTER(len=11) :: modname="call_physiq"
61  LOGICAL,SAVE :: firstcall=.TRUE.
62!$OMP THREADPRIVATE(firstcall)
63
64! Sanity check on physics package type
65  IF (firstcall) THEN
66    IF (planet_type/="earth") THEN
67      CALL abort_gcm(modname,"wrong planet_type for this physics package",1)
68    ENDIF
69    firstcall=.FALSE.
70  ENDIF
71
72  !$OMP MASTER
73  IF (ok_dyn_xios) THEN
74     CALL xios_get_current_context(dyn3d_ctx_handle)
75  ENDIF
76  !$OMP END MASTER
77
78! Call physics package with required inputs/outputs
79  CALL physiq(klon,           &
80              llm,            &
81              debut_split,    &
82              lafin_split,    &
83              zdt_split,      &
84              zplev_omp,      &
85              zplay_omp,      &
86              zphi_omp,       &
87              zphis_omp,      &
88              presnivs_omp,   &
89              zufi_omp,       &
90              zvfi_omp,       &
91              zrfi_omp,       &
92              ztfi_omp,       &
93              zqfi_omp,       &
94              flxwfi_omp,     &
95              zdufi_omp,      &
96              zdvfi_omp,      &
97              zdtfi_omp,      &
98              zdqfi_omp,      &
99              zdpsrf_omp)
100
101! switching back to LMDZDYN context
102!$OMP MASTER
103  IF (ok_dyn_xios) THEN
104     CALL xios_set_current_context(dyn3d_ctx_handle)
105  ENDIF
106!$OMP END MASTER
107
108
109END SUBROUTINE call_physiq
110
111END MODULE callphysiq_mod
Note: See TracBrowser for help on using the repository browser.