Changeset 4035 for trunk/LMDZ.MARS/libf/aeronomars/thermosphere_mod.F
- Timestamp:
- Jan 30, 2026, 12:40:55 PM (4 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/aeronomars/thermosphere_mod.F
r4024 r4035 10 10 subroutine thermosphere(ngrid,nlayer,nq, 11 11 & pplev,pplay,dist_sol, 12 $ mu0,ptimestep, ptime,zday,tsurf,zzlev,zzlay,13 & pt,pq,pu,pv,pdt,pdq, 12 $ mu0,ptimestep,zday,tsurf,zzlev,zzlay, 13 & pt,pq,pu,pv,pdt,pdq,pdu,pdv, 14 14 $ zdteuv,zdtconduc,zdumolvis,zdvmolvis,zdqmoldiff, 15 15 $ PhiEscH,PhiEscH2,PhiEscD) … … 31 31 integer,intent(in) :: nlayer ! number of atmospheric layers 32 32 integer,intent(in) :: nq ! number of advected tracers 33 REAL,INTENT(in) :: pplay(ngrid,nlayer) 34 REAL,INTENT(in) :: pplev(ngrid,nlayer+1) 35 REAL,INTENT(in) :: zzlay(ngrid,nlayer) 36 REAL,INTENT(in) :: zzlev(ngrid,nlayer+1) 37 REAL,INTENT(in) :: pt(ngrid,nlayer) 38 REAL,INTENT(in) :: zday 39 REAL,INTENT(in) :: dist_sol 40 REAL,INTENT(in) :: mu0(ngrid) 41 REAL,INTENT(in) :: pq(ngrid,nlayer,nq) 42 REAL,INTENT(in) :: ptimestep 43 REAL,INTENT(in) :: ptime 44 REAL,INTENT(in) :: tsurf(ngrid) 45 REAL,INTENT(in) :: pu(ngrid,nlayer),pv(ngrid,nlayer) 46 REAL,INTENT(in) :: pdt(ngrid,nlayer),pdq(ngrid,nlayer,nq) 33 REAL,INTENT(in) :: pplay(ngrid,nlayer) ! mid-layer pressure (Pa) 34 REAL,INTENT(in) :: pplev(ngrid,nlayer+1) ! inter-layer pressure (Pa) 35 REAL,INTENT(in) :: zzlay(ngrid,nlayer) ! altitude of mid-layer (m) 36 REAL,INTENT(in) :: zzlev(ngrid,nlayer+1) ! altitude of layer boundaries (m) 37 REAL,INTENT(in) :: pt(ngrid,nlayer) ! input temperature (K) 38 REAL,INTENT(in) :: zday ! Mars date (sols since Ls=0) 39 REAL,INTENT(in) :: dist_sol ! Sun-Mars distance (AU) 40 REAL,INTENT(in) :: mu0(ngrid) ! cosine of solar zenith angle 41 REAL,INTENT(in) :: pq(ngrid,nlayer,nq) ! input tracer mixing ratio (kg/kg_air) 42 REAL,INTENT(in) :: ptimestep ! physics time step (s) 43 REAL,INTENT(in) :: tsurf(ngrid) ! surface temperature (K) 44 REAL,INTENT(in) :: pu(ngrid,nlayer) ! input zonal wind (m/s) 45 REAL,INTENT(in) :: pv(ngrid,nlayer) ! input meridional wind (m/s) 47 46 48 REAL,INTENT(out) :: zdteuv(ngrid,nlayer) 49 REAL,INTENT(out) :: zdtconduc(ngrid,nlayer) 50 REAL,INTENT(out) :: zdumolvis(ngrid,nlayer) 51 REAL,INTENT(out) :: zdvmolvis(ngrid,nlayer) 52 REAL,INTENT(out) :: zdqmoldiff(ngrid,nlayer,nq) 53 REAL*8,INTENT(out) :: PhiEscH,PhiEscH2,PhiEscD 47 REAL,INTENT(out) :: zdteuv(ngrid,nlayer) ! tendency due to EUV (K/s) 48 REAL,INTENT(out) :: zdtconduc(ngrid,nlayer) ! tendency due to conduction (K/s) 49 REAL,INTENT(out) :: zdumolvis(ngrid,nlayer) ! tendency due to viscosity (m/s/s) 50 REAL,INTENT(out) :: zdvmolvis(ngrid,nlayer) ! tendency due to viscosity (m/s/s) 51 REAL,INTENT(out) :: zdqmoldiff(ngrid,nlayer,nq) ! tendency due to diffusion (kg/kg_air/s) 52 REAL*8,INTENT(out) :: PhiEscH ! total escape flux of H (s-1) 53 REAL*8,INTENT(out) :: PhiEscH2 ! total escape flux of H2 (s-1) 54 REAL*8,INTENT(out) :: PhiEscD ! total escape flux of D (s-1) 55 56 REAL,INTENT(inout) :: pdt(ngrid,nlayer) ! tendency on temperature (K/s) 57 REAL,INTENT(inout) :: pdq(ngrid,nlayer,nq) ! tendency on tracers (kg/kg_air/s) 58 REAL,INTENT(inout) :: pdu(ngrid,nlayer) ! tendency on zonal wind (m/s/s) 59 REAL,INTENT(inout) :: pdv(ngrid,nlayer) ! tendency on meridional wind (m/s/s) 54 60 55 61 INTEGER :: l,ig … … 68 74 69 75 ! initialize tendencies to zero in all cases 70 ! (tendencies are added later on, even if parametrization is not called)71 76 zdteuv(1:ngrid,1:nlayer)=0 72 77 zdtconduc(1:ngrid,1:nlayer)=0 … … 77 82 if (calleuv) then 78 83 call euvheat(ngrid,nlayer,nq,pt,pdt,pplev,pplay,zzlay, 79 $ mu0,ptimestep,ptime,zday,pq,pdq,zdteuv) 84 $ mu0,ptimestep,zday,pq,pdq,zdteuv) 85 ! update tendency on temperature 86 pdt(:,:)=pdt(:,:)+zdteuv(:,:) 80 87 endif 81 88 82 89 if (callconduct) THEN 83 call conduction(ngrid,nlayer,ptimestep,pplay,pplev,pt, zdteuv,90 call conduction(ngrid,nlayer,ptimestep,pplay,pplev,pt,pdt, 84 91 $ tsurf,zzlev,zzlay,zdtconduc) 92 ! update tendency on temperature 93 pdt(:,:)=pdt(:,:)+zdtconduc(:,:) 85 94 endif 86 95 87 96 if (callmolvis) THEN 88 97 call molvis(ngrid,nlayer,ptimestep,pplay,pplev,pt, 89 & zdteuv,zdtconduc,pu, 90 $ tsurf,zzlev,zzlay,zdumolvis) 98 & pdt,pu,tsurf,zzlev,zzlay,zdumolvis) 91 99 call molvis(ngrid,nlayer,ptimestep,pplay,pplev,pt, 92 & zdteuv,zdtconduc,pv, 93 $ tsurf,zzlev,zzlay,zdvmolvis) 100 & pdt,pv,tsurf,zzlev,zzlay,zdvmolvis) 101 ! update tendencies on winds 102 pdu(:,:)=pdu(:,:)+zdumolvis(:,:) 103 pdv(:,:)=pdv(:,:)+zdvmolvis(:,:) 94 104 endif 95 105 … … 99 109 call moldiff_red(ngrid,nlayer,nq, 100 110 & pplay,pplev,pt,pdt,pq,pdq,ptimestep, 101 & zzlay,zdteuv,zdtconduc,zdqmoldiff, 102 & PhiEscH,PhiEscH2,PhiEscD) 111 & zdqmoldiff,PhiEscH,PhiEscH2,PhiEscD) 103 112 else 104 113 ! new MPF (modified pass flow) scheme 105 114 call moldiff_MPF(ngrid,nlayer,nq, 106 115 & pplay,pplev,pt,pdt,pq,pdq,ptimestep, 107 & zzlay,zdteuv,zdtconduc,zdqmoldiff, 108 & PhiEscH,PhiEscH2,PhiEscD) 116 & zdqmoldiff,PhiEscH,PhiEscH2,PhiEscD) 109 117 endif ! of if (moldiff_scheme==1) 110 endif 118 119 ! update tendencies on tracers 120 pdq(:,:,:)=pdq(:,:,:)+zdqmoldiff(:,:,:) 121 122 endif ! of if (callmoldiff) 111 123 112 124 end subroutine thermosphere
Note: See TracChangeset
for help on using the changeset viewer.
