source: LMDZ5/trunk/libf/dynphy_lonlat/phylmd/callphysiq_mod.F90 @ 2422

Last change on this file since 2422 was 2422, checked in by Ehouarn Millour, 8 years ago

Small modification in the way time and calendar are handled: Now all the time keeping is done in the physics and only the timestep is transfered from the dynamics to the physics. Due to changes in computations and roundoffs this will change reference bench results.
The implementation of this change in phymar is left as future work.
EM

File size: 3.7 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                       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 mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat
22  USE control_mod, ONLY: planet_type
23  USE physiq_mod, ONLY: physiq
24  IMPLICIT NONE
25
26  INTEGER,INTENT(IN) :: klon ! (local) number of atmospheric columns
27  INTEGER,INTENT(IN) :: llm  ! number of atmospheric layers
28  INTEGER,INTENT(IN) :: nqtot ! number of tracers
29  CHARACTER(len=*),INTENT(IN) :: tname(nqtot) ! tracer names
30  LOGICAL,INTENT(IN) :: debut_split ! .true. if very first call to physics
31  LOGICAL,INTENT(IN) :: lafin_split ! .true. if last call to physics
32  REAL,INTENT(IN) :: JD_cur ! Julian day
33  REAL,INTENT(IN) :: JH_cur_split ! Julian hour (fraction of day)
34  REAL,INTENT(IN) :: zdt_split ! time step over which the physics are evaluated
35  REAL,INTENT(IN) :: zplev_omp(klon,llm+1) ! interlayer pressure (Pa)
36  REAL,INTENT(IN) :: zplay_omp(klon,llm) ! mid-layer pressure (Pa)
37  REAL,INTENT(IN) :: zphi_omp(klon,llm) ! geopotential at midlayer
38  REAL,INTENT(IN) :: zphis_omp(klon) ! surface geopotential
39  REAL,INTENT(IN) :: presnivs_omp(llm) ! approximate pressure of atm. layers
40  REAL,INTENT(IN) :: zufi_omp(klon,llm) ! zonal wind (m/s)
41  REAL,INTENT(IN) :: zvfi_omp(klon,llm) ! meridional wind (m/s)
42  REAL,INTENT(IN) :: zrfi_omp(klon,llm) ! relative wind vorticity, in s-1
43  REAL,INTENT(IN) :: ztfi_omp(klon,llm) ! temperature (K)
44  REAL,INTENT(IN) :: zqfi_omp(klon,llm,nqtot) ! tracers (*/kg of air)
45  REAL,INTENT(IN) :: flxwfi_omp(klon,llm) ! Vertical mass flux on lower mesh interfaces (kg/s)
46  REAL,INTENT(IN) :: pducov(nbp_lon+1,nbp_lat,llm) ! dynamical tendency on ucov
47  ! tendencies (in */s) from the physics:
48  REAL,INTENT(OUT) :: zdufi_omp(klon,llm) ! tendency on zonal winds
49  REAL,INTENT(OUT) :: zdvfi_omp(klon,llm) ! tendency on meridional winds
50  REAL,INTENT(OUT) :: zdtfi_omp(klon,llm) ! tendency on temperature
51  REAL,INTENT(OUT) :: zdqfi_omp(klon,llm,nqtot) ! tendency on tracers
52  REAL,INTENT(OUT) :: zdpsrf_omp(klon) ! tendency on surface pressure
53 
54  ! Local variables
55  CHARACTER(len=11) :: modname="call_physiq"
56  LOGICAL,SAVE :: firstcall=.true.
57!$OMP THREADPRIVATE(firstcall)
58
59! Sanity check on physics package type
60  IF (firstcall) THEN
61    IF (planet_type.ne."earth") THEN
62      CALL abort_gcm(modname,"wrong planet_type for this physics package",1)
63    ENDIF
64    firstcall=.false.
65  ENDIF
66
67
68! Call physics package with required inputs/outputs
69  CALL physiq(klon,           &
70              llm,            &
71              debut_split,    &
72              lafin_split,    &
73              zdt_split,      &
74              zplev_omp,      &
75              zplay_omp,      &
76              zphi_omp,       &
77              zphis_omp,      &
78              presnivs_omp,   &
79              zufi_omp,       &
80              zvfi_omp,       &
81              zrfi_omp,       &
82              ztfi_omp,       &
83              zqfi_omp,       &
84              flxwfi_omp,     &
85              zdufi_omp,      &
86              zdvfi_omp,      &
87              zdtfi_omp,      &
88              zdqfi_omp,      &
89              zdpsrf_omp)
90
91
92END SUBROUTINE call_physiq
93
94END MODULE callphysiq_mod
Note: See TracBrowser for help on using the repository browser.