[1615] | 1 | ! $Id: physiq.F 1565 2011-08-31 12:53:29Z jghattas $ |
---|
| 2 | !#define IO_DEBUG |
---|
| 3 | |
---|
| 4 | SUBROUTINE physiq (nlon,nlev, & |
---|
| 5 | & debut,lafin,jD_cur, jH_cur,pdtphys, & |
---|
| 6 | & paprs,pplay,pphi,pphis,presnivs,clesphy0, & |
---|
| 7 | & u,v,t,qx, & |
---|
| 8 | & flxmass_w, & |
---|
| 9 | & d_u, d_v, d_t, d_qx, d_ps & |
---|
| 10 | & , dudyn & |
---|
| 11 | & , PVteta) |
---|
| 12 | |
---|
[1671] | 13 | USE dimphy, only : klon,klev |
---|
| 14 | USE infotrac, only : nqtot |
---|
| 15 | USE comgeomphy, only : rlatd |
---|
| 16 | USE comcstphy, only : rg |
---|
[1615] | 17 | |
---|
| 18 | IMPLICIT none |
---|
| 19 | !====================================================================== |
---|
| 20 | ! Objet: Moniteur general de la physique du modele |
---|
| 21 | !====================================================================== |
---|
| 22 | ! |
---|
| 23 | ! Arguments: |
---|
| 24 | ! |
---|
| 25 | ! nlon----input-I-nombre de points horizontaux |
---|
| 26 | ! nlev----input-I-nombre de couches verticales, doit etre egale a klev |
---|
| 27 | ! debut---input-L-variable logique indiquant le premier passage |
---|
| 28 | ! lafin---input-L-variable logique indiquant le dernier passage |
---|
| 29 | ! jD_cur -R-jour courant a l'appel de la physique (jour julien) |
---|
| 30 | ! jH_cur -R-heure courante a l'appel de la physique (jour julien) |
---|
| 31 | ! pdtphys-input-R-pas d'integration pour la physique (seconde) |
---|
| 32 | ! paprs---input-R-pression pour chaque inter-couche (en Pa) |
---|
| 33 | ! pplay---input-R-pression pour le mileu de chaque couche (en Pa) |
---|
| 34 | ! pphi----input-R-geopotentiel de chaque couche (g z) (reference sol) |
---|
| 35 | ! pphis---input-R-geopotentiel du sol |
---|
| 36 | ! presnivs-input_R_pressions approximat. des milieux couches ( en PA) |
---|
| 37 | ! u-------input-R-vitesse dans la direction X (de O a E) en m/s |
---|
| 38 | ! v-------input-R-vitesse Y (de S a N) en m/s |
---|
| 39 | ! t-------input-R-temperature (K) |
---|
| 40 | ! qx------input-R-humidite specifique (kg/kg) et d'autres traceurs |
---|
| 41 | ! d_t_dyn-input-R-tendance dynamique pour "t" (K/s) |
---|
| 42 | ! d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s) |
---|
| 43 | ! flxmass_w -input-R- flux de masse verticale |
---|
| 44 | ! d_u-----output-R-tendance physique de "u" (m/s/s) |
---|
| 45 | ! d_v-----output-R-tendance physique de "v" (m/s/s) |
---|
| 46 | ! d_t-----output-R-tendance physique de "t" (K/s) |
---|
| 47 | ! d_qx----output-R-tendance physique de "qx" (kg/kg/s) |
---|
| 48 | ! d_ps----output-R-tendance physique de la pression au sol |
---|
| 49 | !IM |
---|
| 50 | ! PVteta--output-R-vorticite potentielle a des thetas constantes |
---|
| 51 | !====================================================================== |
---|
| 52 | #include "dimensions.h" |
---|
[1671] | 53 | !#include "comcstphy.h" |
---|
[1615] | 54 | |
---|
| 55 | integer jjmp1 |
---|
| 56 | parameter (jjmp1=jjm+1-1/jjm) |
---|
| 57 | integer iip1 |
---|
| 58 | parameter (iip1=iim+1) |
---|
| 59 | |
---|
| 60 | INTEGER ivap ! indice de traceurs pour vapeur d'eau |
---|
| 61 | PARAMETER (ivap=1) |
---|
| 62 | INTEGER iliq ! indice de traceurs pour eau liquide |
---|
| 63 | PARAMETER (iliq=2) |
---|
| 64 | |
---|
| 65 | ! |
---|
| 66 | ! |
---|
| 67 | ! Variables argument: |
---|
| 68 | ! |
---|
| 69 | INTEGER nlon |
---|
| 70 | INTEGER nlev |
---|
| 71 | REAL, intent(in):: jD_cur, jH_cur |
---|
| 72 | |
---|
| 73 | REAL pdtphys |
---|
| 74 | LOGICAL debut, lafin |
---|
| 75 | REAL paprs(klon,klev+1) |
---|
| 76 | REAL pplay(klon,klev) |
---|
| 77 | REAL pphi(klon,klev) |
---|
| 78 | REAL pphis(klon) |
---|
| 79 | REAL presnivs(klev) |
---|
| 80 | REAL znivsig(klev) |
---|
| 81 | real pir |
---|
| 82 | |
---|
| 83 | REAL u(klon,klev) |
---|
| 84 | REAL v(klon,klev) |
---|
| 85 | REAL t(klon,klev),theta(klon,klev) |
---|
| 86 | REAL qx(klon,klev,nqtot) |
---|
| 87 | REAL flxmass_w(klon,klev) |
---|
| 88 | REAL omega(klon,klev) ! vitesse verticale en Pa/s |
---|
| 89 | REAL d_u(klon,klev) |
---|
| 90 | REAL d_v(klon,klev) |
---|
| 91 | REAL d_t(klon,klev) |
---|
| 92 | REAL d_qx(klon,klev,nqtot) |
---|
| 93 | REAL d_ps(klon) |
---|
| 94 | real da(klon,klev),phi(klon,klev,klev),mp(klon,klev) |
---|
| 95 | !IM definition dynamique o_trac dans phys_output_open |
---|
| 96 | ! type(ctrl_out) :: o_trac(nqtot) |
---|
| 97 | !FH! REAL PVteta(klon,nbteta) |
---|
| 98 | REAL PVteta(klon,1) |
---|
| 99 | REAL dudyn(iim+1,jjmp1,klev) |
---|
| 100 | |
---|
| 101 | INTEGER longcles |
---|
| 102 | PARAMETER ( longcles = 20 ) |
---|
| 103 | |
---|
[1671] | 104 | real :: temp_newton(klon,klev) |
---|
[1615] | 105 | integer k |
---|
| 106 | logical, save :: first=.true. |
---|
[1671] | 107 | !$OMP THREADPRIVATE(first) |
---|
[1615] | 108 | |
---|
| 109 | REAL clesphy0( longcles ) |
---|
| 110 | |
---|
[1671] | 111 | ! initializations |
---|
| 112 | if (first) then |
---|
| 113 | ! ... |
---|
[1615] | 114 | |
---|
[1671] | 115 | first=.false. |
---|
| 116 | endif |
---|
[1615] | 117 | |
---|
[1671] | 118 | ! set all tendencies to zero |
---|
| 119 | d_u(:,:)=0. |
---|
| 120 | d_v(:,:)=0. |
---|
| 121 | d_t(:,:)=0. |
---|
| 122 | d_qx(:,:,:)=0. |
---|
| 123 | d_ps(:)=0. |
---|
[1615] | 124 | |
---|
[1671] | 125 | ! compute tendencies to return to the dynamics: |
---|
| 126 | ! "friction" on the first layer |
---|
| 127 | d_u(:,1)=-u(:,1)/86400. |
---|
| 128 | ! newtonian rlaxation towards temp_newton() |
---|
| 129 | do k=1,klev |
---|
| 130 | temp_newton(:,k)=280.+cos(rlatd(:))*40.-pphi(:,k)/rg*6.e-3 |
---|
| 131 | d_t(:,k)=(temp_newton(:,k)-t(:,k))/1.e5 |
---|
| 132 | enddo |
---|
| 133 | |
---|
| 134 | |
---|
| 135 | print*,'COUCOU PHYDEV' |
---|
| 136 | |
---|
| 137 | ! if lastcall, then it is time to write "restartphy.nc" file |
---|
| 138 | if (lafin) then |
---|
| 139 | call phyredem("restartphy.nc") |
---|
| 140 | endif |
---|
| 141 | |
---|
| 142 | end |
---|