Changeset 1188 for LMDZ4/branches
- Timestamp:
- Jun 18, 2009, 5:50:11 PM (15 years ago)
- Location:
- LMDZ4/branches/LMDZ4-dev
- Files:
-
- 4 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/guide_mod.F90
r1187 r1188 11 11 USE getparam 12 12 USE Write_Field 13 use netcdf, only: nf90_nowrite, nf90_open, nf90_inq_varid, nf90_close 13 14 14 15 IMPLICIT NONE … … 140 141 ncidpl=-99 141 142 if (guide_modele) then 142 if (ncidpl.eq.-99) ncidpl=NCOPN('apbp.nc',NCNOWRIT,rcod)143 if (ncidpl.eq.-99) rcod=nf90_open('apbp.nc',Nf90_NOWRITe, ncidpl) 143 144 else 144 145 if (guide_u) then 145 if (ncidpl.eq.-99) ncidpl=NCOPN('u.nc',NCNOWRIT,rcod)146 if (ncidpl.eq.-99) rcod=nf90_open('u.nc',Nf90_NOWRITe,ncidpl) 146 147 elseif (guide_v) then 147 if (ncidpl.eq.-99) ncidpl=NCOPN('v.nc',NCNOWRIT,rcod)148 if (ncidpl.eq.-99) rcod=nf90_open('v.nc',nf90_nowrite,ncidpl) 148 149 elseif (guide_T) then 149 if (ncidpl.eq.-99) ncidpl=NCOPN('T.nc',NCNOWRIT,rcod)150 if (ncidpl.eq.-99) rcod=nf90_open('T.nc',nf90_nowrite,ncidpl) 150 151 elseif (guide_Q) then 151 if (ncidpl.eq.-99) ncidpl=NCOPN('hur.nc',NCNOWRIT,rcod)152 if (ncidpl.eq.-99) rcod=nf90_open('hur.nc',nf90_nowrite, ncidpl) 152 153 endif 153 154 endif … … 160 161 error=NF_INQ_DIMLEN(ncidpl,rid,nlevnc) 161 162 print *,'Guide: nombre niveaux vert. nlevnc', nlevnc 162 CALL NCCLOS(ncidpl,rcod)163 rcod = nf90_close(ncidpl) 163 164 164 165 ! --------------------------------------------- … … 992 993 if (guide_modele) then 993 994 print *,'Lecture du guidage sur niveaux mod�le' 994 ncidpl=NCOPN('apbp.nc',NCNOWRIT,rcode)995 varidap=NCVID(ncidpl,'AP',rcode)996 varidbp=NCVID(ncidpl,'BP',rcode)995 rcode = nf90_open('apbp.nc', nf90_nowrite, ncidpl) 996 rcode = nf90_inq_varid(ncidpl, 'AP', varidap) 997 rcode = nf90_inq_varid(ncidpl, 'BP', varidbp) 997 998 print*,'ncidpl,varidap',ncidpl,varidap 998 999 endif 999 1000 ! Vent zonal 1000 1001 if (guide_u) then 1001 ncidu=NCOPN('u.nc',NCNOWRIT,rcode)1002 varidu=NCVID(ncidu,'UWND',rcode)1002 rcode = nf90_open('u.nc', nf90_nowrite, ncidu) 1003 rcode = nf90_inq_varid(ncidu, 'UWND', varidu) 1003 1004 print*,'ncidu,varidu',ncidu,varidu 1004 1005 if (ncidpl.eq.-99) ncidpl=ncidu … … 1006 1007 ! Vent meridien 1007 1008 if (guide_v) then 1008 ncidv=NCOPN('v.nc',NCNOWRIT,rcode)1009 varidv=NCVID(ncidv,'VWND',rcode)1009 rcode = nf90_open('v.nc', nf90_nowrite, ncidv) 1010 rcode = nf90_inq_varid(ncidv, 'VWND', varidv) 1010 1011 print*,'ncidv,varidv',ncidv,varidv 1011 1012 if (ncidpl.eq.-99) ncidpl=ncidv … … 1013 1014 ! Temperature 1014 1015 if (guide_T) then 1015 ncidt=NCOPN('T.nc',NCNOWRIT,rcode)1016 varidt=NCVID(ncidt,'AIR',rcode)1016 rcode = nf90_open('T.nc', nf90_nowrite, ncidt) 1017 rcode = nf90_inq_varid(ncidt, 'AIR', varidt) 1017 1018 print*,'ncidT,varidT',ncidt,varidt 1018 1019 if (ncidpl.eq.-99) ncidpl=ncidt … … 1020 1021 ! Humidite 1021 1022 if (guide_Q) then 1022 ncidQ=NCOPN('hur.nc',NCNOWRIT,rcode)1023 varidQ=NCVID(ncidQ,'RH',rcode)1023 rcode = nf90_open('hur.nc', nf90_nowrite, ncidQ) 1024 rcode = nf90_inq_varid(ncidQ, 'RH', varidQ) 1024 1025 print*,'ncidQ,varidQ',ncidQ,varidQ 1025 1026 if (ncidpl.eq.-99) ncidpl=ncidQ … … 1027 1028 ! Pression de surface 1028 1029 if ((guide_P).OR.(guide_modele)) then 1029 ncidps=NCOPN('ps.nc',NCNOWRIT,rcode)1030 varidps=NCVID(ncidps,'SP',rcode)1030 rcode = nf90_open('ps.nc', nf90_nowrite, ncidps) 1031 rcode = nf90_inq_varid(ncidps, 'SP', varidps) 1031 1032 print*,'ncidps,varidps',ncidps,varidps 1032 1033 endif 1033 1034 ! Coordonnee verticale 1034 1035 if (.not.guide_modele) then 1035 rcode =NF_INQ_VARID(ncidpl,'LEVEL',varidpl)1036 IF (rcode.NE.0) rcode =NF_INQ_VARID(ncidpl,'PRESSURE',varidpl)1036 rcode = nf90_inq_varid(ncidpl, 'LEVEL', varidpl) 1037 IF (rcode.NE.0) rcode = nf90_inq_varid(ncidpl, 'PRESSURE', varidpl) 1037 1038 print*,'ncidpl,varidpl',ncidpl,varidpl 1038 1039 endif … … 1175 1176 if (guide_modele) then 1176 1177 print *,'Lecture du guidage sur niveaux mod�le' 1177 ncidpl=NCOPN('apbp.nc',NCNOWRIT,rcode)1178 varidap=NCVID(ncidpl,'AP',rcode)1179 varidbp=NCVID(ncidpl,'BP',rcode)1178 rcode = nf90_open('apbp.nc', nf90_nowrite, ncidpl) 1179 rcode = nf90_inq_varid(ncidpl, 'AP', varidap) 1180 rcode = nf90_inq_varid(ncidpl, 'BP', varidbp) 1180 1181 print*,'ncidpl,varidap',ncidpl,varidap 1181 1182 endif 1182 1183 ! Vent zonal 1183 1184 if (guide_u) then 1184 ncidu=NCOPN('u.nc',NCNOWRIT,rcode)1185 varidu=NCVID(ncidu,'UWND',rcode)1185 rcode = nf90_open('u.nc', nf90_nowrite, ncidu) 1186 rcode = nf90_inq_varid(ncidu, 'UWND', varidu) 1186 1187 print*,'ncidu,varidu',ncidu,varidu 1187 1188 if (ncidpl.eq.-99) ncidpl=ncidu … … 1189 1190 ! Vent meridien 1190 1191 if (guide_v) then 1191 ncidv=NCOPN('v.nc',NCNOWRIT,rcode)1192 varidv=NCVID(ncidv,'VWND',rcode)1192 rcode = nf90_open('v.nc', nf90_nowrite, ncidv) 1193 rcode = nf90_inq_varid(ncidv, 'VWND', varidv) 1193 1194 print*,'ncidv,varidv',ncidv,varidv 1194 1195 if (ncidpl.eq.-99) ncidpl=ncidv … … 1196 1197 ! Temperature 1197 1198 if (guide_T) then 1198 ncidt=NCOPN('T.nc',NCNOWRIT,rcode)1199 varidt=NCVID(ncidt,'AIR',rcode)1199 rcode = nf90_open('T.nc', nf90_nowrite, ncidt) 1200 rcode = nf90_inq_varid(ncidt, 'AIR', varidt) 1200 1201 print*,'ncidT,varidT',ncidt,varidt 1201 1202 if (ncidpl.eq.-99) ncidpl=ncidt … … 1203 1204 ! Humidite 1204 1205 if (guide_Q) then 1205 ncidQ=NCOPN('hur.nc',NCNOWRIT,rcode)1206 varidQ=NCVID(ncidQ,'RH',rcode)1206 rcode = nf90_open('hur.nc', nf90_nowrite, ncidQ) 1207 rcode = nf90_inq_varid(ncidQ, 'RH', varidQ) 1207 1208 print*,'ncidQ,varidQ',ncidQ,varidQ 1208 1209 if (ncidpl.eq.-99) ncidpl=ncidQ … … 1210 1211 ! Pression de surface 1211 1212 if ((guide_P).OR.(guide_modele)) then 1212 ncidps=NCOPN('ps.nc',NCNOWRIT,rcode)1213 varidps=NCVID(ncidps,'SP',rcode)1213 rcode = nf90_open('ps.nc', nf90_nowrite, ncidps) 1214 rcode = nf90_inq_varid(ncidps, 'SP', varidps) 1214 1215 print*,'ncidps,varidps',ncidps,varidps 1215 1216 endif 1216 1217 ! Coordonnee verticale 1217 1218 if (.not.guide_modele) then 1218 rcode =NF_INQ_VARID(ncidpl,'LEVEL',varidpl)1219 IF (rcode.NE.0) rcode =NF_INQ_VARID(ncidpl,'PRESSURE',varidpl)1219 rcode = nf90_inq_varid(ncidpl, 'LEVEL', varidpl) 1220 IF (rcode.NE.0) rcode = nf90_inq_varid(ncidpl, 'PRESSURE', varidpl) 1220 1221 print*,'ncidpl,varidpl',ncidpl,varidpl 1221 1222 endif -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/guide_p_mod.F90
r1187 r1188 12 12 USE getparam 13 13 USE Write_Field_p 14 use netcdf, only: nf90_nowrite, nf90_open, nf90_inq_varid, nf90_close 14 15 15 16 IMPLICIT NONE … … 145 146 ncidpl=-99 146 147 if (guide_modele) then 147 if (ncidpl.eq.-99) ncidpl=NCOPN('apbp.nc',NCNOWRIT,rcod)148 if (ncidpl.eq.-99) rcod=nf90_open('apbp.nc',Nf90_NOWRITe, ncidpl) 148 149 else 149 150 if (guide_u) then 150 if (ncidpl.eq.-99) ncidpl=NCOPN('u.nc',NCNOWRIT,rcod)151 if (ncidpl.eq.-99) rcod=nf90_open('u.nc',Nf90_NOWRITe,ncidpl) 151 152 elseif (guide_v) then 152 if (ncidpl.eq.-99) ncidpl=NCOPN('v.nc',NCNOWRIT,rcod)153 if (ncidpl.eq.-99) rcod=nf90_open('v.nc',nf90_nowrite,ncidpl) 153 154 elseif (guide_T) then 154 if (ncidpl.eq.-99) ncidpl=NCOPN('T.nc',NCNOWRIT,rcod)155 if (ncidpl.eq.-99) rcod=nf90_open('T.nc',nf90_nowrite,ncidpl) 155 156 elseif (guide_Q) then 156 if (ncidpl.eq.-99) ncidpl=NCOPN('hur.nc',NCNOWRIT,rcod)157 if (ncidpl.eq.-99) rcod=nf90_open('hur.nc',nf90_nowrite, ncidpl) 157 158 endif 158 159 endif … … 165 166 error=NF_INQ_DIMLEN(ncidpl,rid,nlevnc) 166 167 print *,'Guide: nombre niveaux vert. nlevnc', nlevnc 167 CALL NCCLOS(ncidpl,rcod)168 rcod = nf90_close(ncidpl) 168 169 169 170 ! --------------------------------------------- … … 1071 1072 if (guide_modele) then 1072 1073 print *,'Lecture du guidage sur niveaux mod�le' 1073 ncidpl=NCOPN('apbp.nc',NCNOWRIT,rcode)1074 varidap=NCVID(ncidpl,'AP',rcode)1075 varidbp=NCVID(ncidpl,'BP',rcode)1074 rcode = nf90_open('apbp.nc', nf90_nowrite, ncidpl) 1075 rcode = nf90_inq_varid(ncidpl, 'AP', varidap) 1076 rcode = nf90_inq_varid(ncidpl, 'BP', varidbp) 1076 1077 print*,'ncidpl,varidap',ncidpl,varidap 1077 1078 endif 1078 1079 ! Vent zonal 1079 1080 if (guide_u) then 1080 ncidu=NCOPN('u.nc',NCNOWRIT,rcode)1081 varidu=NCVID(ncidu,'UWND',rcode)1081 rcode = nf90_open('u.nc', nf90_nowrite, ncidu) 1082 rcode = nf90_inq_varid(ncidu, 'UWND', varidu) 1082 1083 print*,'ncidu,varidu',ncidu,varidu 1083 1084 if (ncidpl.eq.-99) ncidpl=ncidu … … 1085 1086 ! Vent meridien 1086 1087 if (guide_v) then 1087 ncidv=NCOPN('v.nc',NCNOWRIT,rcode)1088 varidv=NCVID(ncidv,'VWND',rcode)1088 rcode = nf90_open('v.nc', nf90_nowrite, ncidv) 1089 rcode = nf90_inq_varid(ncidv, 'VWND', varidv) 1089 1090 print*,'ncidv,varidv',ncidv,varidv 1090 1091 if (ncidpl.eq.-99) ncidpl=ncidv … … 1092 1093 ! Temperature 1093 1094 if (guide_T) then 1094 ncidt=NCOPN('T.nc',NCNOWRIT,rcode)1095 varidt=NCVID(ncidt,'AIR',rcode)1095 rcode = nf90_open('T.nc', nf90_nowrite, ncidt) 1096 rcode = nf90_inq_varid(ncidt, 'AIR', varidt) 1096 1097 print*,'ncidT,varidT',ncidt,varidt 1097 1098 if (ncidpl.eq.-99) ncidpl=ncidt … … 1099 1100 ! Humidite 1100 1101 if (guide_Q) then 1101 ncidQ=NCOPN('hur.nc',NCNOWRIT,rcode)1102 varidQ=NCVID(ncidQ,'RH',rcode)1102 rcode = nf90_open('hur.nc', nf90_nowrite, ncidQ) 1103 rcode = nf90_inq_varid(ncidQ, 'RH', varidQ) 1103 1104 print*,'ncidQ,varidQ',ncidQ,varidQ 1104 1105 if (ncidpl.eq.-99) ncidpl=ncidQ … … 1106 1107 ! Pression de surface 1107 1108 if ((guide_P).OR.(guide_modele)) then 1108 ncidps=NCOPN('ps.nc',NCNOWRIT,rcode)1109 varidps=NCVID(ncidps,'SP',rcode)1109 rcode = nf90_open('ps.nc', nf90_nowrite, ncidps) 1110 rcode = nf90_inq_varid(ncidps, 'SP', varidps) 1110 1111 print*,'ncidps,varidps',ncidps,varidps 1111 1112 endif 1112 1113 ! Coordonnee verticale 1113 1114 if (.not.guide_modele) then 1114 rcode =NF_INQ_VARID(ncidpl,'LEVEL',varidpl)1115 IF (rcode.NE.0) rcode =NF_INQ_VARID(ncidpl,'PRESSURE',varidpl)1115 rcode = nf90_inq_varid(ncidpl, 'LEVEL', varidpl) 1116 IF (rcode.NE.0) rcode = nf90_inq_varid(ncidpl, 'PRESSURE', varidpl) 1116 1117 print*,'ncidpl,varidpl',ncidpl,varidpl 1117 1118 endif … … 1255 1256 if (guide_modele) then 1256 1257 print *,'Lecture du guidage sur niveaux mod�le' 1257 ncidpl=NCOPN('apbp.nc',NCNOWRIT,rcode)1258 varidap=NCVID(ncidpl,'AP',rcode)1259 varidbp=NCVID(ncidpl,'BP',rcode)1258 rcode = nf90_open('apbp.nc', nf90_nowrite, ncidpl) 1259 rcode = nf90_inq_varid(ncidpl, 'AP', varidap) 1260 rcode = nf90_inq_varid(ncidpl, 'BP', varidbp) 1260 1261 print*,'ncidpl,varidap',ncidpl,varidap 1261 1262 endif 1262 1263 ! Vent zonal 1263 1264 if (guide_u) then 1264 ncidu=NCOPN('u.nc',NCNOWRIT,rcode)1265 varidu=NCVID(ncidu,'UWND',rcode)1265 rcode = nf90_open('u.nc', nf90_nowrite, ncidu) 1266 rcode = nf90_inq_varid(ncidu, 'UWND', varidu) 1266 1267 print*,'ncidu,varidu',ncidu,varidu 1267 1268 if (ncidpl.eq.-99) ncidpl=ncidu … … 1269 1270 ! Vent meridien 1270 1271 if (guide_v) then 1271 ncidv=NCOPN('v.nc',NCNOWRIT,rcode)1272 varidv=NCVID(ncidv,'VWND',rcode)1272 rcode = nf90_open('v.nc', nf90_nowrite, ncidv) 1273 rcode = nf90_inq_varid(ncidv, 'VWND', varidv) 1273 1274 print*,'ncidv,varidv',ncidv,varidv 1274 1275 if (ncidpl.eq.-99) ncidpl=ncidv … … 1276 1277 ! Temperature 1277 1278 if (guide_T) then 1278 ncidt=NCOPN('T.nc',NCNOWRIT,rcode)1279 varidt=NCVID(ncidt,'AIR',rcode)1279 rcode = nf90_open('T.nc', nf90_nowrite, ncidt) 1280 rcode = nf90_inq_varid(ncidt, 'AIR', varidt) 1280 1281 print*,'ncidT,varidT',ncidt,varidt 1281 1282 if (ncidpl.eq.-99) ncidpl=ncidt … … 1283 1284 ! Humidite 1284 1285 if (guide_Q) then 1285 ncidQ=NCOPN('hur.nc',NCNOWRIT,rcode)1286 varidQ=NCVID(ncidQ,'RH',rcode)1286 rcode = nf90_open('hur.nc', nf90_nowrite, ncidQ) 1287 rcode = nf90_inq_varid(ncidQ, 'RH', varidQ) 1287 1288 print*,'ncidQ,varidQ',ncidQ,varidQ 1288 1289 if (ncidpl.eq.-99) ncidpl=ncidQ … … 1290 1291 ! Pression de surface 1291 1292 if ((guide_P).OR.(guide_modele)) then 1292 ncidps=NCOPN('ps.nc',NCNOWRIT,rcode)1293 varidps=NCVID(ncidps,'SP',rcode)1293 rcode = nf90_open('ps.nc', nf90_nowrite, ncidps) 1294 rcode = nf90_inq_varid(ncidps, 'SP', varidps) 1294 1295 print*,'ncidps,varidps',ncidps,varidps 1295 1296 endif 1296 1297 ! Coordonnee verticale 1297 1298 if (.not.guide_modele) then 1298 rcode =NF_INQ_VARID(ncidpl,'LEVEL',varidpl)1299 IF (rcode.NE.0) rcode =NF_INQ_VARID(ncidpl,'PRESSURE',varidpl)1299 rcode = nf90_inq_varid(ncidpl, 'LEVEL', varidpl) 1300 IF (rcode.NE.0) rcode = nf90_inq_varid(ncidpl, 'PRESSURE', varidpl) 1300 1301 print*,'ncidpl,varidpl',ncidpl,varidpl 1301 1302 endif -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/ozonecm_m.F90
r1182 r1188 1 !2 1 ! $Header$ 3 ! 4 SUBROUTINE ozonecm(rjour, rlat, paprs, o3) 5 USE dimphy 6 IMPLICIT none 7 C 8 C The ozone climatology is based on an analytic formula which fits the 9 C Krueger and Mintzner (1976) profile, as well as the variations with 10 C altitude and latitude of the maximum ozone concentrations and the total 11 C column ozone concentration of Keating and Young (1986). The analytic 12 C formula have been established by J-F Royer (CRNM, Meteo France), who 13 C also provided us the code. 14 C 15 C A. J. Krueger and R. A. Minzner, A Mid-Latitude Ozone Model for the 16 C 1976 U.S. Standard Atmosphere, J. Geophys. Res., 81, 4477, (1976). 17 C 18 C Keating, G. M. and D. F. Young, 1985: Interim reference models for the 19 C middle atmosphere, Handbook for MAP, vol. 16, 205-229. 20 C 2 module ozonecm_m 21 3 22 cym#include "dimensions.h" 23 cym#include "dimphy.h" 24 #include "clesphys.h" 25 #include "YOMCST.h" 26 REAL rlat(klon), paprs(klon,klev+1) 27 REAL o3(klon,klev) ! ozone concentration in kg/kg 28 REAL tozon, rjour, pi, pl 29 INTEGER i, k 30 C---------------------------------------------------------- 31 REAL field(klon,klev+1) 32 REAL ps 33 PARAMETER (ps=101325.0) 34 REAL an, unit, zo3q3 35 SAVE an, unit, zo3q3 36 c$OMP THREADPRIVATE(an, unit, zo3q3) 37 REAL mu,gms, zslat, zsint, zcost, z, ppm, qpm, a 38 REAL asec, bsec, aprim, zo3a3 39 C---------------------------------------------------------- 40 c data an /365.25/ (meteo) 41 DATA an /360.00/ 42 DATA unit /2.1415e-05/ 43 DATA zo3q3 /4.0e-08/ 4 IMPLICIT NONE 44 5 45 pi = 4.0 * ATAN(1.0) 46 DO k = 1, klev 47 DO i = 1, klon 48 zslat = SIN(pi/180.*rlat(i)) 49 zsint = SIN(2.*pi*(rjour+15.)/an) 50 zcost = COS(2.*pi*(rjour+15.)/an) 51 z = 0.0531+zsint*(-0.001595+0.009443*zslat) + 52 . zcost*(-0.001344-0.00346*zslat) + 53 . zslat**2*(.056222+zslat**2*(-.037609 54 . +.012248*zsint+.00521*zcost+.008890*zslat)) 55 zo3a3 = zo3q3/ps/2. 56 z = z-zo3q3*ps 57 gms = z 58 mu = ABS(sin(pi/180.*rlat(i))) 59 ppm = 800.-(500.*zslat+150.*zcost)*zslat 60 qpm = 1.74e-5-(7.5e-6*zslat+1.7e-6*zcost)*zslat 61 bsec = 2650.+5000.*zslat**2 62 a = 4.0*(bsec)**(3./2.)*(ppm)**(3./2.)*(1.0+(bsec/ps)**(3./2.)) 63 a = a/(bsec**(3./2.)+ppm**(3./2.))**2 64 aprim = (2.666666*qpm*ppm-a*gms)/(1.0-a) 65 aprim = amax1(0.,aprim) 66 asec = (gms-aprim)*(1.0+(bsec/ps)**(3./2.)) 67 asec = AMAX1(0.0,asec) 68 aprim = gms-asec/(1.+(bsec/ps)**(3./2.)) 69 pl = paprs(i,k) 70 tozon = aprim/(1.+3.*(ppm/pl)**2)+asec/(1.+(bsec/pl)**(3./2.)) 71 . + zo3a3*pl*pl 72 tozon = tozon / 9.81 ! en kg/m**2 73 tozon = tozon / unit ! en kg/m**2 > u dobson (10e-5 m) 74 tozon = tozon / 1000. ! en cm 75 field(i,k) = tozon 76 ENDDO 77 ENDDO 78 c 79 DO i = 1, klon 80 field(i,klev+1) = 0.0 81 ENDDO 82 DO k = 1, klev 83 DO i = 1, klon 84 o3(i,k) = field(i,k) - field(i,k+1) 85 ENDDO 86 ENDDO 87 c 88 RETURN 89 END 6 contains 7 8 SUBROUTINE ozonecm(rjour,rlat,paprs,o3) 9 10 ! The ozone climatology is based on an analytic formula which fits the 11 ! Krueger and Mintzner (1976) profile, as well as the variations with 12 ! altitude and latitude of the maximum ozone concentrations and the total 13 ! column ozone concentration of Keating and Young (1986). The analytic 14 ! formula have been established by J.-F. Royer (CRNM, Meteo France), who 15 ! also provided us the code. 16 17 ! A. J. Krueger and R. A. Minzner, A Mid-Latitude Ozone Model for the 18 ! 1976 U.S. Standard Atmosphere, J. Geophys. Res., 81, 4477, (1976). 19 20 ! Keating, G. M. and D. F. Young, 1985: Interim reference models for the 21 ! middle atmosphere, Handbook for MAP, vol. 16, 205-229. 22 23 USE dimphy, only: klon, klev 24 25 REAL, INTENT (IN) :: rjour 26 REAL, INTENT (IN) :: rlat(klon), paprs(klon,klev+1) 27 REAL o3(klon,klev) 28 ! "o3(j, k)" is the column-density of ozone in cell "(j, k)", that is 29 ! between interface "k" and interface "k + 1", in kDU. 30 31 ! Variables local to the procedure: 32 33 REAL tozon ! equivalent pressure of ozone above interface "k", in Pa 34 real pi, pl 35 INTEGER i, k 36 37 REAL field(klon,klev+1) 38 ! "field(:, k)" is the column-density of ozone between interface 39 ! "k" and the top of the atmosphere (interface "llm + 1"), in kDU. 40 41 real, PARAMETER:: ps=101325. 42 REAL, parameter:: an = 360., zo3q3 = 4E-8 43 REAL, parameter:: dobson_unit = 2.1415E-5 ! in kg m-2 44 REAL gms, zslat, zsint, zcost, z, ppm, qpm, a 45 REAL asec, bsec, aprim, zo3a3 46 47 !---------------------------------------------------------- 48 49 pi = 4. * atan(1.) 50 DO k = 1, klev 51 DO i = 1, klon 52 zslat = sin(pi / 180. * rlat(i)) 53 zsint = sin(2.*pi*(rjour+15.)/an) 54 zcost = cos(2.*pi*(rjour+15.)/an) 55 z = 0.0531 + zsint * (-0.001595+0.009443*zslat) & 56 + zcost * (-0.001344-0.00346*zslat) & 57 + zslat**2 * (.056222 + zslat**2 & 58 * (-.037609+.012248*zsint+.00521*zcost+.008890*zslat)) 59 zo3a3 = zo3q3/ps/2. 60 z = z - zo3q3*ps 61 gms = z 62 ppm = 800. - (500.*zslat+150.*zcost)*zslat 63 qpm = 1.74E-5 - (7.5E-6*zslat+1.7E-6*zcost)*zslat 64 bsec = 2650. + 5000.*zslat**2 65 a = 4.0*(bsec)**(3./2.)*(ppm)**(3./2.)*(1.0+(bsec/ps)**(3./2.)) 66 a = a/(bsec**(3./2.)+ppm**(3./2.))**2 67 aprim = (2.666666*qpm*ppm-a*gms)/(1.0-a) 68 aprim = amax1(0., aprim) 69 asec = (gms-aprim)*(1.0+(bsec/ps)**(3./2.)) 70 asec = amax1(0.0, asec) 71 aprim = gms - asec/(1.+(bsec/ps)**(3./2.)) 72 pl = paprs(i, k) 73 tozon = aprim / (1. + 3. * (ppm / pl)**2) & 74 + asec / (1. + (bsec / pl)**(3./2.)) + zo3a3 * pl * pl 75 ! Convert from Pa to kDU: 76 field(i, k) = tozon / 9.81 / dobson_unit / 1e3 77 END DO 78 END DO 79 80 field(:,klev+1) = 0. 81 forall (k = 1: klev) o3(:,k) = field(:,k) - field(:,k+1) 82 83 END SUBROUTINE ozonecm 84 85 end module ozonecm_m -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/physiq.F
r1183 r1188 34 34 use mod_phys_lmdz_mpi_data, only: is_mpi_root 35 35 USE aero_mod 36 use ozonecm_m, only: ozonecm ! ozone of J.-F. Royer 36 37 37 38 IMPLICIT none … … 735 736 EXTERNAL o3cm ! initialiser l'ozone 736 737 EXTERNAL orbite ! calculer l'orbite terrestre 737 EXTERNAL ozonecm ! prescrire l'ozone738 738 EXTERNAL phyetat0 ! lire l'etat initial de la physique 739 739 EXTERNAL phyredem ! ecrire l'etat de redemarrage de la physique -
LMDZ4/branches/LMDZ4-dev/output.def
r1103 r1188 591 591 flag_ovap = 2, 3, 4, 1, 1 592 592 name_ovap = ovap 593 # Geopotential height 593 # ? 594 flag_ovapinit = 2, 3, 4, 1, 1 595 name_ovapinit = ovapinit 596 # ? 594 597 flag_wvapp = 2, 10, 10, 10, 10 595 598 name_wvapp = wvapp 596 # Zonal wind599 # Geopotential height 597 600 flag_geop = 2, 3, 10, 1, 1 598 601 name_geop = geop
Note: See TracChangeset
for help on using the changeset viewer.