source: LMDZ5/trunk/libf/dynphy_lonlat/phydev/callphysiq_mod.F90 @ 2418

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

Improving the physics/dynamics interface:

  • added module callphysiq_mod.F90 in dynphy_lonlat/phy* which contains the routine "call_physiq" which is called by calfis* and calls the physics. This way different "physiq" routine from different physics packages may be called: The calfis* routines now exposes all available fields that might be transmitted to physiq but which is actually send (ie: expected/needed by physiq) is decided in call_physiq.
  • turned "physiq.F90" into module "physiq_mod.F90" for better control of "physiq" arguments. Extracted embeded "gr_fi_ecrit" as self-standing routine (but note that this routine actually only works in serial mode).

EM

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