Changeset 1301 for trunk/LMDZ.VENUS/libf
- Timestamp:
- Jun 26, 2014, 12:25:31 PM (11 years ago)
- Location:
- trunk/LMDZ.VENUS/libf/phyvenus
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.VENUS/libf/phyvenus/ajsec.F
r1017 r1301 147 147 ENDIF 148 148 c ---------------------------- 149 c TEST --- PAS DE MELANGE DE U 149 c TEST --- PAS DE MELANGE DE U ni Q 150 150 c zalpha=0. 151 151 c ---------------------------- -
trunk/LMDZ.VENUS/libf/phyvenus/clmain.F
r1017 r1301 368 368 ycoefm(1:knon,2:klev)=ykmm(1:knon,2:klev) 369 369 ycoefh(1:knon,2:klev)=ykmn(1:knon,2:klev) 370 c --371 c VENUS: on met le coefficient K =0 au-dessus de 40 km (2.5e5 Pa)372 do i=1,knon373 do k=2,klev374 if (ypaprs(i,k).lt.2.5e5) then375 ycoefm(i,k)=1.e-7376 ycoefh(i,k)=1.e-7377 endif378 enddo379 enddo380 c --381 370 382 371 c------------------------------------------------- -
trunk/LMDZ.VENUS/libf/phyvenus/comcstVE.h
r892 r1301 2 2 ! INCLUDE comcstVE.h 3 3 4 integer nnuve,nbztopve,nbpsve,nbmat 5 parameter (nnuve=68) ! fichiers Vincent et Bullock 6 parameter (nbpsve=16) ! number of psurf in Vincent's matrixes 7 parameter (nbztopve=4) ! number of ztop in Vincent's matrixes 8 parameter (nbmat=nbztopve*nbpsve) ! number of matrixes in Vincent's file 4 integer nnuve,nbmat 5 parameter (nnuve=68) ! fichiers Vincent et Bullock 6 parameter (nbmat=210) ! Max number of matrixes in Vincent's file 9 7 10 common/comcstVE/al,bl,ztopve,psurfve 8 common/comcstVE/al,bl,nlatve,indexve,nbpsve,nbszave, & 9 & psurfve,szave 11 10 12 real al(nnuve),bl(nnuve) ! for Planck luminances calculations 13 real ztopve(nbmat) ! cloud top altitude in matrixes (km) 14 real psurfve(nbmat) ! surface pressure in matrixes (Pa) 11 real al(nnuve),bl(nnuve) ! for Planck luminances calculations 12 ! Structure of the ksi matrixes 13 integer nlatve,indexve(5),nbpsve(5),nbszave(5) 14 real psurfve(16,5) ! surface pressure in matrixes (Pa) 15 real szave(8,5) ! converted in mu0 15 16 16 17 -
trunk/LMDZ.VENUS/libf/phyvenus/drag_noro.F
r101 r1301 30 30 c paprs---input-R-Pressure in semi layers (Pa) 31 31 c pplay---input-R-Pressure model-layers (Pa) 32 c pgeop---input-R-Geopotential model layers (m)32 c pgeop---input-R-Geopotential model layers (reference to ground) 33 33 c pn2-----input-R-Brunt-Vaisala freq.^2 at 1/2 layers 34 34 c t-------input-R-temperature (K) … … 66 66 c ================ 67 67 c 68 c zgeom-----R: Altitude of layer above ground68 c zgeom-----R: Altitude (m) of layer above ground (from top to bottom) 69 69 c pt, pu, pv --R: t u v from top to bottom 70 70 c pdtdt, pdudt, pdvdt --R: t u v tendencies (from top to bottom) … … 137 137 DO k = klev, 1, -1 138 138 DO i = 1, klon 139 zgeom(i,k) = pgeop(i,klev-k+1) 139 zgeom(i,k) = pgeop(i,klev-k+1)/RG 140 140 zn2(i,k) = pn2(i,klev-k+1) 141 141 ENDDO -
trunk/LMDZ.VENUS/libf/phyvenus/grid_noro.F
r1048 r1301 93 93 REAL zpic(imar+1,jmar),zval(imar+1,jmar) 94 94 real num_tot(2200,1100),num_lan(2200,1100) 95 c 95 96 96 REAL a(2200),b(2200),c(1100),d(1100) 97 c 97 98 c pas defini puisque pas de physique dans newstart... 99 RPI=2.*ASIN(1.) 100 RA=6051300. 101 98 102 print *,' parametres de l orographie a l echelle sous maille' 99 103 -
trunk/LMDZ.VENUS/libf/phyvenus/ini_histmth.h
r902 r1301 151 151 . 32, "ave(X)", zsto,zout) 152 152 c 153 154 155 156 c 157 158 159 160 c 161 162 163 153 c CALL histdef(nid_mth, "fluxvdf", "PBL net flux","W/m2", 154 c . iim,jj_nb,nhori, klev,1,klev,nvert, 155 c . 32, "ave(X)", zsto,zout) 156 c 157 c CALL histdef(nid_mth, "fluxdyn", "Dyn. net flux","W/m2", 158 c . iim,jj_nb,nhori, klev,1,klev,nvert, 159 c . 32, "ave(X)", zsto,zout) 160 c 161 c CALL histdef(nid_mth, "fluxajs", "Dry adj. net flux","W/m2", 162 c . iim,jj_nb,nhori, klev,1,klev,nvert, 163 c . 32, "ave(X)", zsto,zout) 164 164 c 165 165 c CALL histdef(nid_mth, "fluxec", "Cin. net flux","W/m2", -
trunk/LMDZ.VENUS/libf/phyvenus/load_ksi.F
r892 r1301 23 23 C MODIFICATIONS. 24 24 C -------------- 25 C version multimatrice (topographie, sommet nuages): 20/12/2006 25 C 26 c New ksi matrix: possibility of different cloud model fct of lat 05/2014 26 27 C ------------------------------------------------------------------ 27 28 C … … 30 31 c inputs 31 32 real psurf(klon) ! Surface pressure 32 real ztop(klon) ! Altitude of the top of cloud deck (km)33 33 c outputs 34 34 real ksive(0:klev+1,0:klev+1,nnuve,nbmat) ! ksi matrixes in Vincent's file 35 35 36 36 c local variables 37 integer i,j,ig,band,pve,nlve 38 integer mat,Nb,m,Nmat,nl_init,mat0 39 parameter(nl_init=8) 37 integer i,j,isza,ips,band,pve,sve,nlve 38 integer lat,Nb,m,mat 40 39 character*9 tmp1 41 40 character*100 file 41 CHARACTER*2 str2 42 42 real lambda(nnuve) ! wavelenght in table (mu->m, middle of interval) 43 43 real lambdamin(nnuve),lambdamax(nnuve) ! in microns 44 real dlambda ! cm-144 real dlambda ! in microns 45 45 46 46 nlve = klev … … 53 53 open(10,file=file) 54 54 55 do i=1,nl_init-1 56 read(10,*) 57 enddo 58 read(10,*) (tmp1,i=1,4),Nmat 55 read(10,*) 56 read(10,*) nlatve 57 read(10,*) 59 58 60 if (nbmat.ne.Nmat) then 61 write(*,*) 'This is subroutine load_ksi' 62 print*,'Probleme de dimension entre ksi.txt et le param nbmat' 63 print*,'Nb matrices = ',nbmat,Nmat 64 stop 65 endif 66 67 do mat=1,nbmat 59 write(*,*) 'This is subroutine load_ksi' 60 write(*,*) 'Nb of lat bands:',nlatve 61 62 do lat=1,nlatve 63 read(10,*) !line for lat range 64 read(10,*) indexve(lat) 65 read(10,*) nbpsve(lat) 68 66 read(10,*) 69 read(10,*) 67 read(10,*) nbszave(lat) 68 read(10,*) 69 70 do isza=1,nbszave(lat) 71 do ips=1,nbpsve(lat) 72 73 read(10,*) (tmp1,j=1,3),mat !line for matrix number 70 74 read(10,*) (tmp1,j=1,2),pve 71 psurfve( mat) = pve*1.e5 ! pve en bar, psurfve en Pa72 read(10,*) (tmp1,j=1, 7),ztopve(mat)73 ztopve(mat) = ztopve(mat)*1.e-3 ! passage en km 75 psurfve(ips,lat) = pve*1.e5 ! pve in bar, psurfve in Pa 76 read(10,*) (tmp1,j=1,3),sve 77 szave(isza,lat) = cos(sve*RPI/180.) ! conversion in mu0 74 78 read(10,*) 75 79 read(10,*) m,Nb 76 80 if (m.ne.nlve) then 77 81 write(*,*) 'This is subroutine load_ksi' 78 print*,' Probleme de dimension entre ksi.txt et le paramnlve'82 print*,'Dimension problem between ksi.txt and nlve' 79 83 print*,'N levels = ',m,nlve 80 84 stop … … 82 86 if (Nb.ne.nnuve) then 83 87 write(*,*) 'This is subroutine load_ksi' 84 print*,' Probleme de dimension entre ksi.txt et le paramnnuve'88 print*,'Dimension problem between ksi.txt and nnuve' 85 89 print*,'N freq = ',Nb,nnuve 86 90 stop 87 91 endif 88 92 c Now reading ksi matrix index "mat" 93 write(str2,'(i2.2)') m+2 89 94 do band=1,Nb 90 95 read(10,*) lambdamin(band),lambdamax(band) 91 96 do i=0,m+1 92 read(10,'( 100e17.9)') (ksive(i,j,band,mat),j=0,m+1) ! sr/µm/cm¯¹97 read(10,'('//str2//'e17.9)') (ksive(i,j,band,mat),j=0,m+1) ! no unit 93 98 enddo ! i 94 99 enddo ! band 95 100 c print*,"Matrice ",mat," lue" 96 c print*," psurf=",psurfve(mat)," bars, Ztop=",ztopve(mat)," km" 97 enddo ! mat 101 c print*," psurf=",psurfve(ips,lat)," bars" 102 if (mat+1.gt.nbmat) then 103 write(*,*) 'This is subroutine load_ksi' 104 print*,'Dimension problem between ksi.txt and nbmat' 105 print*,'(max number of matrixes)' 106 print*,'nbmat (in comcstVE.h) should be raised' 107 stop 108 endif 109 110 enddo ! ips 111 enddo ! isza 112 enddo ! lat 113 114 write(*,*) 'Total nb of matrixes:',mat 98 115 99 116 close(10) 100 117 101 c longueur d'onde centrale et largeur de chaque bande118 c central wavelength and wavelength width 102 119 do band=1,nnuve 103 lambda(band)=(lambdamin(band)+lambdamax(band))/2.*1.e-6 ! en m104 dlambda =( 1./lambdamin(band)-1./lambdamax(band))*1.e4 ! en cm-1120 lambda(band)=(lambdamin(band)+lambdamax(band))/2.*1.e-6 ! in m 121 dlambda =(lambdamax(band)-lambdamin(band)) ! in microns 105 122 c print*,band,lambdamin(band),dlambda,lambdamax(band) 106 123 107 c changement de convention (signe) pour ksi,108 c et prise en compte de la largeur de bande (en cm-1):124 c sign convention for ksi, 125 c and taking into account the wavelength width (in microns): 109 126 do mat=1,nbmat 110 127 do i=0,nlve+1 111 128 do j=0,nlve+1 112 ksive(i,j,band,mat) = -ksive(i,j,band,mat)*dlambda129 ksive(i,j,band,mat) = +ksive(i,j,band,mat)*dlambda ! in µm 113 130 enddo 114 131 enddo 115 132 enddo 116 c c alcul des coeff al et bl pour luminance Planck133 c computing coeff al and bl for Planck luminance 117 134 al(band) = 2.*RHPLA*RCLUM*RCLUM/(lambda(band))**5. 118 c cette luminance doit etre en W/m²/sr/µm pour correspondre au calcul119 c des ksi. Ici, elle est en W/m²/sr/m donc il faut mettre un facteur 1.e-6135 c in W/m²/m 136 c We need W/m²/µm : 120 137 . * 1.e-6 121 138 bl(band) = RHPLA*RCLUM/(RKBOL*lambda(band)) -
trunk/LMDZ.VENUS/libf/phyvenus/lw_venus_ve.F
r1017 r1301 42 42 c output 43 43 44 REAL PCOOL(klev) ! LONGWAVE COOLING (K/VENUSDAY) within each layer44 REAL PCOOL(klev) ! LONGWAVE COOLING (K/s) within each layer 45 45 REAL PTOPLW ! LONGWAVE FLUX AT T.O.A. (net, + vers le haut) 46 46 REAL PSOLLW ! LONGWAVE FLUX AT SURFACE (net, + vers le haut) … … 51 51 C* LOCAL VARIABLES: 52 52 C 53 real dureejour54 parameter (dureejour=10.087e6)55 56 53 integer i,j,p 57 54 real zlnet(klev+1) ! net thermal flux (W/m**2) … … 127 124 c print*,PCOOL 128 125 129 do j=1,klev130 PCOOL(j) = PCOOL(j)*dureejour ! K/Venusday131 enddo132 133 126 return 134 127 end -
trunk/LMDZ.VENUS/libf/phyvenus/newstart.F
r1055 r1301 69 69 REAL tsurf(ngridmx),tsoil(ngridmx,nsoilmx) 70 70 REAL albe(ngridmx),radsol(ngridmx),sollw(ngridmx) 71 real solsw(ngridmx),dlw(ngridmx) 71 real solsw(ngridmx),fder(ngridmx) 72 real sollwdown(ngridmx),dlw(ngridmx) 72 73 REAL zmea(ngridmx), zstd(ngridmx) 73 74 REAL zsig(ngridmx), zgam(ngridmx), zthe(ngridmx) … … 84 85 real tsurfS(iip1,jjp1),tsoilS(iip1,jjp1,nsoilmx) 85 86 real albeS(ip1jmp1),radsolS(ip1jmp1),sollwS(ip1jmp1) 86 real solswS(ip1jmp1),dlwS(ip1jmp1) 87 real solswS(ip1jmp1),fderS(ip1jmp1) 88 real sollwdownS(ip1jmp1),dlwS(ip1jmp1) 87 89 real zmeaS(ip1jmp1),zstdS(ip1jmp1),zsigS(ip1jmp1) 88 90 real zgamS(ip1jmp1),ztheS(ip1jmp1),zpicS(ip1jmp1) … … 116 118 real, dimension(:,:), allocatable :: albeold,radsolold 117 119 real, dimension(:,:), allocatable :: sollwold,solswold 118 real, dimension(:,:), allocatable :: dlwold 120 real, dimension(:,:), allocatable :: fderold 121 real, dimension(:,:), allocatable :: dlwold,sollwdownold 119 122 real, dimension(:,:), allocatable :: zmeaold,zstdold,zsigold 120 123 real, dimension(:,:), allocatable :: zgamold,ztheold,zpicold … … 135 138 integer, dimension(4) :: start,counter 136 139 REAL phisinverse(iip1,jjp1) ! geopotentiel au sol avant inversion 137 logical topoflag,albedoflag,razvitu 140 logical topoflag,albedoflag,razvitu,razvitv 138 141 real albedo 139 142 … … 318 321 allocate(albeold(imold+1,jmold+1),radsolold(imold+1,jmold+1)) 319 322 allocate(sollwold(imold+1,jmold+1),solswold(imold+1,jmold+1)) 320 allocate(dlwold(imold+1,jmold+1)) 323 allocate(fderold(imold+1,jmold+1)) 324 allocate(sollwdownold(imold+1,jmold+1),dlwold(imold+1,jmold+1)) 321 325 allocate(zmeaold(imold+1,jmold+1),zstdold(imold+1,jmold+1)) 322 326 allocate(zsigold(imold+1,jmold+1),zgamold(imold+1,jmold+1)) … … 616 620 ENDIF 617 621 c 622 ierr = NF_INQ_VARID (nid, "fder", nvarid) 623 IF (ierr .NE. NF_NOERR) THEN 624 PRINT*, "lect_start_archive: Le champ <fder> est absent" 625 CALL abort 626 ENDIF 627 #ifdef NC_DOUBLE 628 ierr = NF_GET_VARA_DOUBLE(nid, nvarid,start,counter,fderold) 629 #else 630 ierr = NF_GET_VARA_REAL(nid, nvarid,start,counter,fderold) 631 #endif 632 IF (ierr .NE. NF_NOERR) THEN 633 PRINT*, "lect_start_archive: Lecture echouee pour <fder>" 634 CALL abort 635 ENDIF 636 c 618 637 ierr = NF_INQ_VARID (nid, "dlw", nvarid) 619 638 IF (ierr .NE. NF_NOERR) THEN … … 628 647 IF (ierr .NE. NF_NOERR) THEN 629 648 PRINT*, "lect_start_archive: Lecture echouee pour <dlw>" 649 CALL abort 650 ENDIF 651 c 652 ierr = NF_INQ_VARID (nid, "sollwdown", nvarid) 653 IF (ierr .NE. NF_NOERR) THEN 654 PRINT*, "lect_start_archive: Le champ <sollwdown> est absent" 655 CALL abort 656 ENDIF 657 #ifdef NC_DOUBLE 658 ierr = NF_GET_VARA_DOUBLE(nid, nvarid,start,counter,sollwdownold) 659 #else 660 ierr = NF_GET_VARA_REAL(nid, nvarid,start,counter,sollwdownold) 661 #endif 662 IF (ierr .NE. NF_NOERR) THEN 663 PRINT*, "lect_start_archive: Lecture echouee pour <sollwdown>" 630 664 CALL abort 631 665 ENDIF … … 844 878 topoflag = . FALSE . 845 879 CALL getin('topoflag',topoflag) 880 881 print*,zmeaold(2,1:10) 846 882 847 883 IF ( topoflag ) then … … 952 988 call gr_dyn_fi (1,iip1,jjp1,ngridmx,solswS,solsw) 953 989 990 call interp_horiz (fderold,fderS,imold,jmold,iim,jjm,1, 991 & rlonuold,rlatvold,rlonu,rlatv) 992 call gr_dyn_fi (1,iip1,jjp1,ngridmx,fderS,fder) 993 954 994 call interp_horiz (dlwold,dlwS,imold,jmold,iim,jjm,1, 955 995 & rlonuold,rlatvold,rlonu,rlatv) 956 996 call gr_dyn_fi (1,iip1,jjp1,ngridmx,dlwS,dlw) 997 998 call interp_horiz (sollwdownold,sollwdownS,imold,jmold,iim,jjm,1, 999 & rlonuold,rlatvold,rlonu,rlatv) 1000 call gr_dyn_fi (1,iip1,jjp1,ngridmx,sollwdownS,sollwdown) 957 1001 958 1002 print*,"Nouvelles var physiques OK" … … 1044 1088 razvitu = . FALSE . 1045 1089 CALL getin('razvitu',razvitu) 1090 razvitv = . FALSE . 1091 CALL getin('razvitv',razvitv) 1046 1092 1047 1093 c calcul des champ de vent; passage en vent covariant … … 1053 1099 call interp_horiz(var,us,imold,jmold,iim,jjm,llm, 1054 1100 & rlonuold,rlatvold,rlonu,rlatv) 1055 write (*,*) 'us ', us (1,2,1) ! INFO1101 write (*,*) 'us ', us (1,2,1) ! INFO 1056 1102 1057 1103 call interp_vert … … 1078 1124 write (*,*) 'ucov ', ucov (1,2,1) ! INFO 1079 1125 c write(48,*) 'ucov',ucov 1126 ! Reseting v=0 1127 if (razvitv) then 1128 vnat(:,:,:) = 0. 1129 endif 1130 write (*,*) 'vnat ', vnat (1,2,1) ! INFO 1080 1131 do l=1,llm 1081 1132 do j = 1, jjm … … 1114 1165 1115 1166 call writerestartphy('restartphy.nc',tab_cntrl_fi,ngridmx,llm, 1116 . rlat,rlon,tsurf,tsoil,albe,solsw, sollw, dlw,1117 . radsol,1167 . rlat,rlon,tsurf,tsoil,albe,solsw, sollw,fder,dlw, 1168 . sollwdown,radsol, 1118 1169 . zmea,zstd,zsig,zgam,zthe,zpic,zval, 1119 1170 . t_fi) -
trunk/LMDZ.VENUS/libf/phyvenus/phyetat0.F90
r973 r1301 231 231 PRINT*,'Rayonnement net au sol radsol:', xmin, xmax 232 232 233 ! Lecture de l'orographie sous-maille si ok_orodr: 234 235 if(ok_orodr) then 236 233 ! Lecture de l'orographie sous-maille: 234 237 235 CALL get_field("ZMEA",zmea,found) 238 236 IF (.not.found) THEN 239 237 PRINT*, 'phyetat0: Le champ <ZMEA> est absent' 240 CALL abort 238 PRINT*, 'mis a zero' 239 zmea=0. 241 240 ENDIF 242 241 xmin = 1.0E+20 … … 251 250 IF (.not.found) THEN 252 251 PRINT*, 'phyetat0: Le champ <ZSTD> est absent' 253 CALL abort 252 PRINT*, 'mis a zero' 253 zstd=0. 254 254 ENDIF 255 255 xmin = 1.0E+20 … … 264 264 IF (.not.found) THEN 265 265 PRINT*, 'phyetat0: Le champ <ZSIG> est absent' 266 CALL abort 266 PRINT*, 'mis a zero' 267 zsig=0. 267 268 ENDIF 268 269 xmin = 1.0E+20 … … 277 278 IF (.not.found) THEN 278 279 PRINT*, 'phyetat0: Le champ <ZGAM> est absent' 279 CALL abort 280 PRINT*, 'mis a zero' 281 zgam=0. 280 282 ENDIF 281 283 xmin = 1.0E+20 … … 290 292 IF (.not.found) THEN 291 293 PRINT*, 'phyetat0: Le champ <ZTHE> est absent' 292 CALL abort 294 PRINT*, 'mis a zero' 295 zthe=0. 293 296 ENDIF 294 297 xmin = 1.0E+20 … … 303 306 IF (.not.found) THEN 304 307 PRINT*, 'phyetat0: Le champ <ZPIC> est absent' 305 CALL abort 308 PRINT*, 'mis a zero' 309 zpic=0. 306 310 ENDIF 307 311 xmin = 1.0E+20 … … 316 320 IF (.not.found) THEN 317 321 PRINT*, 'phyetat0: Le champ <ZVAL> est absent' 318 CALL abort 322 PRINT*, 'mis a zero' 323 zval=0. 319 324 ENDIF 320 325 xmin = 1.0E+20 … … 325 330 ENDDO 326 331 PRINT*,'OROGRAPHIE SOUS-MAILLE zval:', xmin, xmax 327 328 else329 zmea = 0.330 zstd = 0.331 zsig = 0.332 zgam = 0.333 zthe = 0.334 zpic = 0.335 zval = 0.336 337 endif ! fin test sur ok_orodr338 332 339 333 ! Lecture de TANCIEN: -
trunk/LMDZ.VENUS/libf/phyvenus/physiq.F
r1160 r1301 7 7 . paprs,pplay,ppk,pphi,pphis,presnivs, 8 8 . u,v,t,qx, 9 . omega,9 . flxmw, 10 10 . d_u, d_v, d_t, d_qx, d_ps) 11 11 … … 46 46 c qx------input-R-mass mixing ratio traceurs (kg/kg) 47 47 c d_t_dyn-input-R-tendance dynamique pour "t" (K/s) 48 c omega---input-R-vitesse verticale en Pa/s48 c flxmw---input-R-flux de masse vertical en kg/s 49 49 c 50 50 c d_u-----output-R-tendance physique de "u" (m/s/s) … … 125 125 REAL d_t_dyn(klon,klev) 126 126 127 REAL omega(klon,klev)127 REAL flxmw(klon,klev) 128 128 129 129 REAL d_u(klon,klev) … … 146 146 c Variables propres a la physique 147 147 c 148 REAL,save,allocatable :: rlev(:,:) ! altitude a chaque niveau (interface inferieure de la couche)149 148 INTEGER,save :: itap ! compteur pour la physique 150 149 REAL delp(klon,klev) ! epaisseur d'une couche 150 REAL omega(klon,klev) ! vitesse verticale en Pa/s 151 151 152 152 153 INTEGER igwd,idx(klon),itest(klon) … … 242 243 c 243 244 REAL zphi(klon,klev) 244 c 245 REAL zzlev(klon,klev+1),zzlay(klon,klev),z1,z2 246 245 247 c Variables du changement 246 248 c … … 362 364 c======================== 363 365 IF (debut) THEN 364 allocate(rlev(klon,klevp1))365 366 allocate(source(klon,nqmax)) 366 367 … … 621 622 ENDIF 622 623 c==================================================================== 624 625 c Calcule de vitesse verticale a partir de flux de masse verticale 626 DO k = 1, klev 627 DO i = 1, klon 628 omega(i,k) = RG*flxmw(i,k) / airephy(i) 629 END DO 630 END DO 631 623 632 c 624 633 c Ajouter le geopotentiel du sol: … … 629 638 ENDDO 630 639 ENDDO 640 641 c calcul du geopotentiel aux niveaux intercouches 642 c ponderation des altitudes au niveau des couches en dp/p 643 644 DO k=1,klev 645 DO i=1,klon 646 zzlay(i,k)=zphi(i,k)/RG 647 ENDDO 648 ENDDO 649 DO i=1,klon 650 zzlev(i,1)=pphis(i)/RG 651 ENDDO 652 DO k=2,klev 653 DO i=1,klon 654 z1=(pplay(i,k-1)+paprs(i,k))/(pplay(i,k-1)-paprs(i,k)) 655 z2=(paprs(i,k) +pplay(i,k))/(paprs(i,k) -pplay(i,k)) 656 zzlev(i,k)=(z1*zzlay(i,k-1)+z2*zzlay(i,k))/(z1+z2) 657 ENDDO 658 ENDDO 659 DO i=1,klon 660 zzlev(i,klev+1)=zzlay(i,klev)+(zzlay(i,klev)-zzlev(i,klev)) 661 ENDDO 662 631 663 c==================================================================== 632 664 c … … 729 761 fder = dlw 730 762 731 c print*,"radsol avant clmain=",radsol(klon/2)732 c print*,"solsw avant clmain=",solsw(klon/2)733 c print*,"sollw avant clmain=",sollw(klon/2)734 735 763 ! ADAPTATION GCM POUR CP(T) 736 764 … … 749 777 s ycoefh,yu1,yv1) 750 778 751 c print*,"radsol apres clmain=",radsol(klon/2)752 c print*,"solsw apres clmain=",solsw(klon/2)753 c print*,"sollw apres clmain=",sollw(klon/2)754 755 779 CXXX Incrementation des flux 756 780 DO i = 1, klon … … 770 794 ENDDO 771 795 ENDDO 772 c773 c print*,"d_t_vdf1=",d_t_vdf(1,:)*dtime774 c print*,"d_t_vdf2=",d_t_vdf(klon/2,:)*dtime775 c print*,"d_t_vdf3=",d_t_vdf(klon,:)*dtime776 c print*,"d_u_vdf=",d_u_vdf(klon/2,:)*dtime777 c print*,"d_v_vdf=",d_v_vdf(klon/2,:)*dtime778 796 779 797 C TRACEURS … … 810 828 c Incrementer la temperature du sol 811 829 c 812 c print*,'Tsol avant clmain:',ftsol(1)813 830 DO i = 1, klon 814 831 ftsol(i) = ftsol(i) + d_ts(i) 815 832 ENDDO 816 c print*,'Tsol apres clmain:',ftsol(1)817 833 818 834 c Calculer la derive du flux infrarouge … … 878 894 v_seri(:,:) = v_seri(:,:) + d_v_ajs(:,:) 879 895 d_v_ajs(:,:)= d_v_ajs(:,:)/dtime ! (m/s)/s 880 if (iflag_trac.eq.1) then 896 897 if (iflag_trac.eq.1) then 881 898 tr_seri(:,:,:) = tr_seri(:,:,:) + d_tr_ajs(:,:,:) 882 899 d_tr_ajs(:,:,:)= d_tr_ajs(:,:,:)/dtime ! /s 883 endif 884 885 c print*,"d_t_ajs1=",d_t_ajs(1,:)*dtime 886 c print*,"d_t_ajs2=",d_t_ajs(klon/2,:)*dtime 887 c print*,"d_t_ajs3=",d_t_ajs(klon,:)*dtime 888 c print*,"d_u_ajs=",d_u_ajs(klon/2,:)*dtime 889 c print*,"d_v_ajs=",d_v_ajs(klon/2,:)*dtime 900 endif 890 901 891 902 endif … … 919 930 c PRINT*,'dtimerad,dtime,radpas',dtimerad,dtime,radpas 920 931 921 c print*,"radsol avant radlwsw=",radsol(klon/2)922 c print*,"solsw avant radlwsw=",solsw(klon/2)923 c print*,"sollw avant radlwsw=",sollw(klon/2)924 c print*,"avant radlwsw"925 926 932 CALL radlwsw 927 e (dist, rmu0, fract, 933 e (dist, rmu0, fract, zzlev, 928 934 e paprs, pplay,ftsol, t_seri, 929 935 s heat,cool,radsol, … … 932 938 s lwnet, swnet) 933 939 934 c print*,"apres radlwsw"935 c print*,"radsol apres radlwsw=",radsol(klon/2)936 c print*,"solsw apres radlwsw=",solsw(klon/2)937 c print*,"sollw apres radlwsw=",sollw(klon/2)938 940 itaprad = 0 939 941 DO k = 1, klev 940 942 DO i = 1, klon 941 dtrad(i,k) = heat(i,k)-cool(i,k) 942 dtrad(i,k) = dtrad(i,k)/RDAY !K/s 943 ENDDO 944 ENDDO 945 c print*,"dtrad1=",dtrad(1,:)*dtime 946 c print*,"dtrad2=",dtrad(klon/2,:)*dtime 947 c print*,"dtrad3=",dtrad(klon,:)*dtime 948 943 dtrad(i,k) = heat(i,k)-cool(i,k) !K/s 944 ENDDO 945 ENDDO 946 949 947 ENDIF 950 948 itaprad = itaprad + 1 -
trunk/LMDZ.VENUS/libf/phyvenus/phytrac_emiss.F
r1160 r1301 77 77 integer,parameter :: nbsrc=2,nblat=5,nblon=4 78 78 integer,parameter :: Nemiss=1 ! duree emission (Ed) 79 real,save :: source_volcan(nbsrc) 79 integer,save :: Nemiss(nbsrc) ! duration emission (Ed) 80 real,save :: source_volcan(nbsrc) ! flux emission (kg/s) 80 81 real,save :: lat_volcan(nblat),lon_volcan(nblon) 81 82 real,save :: area_emiss(nblat,nblon) … … 131 132 source_volcan(1) = 1. 132 133 source_volcan(2) = 1000. 134 c duration in Ed 135 Nemiss(1) = 1 136 Nemiss(2) = 10 133 137 c localisation volcan 134 138 lat_volcan(1) = 70. … … 173 177 do ilat = 1,nblat 174 178 do ilon = 1,nblon 175 it=min(iemiss*ilat*ilon,nqtot) 179 it=(iemiss-1)*nblat*nblon+(ilat-1)*nblon+ilon 180 it=min(it,nqtot) 181 deltatr(i,1,it) = 0. 176 182 177 183 if (i .eq. ig_volcan(ilat,ilon)) then 178 184 179 185 c source appliquee pendant Nemiss Ed 180 if (timesimu .lt. 86400.*Nemiss ) then186 if (timesimu .lt. 86400.*Nemiss(iemiss)) then 181 187 182 188 c source en kg/kg/s … … 185 191 tr_seri(i,1,it) = tr_seri(i,1,it) + deltatr(i,1,it)*pdtphys 186 192 187 else188 deltatr(i,1,it) = 0.189 193 end if ! duree emission 190 191 194 end if ! i localisation 192 195 end do -
trunk/LMDZ.VENUS/libf/phyvenus/radlwsw.F
r973 r1301 2 2 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/radlwsw.F,v 1.2 2004/10/27 10:14:46 lmdzadmin Exp $ 3 3 ! 4 SUBROUTINE radlwsw(dist, rmu0, fract, 4 SUBROUTINE radlwsw(dist, rmu0, fract, zzlev, 5 5 . paprs, pplay,tsol, t, 6 6 . heat,cool,radsol, … … 17 17 c fract----input-R- duree d'ensoleillement normalisee 18 18 c solaire--input-R- constante solaire (W/m**2) (dans clesphys.h) 19 c zzlev----input-R- altitude a inter-couche (m) 19 20 c paprs----input-R- pression a inter-couche (Pa) 20 21 c pplay----input-R- pression au milieu de couche (Pa) 21 22 c tsol-----input-R- temperature du sol (en K) 22 23 c t--------input-R- temperature (K) 23 c heat-----output-R- echauffement atmospherique (visible) (K/ jour)24 c cool-----output-R- refroidissement dans l'IR (K/ jour)24 c heat-----output-R- echauffement atmospherique (visible) (K/s) 25 c cool-----output-R- refroidissement dans l'IR (K/s) 25 26 c radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas) 26 27 c topsw----output-R- flux solaire net au sommet de l'atm. (+ vers le bas) … … 36 37 c S. Lebonnois 20/12/2006 37 38 c corrections 13/07/2007 39 c New ksi matrix: possibility of different cloud model fct of lat 05/2014 38 40 39 41 c====================================================================== … … 46 48 #include "clesphys.h" 47 49 #include "comcstVE.h" 48 c 50 51 !=========== 52 ! Arguments 53 !=========== 49 54 real rmu0(klon), fract(klon), dist 50 c 55 56 REAL zzlev(klon,klev+1) 51 57 real paprs(klon,klev+1), pplay(klon,klev) 52 58 real tsol(klon) … … 57 63 real sollwdown(klon) 58 64 REAL swnet(klon,klev+1),lwnet(klon,klev+1) 59 c 65 66 !=========== 67 ! Local 68 !=========== 60 69 INTEGER k, kk, i, j, band 61 c 70 62 71 REAL PPB(klev+1) 63 c 72 64 73 REAL zfract, zrmu0 65 c 74 66 75 REAL zheat(klev), zcool(klev) 67 real temp(klev)76 real temp(klev),znivs(klev+1) 68 77 REAL ZFSNET(klev+1),ZFLNET(klev+1) 69 78 REAL ztopsw, ztoplw … … 73 82 cIM END 74 83 real,save,allocatable :: ksive(:,:,:,:) ! ksi matrixes in Vincent's file 75 real,save,allocatable :: ztop(:) ! in km76 84 77 85 real psi(0:klev+1,0:klev+1) 78 86 real deltapsi(0:klev+1,0:klev+1) 79 real latdeg80 87 real pt0(0:klev+1) 81 88 real bplck(0:klev+1,nnuve) ! Planck luminances in table layers 82 real y(0:klev,nnuve) ! intermediairePlanck83 real zdblay(0:klev+1,nnuve) ! gradient en temperature de planck84 integer mat ,mat089 real y(0:klev,nnuve) ! temporary variable for Planck 90 real zdblay(0:klev+1,nnuve) ! temperature gradient of planck function 91 integer mat0,lat,ips,isza,ips0,isza0 85 92 real factp,factz,ksi 86 93 … … 98 105 allocate(ksive(0:klev+1,0:klev+1,nnuve,nbmat)) 99 106 call load_ksi(ksive) 100 c ---------- ztop --------------101 allocate(ztop(klon))102 DO i = 1, klon103 ztop(i) = 70.104 ENDDO !i105 c ztop: d'apres fit à figure 16 du papier Zavosa et al (tmp) traitant des106 c donnees Venera107 c DO i = 1, klon108 c latdeg = abs(rlatd(i))109 c if (latdeg.lt.15) then110 c ztop(i) = 70.111 c elseif (latdeg.lt.50) then112 c ztop(i) = 63.95+6*cos((latdeg-15)*RPI/2./50.)113 c else114 c ztop(i) = min(63.95+6*cos((latdeg-15)*RPI/2./50.),115 c . 63.95-5.9*sin((latdeg-60)*RPI/2/30))116 c endif117 c print*,'lat(',i,')=',latdeg,' ztop=',ztop(i)118 c ENDDO !i119 c ---------- ztop --------------120 107 121 108 endif ! firstcall … … 191 178 c -------------------------- 192 179 mat0 = 0 193 do mat=1,nbmat-nbztopve 194 if ( (psurfve(mat).ge.paprs(j,1)) 195 . .and.(psurfve(mat+nbztopve).lt.paprs(j,1)) 196 . .and.(ztopve(mat).lt.ztop(j)) 197 . .and.(ztopve(mat+1).ge.ztop(j)) ) then 198 mat0 = mat 199 c print*,'ig=',j,' mat0=',mat 200 factp = (paprs(j,1) -psurfve(mat)) 201 . /(psurfve(mat+nbztopve)-psurfve(mat)) 202 factz = (ztop(j) -ztopve(mat)) 203 . /(ztopve(mat+1)-ztopve(mat)) 180 if (nlatve.eq.1) then ! clouds are taken as uniform 181 lat=1 182 else 183 if (abs(rlatd(j)).le.50.) then 184 lat=1 185 elseif (abs(rlatd(j)).le.60.) then 186 lat=2 187 elseif (abs(rlatd(j)).le.70.) then 188 lat=3 189 elseif (abs(rlatd(j)).le.80.) then 190 lat=4 191 else 192 lat=5 193 endif 194 endif 195 196 ips0=0 197 do ips=1,nbpsve(lat)-1 198 if ( (psurfve(ips,lat).ge.paprs(j,1)) 199 . .and.(psurfve(ips+1,lat).lt.paprs(j,1)) ) then 200 ips0 = ips 201 c print*,'ig=',j,' ips0=',ips 202 factp = (paprs(j,1) -psurfve(ips0,lat)) 203 . /(psurfve(ips0+1,lat)-psurfve(ips0,lat)) 204 204 exit 205 205 endif 206 206 enddo 207 if (mat0.eq.0) then 207 isza0=0 208 if (nbszave(lat).gt.1) then 209 do isza=1,nbszave(lat)-1 210 if ( (szave(isza,lat).ge.zrmu0) 211 . .and.(szave(isza+1,lat).lt.zrmu0) ) then 212 isza0 = isza 213 c print*,'ig=',j,' isza0=',isza 214 factz = (zrmu0 -szave(isza0,lat)) 215 . /(szave(isza0+1,lat)-szave(isza0,lat)) 216 exit 217 endif 218 enddo 219 else ! Only one sza, no interpolation 220 isza0=-99 221 endif 222 223 if ((ips0.eq.0).or.(isza0.eq.0)) then 208 224 write(*,*) 'Finding the right matrix in radlwsw' 209 print*,' Probleme pour interpolation aupoint ig=',j210 print*,'psurf = ',paprs(j,1),' ztop = ',ztop(j)225 print*,'Interpolation problem, grid point ig=',j 226 print*,'psurf = ',paprs(j,1),' mu0 = ',zrmu0 211 227 stop 212 228 endif 213 229 230 if (isza0.eq.-99) then 231 mat0 = indexve(lat)+ips0 232 else 233 mat0 = indexve(lat)+(isza0-1)*nbpsve(lat)+ips0 234 endif 235 214 236 c interpolation of ksi and computation of psi,deltapsi 215 237 c ---------------------------------------------------- … … 217 239 do k=0,klev+1 218 240 do i=0,klev+1 219 ksi = ksive(i,k,band,mat0)*(1-factz)*(1-factp) 220 . +ksive(i,k,band,mat0+1)*factz *(1-factp) 221 . +ksive(i,k,band,mat0+nbztopve)*(1-factz)*factp 222 . +ksive(i,k,band,mat0+nbztopve+1)*factz *factp 241 if (isza0.eq.-99) then 242 ksi = ksive(i,k,band,mat0)*(1-factp) 243 . +ksive(i,k,band,mat0+1)*factp 244 else 245 ksi = ksive(i,k,band,mat0)*(1-factp)*(1-factz) 246 . +ksive(i,k,band,mat0+1)*factp *(1-factz) 247 . +ksive(i,k,band,mat0+nbpsve(lat))*(1-factp)*factz 248 . +ksive(i,k,band,mat0+nbpsve(lat)+1)*factp *factz 249 endif 250 223 251 psi(i,k) = psi(i,k) + 224 . ksi*(bplck(i,band)-bplck(k,band))225 deltapsi(i,k) = deltapsi(i,k) + ksi*zdblay(i,band)252 . RPI*ksi*(bplck(i,band)-bplck(k,band)) 253 deltapsi(i,k) = deltapsi(i,k) + RPI*ksi*zdblay(i,band) 226 254 enddo 227 255 enddo … … 241 269 c SW call 242 270 c--------- 271 znivs=zzlev(j,:) 272 c CALL SW_venus_ve(zrmu0, zfract, 273 c S PPB,temp,znivs, 274 c S zheat, 275 c S ztopsw,zsolsw,ZFSNET) 276 243 277 CALL SW_venus_dc(zrmu0, zfract, 244 278 S PPB,temp, … … 283 317 c j = 1 284 318 c print*,'mu0=',rmu0(j) 285 c print*,' net flux vis HEAT(K/ day)'319 c print*,' net flux vis HEAT(K/Eday)' 286 320 c do k=1,klev 287 c print*,k,ZFSNET(k),heat(j,k)*8 .56548e-3321 c print*,k,ZFSNET(k),heat(j,k)*86400. 288 322 c enddo 289 c print*,' net flux IR COOL(K/ day)'323 c print*,' net flux IR COOL(K/Eday)' 290 324 c do k=1,klev 291 c print*,k,ZFLNET(k),cool(j,k)*8 .56548e-3325 c print*,k,ZFLNET(k),cool(j,k)*86400. 292 326 c enddo 293 327 -
trunk/LMDZ.VENUS/libf/phyvenus/radlwsw.NewtonCool
r892 r1301 2 2 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/radlwsw.F,v 1.2 2004/10/27 10:14:46 lmdzadmin Exp $ 3 3 ! 4 SUBROUTINE radlwsw(dist, rmu0, fract, 5 . paprs, pplay,tsol, t, 6 . heat,cool,radsol, 7 . topsw,toplw,solsw,sollw, 8 . sollwdown, 9 . lwnet, swnet) 10 c 4 SUBROUTINE radlwsw(dist, rmu0, fract, zzlev, 5 . paprs, pplay,tsol, pt, nq, nmicro, pq,qaer) 6 11 7 c====================================================================== 12 8 c Auteur(s): Z.X. Li (LMD/CNRS) date: 19960719 … … 16 12 c rmu0-----input-R- cosinus de l'angle zenithal 17 13 c fract----input-R- duree d'ensoleillement normalisee 18 c solaire--input-R- constante solaire (W/m**2) (dans clesphys.h)19 14 c paprs----input-R- pression a inter-couche (Pa) 20 15 c pplay----input-R- pression au milieu de couche (Pa) 21 16 c tsol-----input-R- temperature du sol (en K) 22 c t--------input-R- temperature (K) 23 c heat-----output-R- echauffement atmospherique (visible) (K/jour) 24 c cool-----output-R- refroidissement dans l'IR (K/jour) 25 c radsol---output-R- bilan radiatif net au sol (W/m**2) (+ vers le bas) 26 c topsw----output-R- flux solaire net au sommet de l'atm. (+ vers le bas) 27 c toplw----output-R- ray. IR net au sommet de l'atmosphere (+ vers le haut) 28 c solsw----output-R- flux solaire net a la surface (+ vers le bas) 29 c sollw----output-R- ray. IR net a la surface (+ vers le bas) 30 c sollwdown-output-R- ray. IR descendant a la surface (+ vers le bas) 31 c lwnet____output-R- flux IR net (+ vers le haut) 32 c swnet____output-R- flux solaire net (+ vers le bas) 17 c pt-------input-R- temperature (K) 33 18 c 34 19 35 20 c S. Lebonnois 12/04/2007 36 21 c VERSION NEWTONIAN COOLING pour Venus (no diurnal cycle) 22 c update 01/2014 37 23 38 24 c====================================================================== 39 25 use dimphy 40 26 USE comgeomphy 27 USE phys_state_var_mod, only: falbe,heat,cool,radsol, 28 . topsw,toplw,solsw,sollw,sollwdown,lwnet,swnet 29 USE write_field_phy 41 30 IMPLICIT none 42 31 #include "dimensions.h" 43 32 #include "YOMCST.h" 44 33 #include "clesphys.h" 45 c 34 35 c ARGUMENTS 36 INTEGER nq,nmicro 46 37 real rmu0(klon), fract(klon), dist 47 c 48 real paprs(klon,klev+1), pplay(klon,klev)38 39 real zzlev(klon,klev+1),paprs(klon,klev+1), pplay(klon,klev) 49 40 real tsol(klon) 50 real t(klon,klev) 51 real heat(klon,klev), cool(klon,klev) 52 real radsol(klon), topsw(klon), toplw(klon) 53 real solsw(klon), sollw(klon) 54 real sollwdown(klon) 55 REAL swnet(klon,klev+1),lwnet(klon,klev+1) 56 c 41 real pt(klon,klev) 42 real pq(klon,klev,nq) 43 REAL qaer(klon,klev,nq) 44 45 c LOCAL VARIABLES 57 46 INTEGER i,j,k 58 47 integer nlevCLee,level … … 64 53 real ztemp,zdt,fact 65 54 real dTsdt(klev),zt_eq(klon,klev) 66 real dureejour67 parameter (dureejour=10.087e6)68 55 save zt_eq 69 56 … … 144 131 145 132 DO k = 1, klev 146 heat (j,k) = dTsdt(k) *dureejour ! K/Venusday133 heat (j,k) = dTsdt(k) ! K/s 147 134 cool (j,k) = 0. 148 135 ENDDO -
trunk/LMDZ.VENUS/libf/phyvenus/rcm1d.F
r1300 r1301 6 6 USE phys_state_var_mod 7 7 use cpdet_mod, only: ini_cpdet 8 use moyzon_mod, only: tmoy 9 8 10 IMPLICIT NONE 9 11 … … 288 290 print*,ilayer,play(ilayer),zlay(ilayer),temp(ilayer) 289 291 ENDDO 292 293 allocate(tmoy(llm)) 294 tmoy(:)=temp(:) 290 295 291 296 c temperature du sous-sol … … 465 470 #include "../dyn3d_common/disvert_noterre.F" 466 471 #include "../dyn3d/abort_gcm.F" 467 !#include "../dyn3d/dump2d.F" 468 472 -
trunk/LMDZ.VENUS/libf/phyvenus/readstartphy.F
r808 r1301 7 7 . rlat,rlon, tsol,tsoil, 8 8 . albe, solsw, sollw, 9 . fder, radsol,9 . fder,dlw, sollwdown, radsol, 10 10 . zmea, zstd, zsig, zgam, zthe, zpic, zval, 11 11 . tabcntr0) … … 29 29 REAL tsoil(ngridmx,nsoilmx) 30 30 REAL albe(ngridmx) 31 cIM BEG alblw32 REAL alblw(ngridmx)33 cIM END alblw34 31 REAL radsol(ngridmx) 35 32 REAL sollw(ngridmx) 36 33 real solsw(ngridmx) 37 34 real fder(ngridmx) 35 real dlw(ngridmx) 36 real sollwdown(ngridmx) 38 37 REAL zmea(ngridmx), zstd(ngridmx) 39 38 REAL zsig(ngridmx), zgam(ngridmx), zthe(ngridmx) … … 275 274 276 275 c 276 c Lecture derive des flux IR: 277 c 278 ierr = NF_INQ_VARID (nid, "dlw", nvarid) 279 IF (ierr.NE.NF_NOERR) THEN 280 PRINT*, 'phyetat0: Le champ <dlw> est absent' 281 PRINT*, 'mis a zero' 282 dlw = 0. 283 ELSE 284 #ifdef NC_DOUBLE 285 ierr = NF_GET_VAR_DOUBLE(nid, nvarid, dlw) 286 #else 287 ierr = NF_GET_VAR_REAL(nid, nvarid, dlw) 288 #endif 289 IF (ierr.NE.NF_NOERR) THEN 290 PRINT*, 'phyetat0: Lecture echouee pour <dlw>' 291 CALL abort 292 ENDIF 293 ENDIF 294 xmin = 1.0E+20 295 xmax = -1.0E+20 296 DO i = 1, ngridmx 297 xmin = MIN(dlw(i),xmin) 298 xmax = MAX(dlw(i),xmax) 299 ENDDO 300 PRINT*,'Derive des flux IR dlw:', xmin, xmax 301 302 c 303 c Lecture rayonnement IR vers le bas au sol: 304 c 305 ierr = NF_INQ_VARID (nid, "sollwdown", nvarid) 306 IF (ierr.NE.NF_NOERR) THEN 307 PRINT*, 'phyetat0: Le champ <sollwdown> est absent' 308 PRINT*, 'mis a zero' 309 sollwdown = 0. 310 ELSE 311 #ifdef NC_DOUBLE 312 ierr = NF_GET_VAR_DOUBLE(nid, nvarid, sollwdown) 313 #else 314 ierr = NF_GET_VAR_REAL(nid, nvarid, sollwdown) 315 #endif 316 IF (ierr.NE.NF_NOERR) THEN 317 PRINT*, 'phyetat0: Lecture echouee pour <sollwdown>' 318 CALL abort 319 ENDIF 320 ENDIF 321 xmin = 1.0E+20 322 xmax = -1.0E+20 323 DO i = 1, ngridmx 324 xmin = MIN(sollwdown(i),xmin) 325 xmax = MAX(sollwdown(i),xmax) 326 ENDDO 327 PRINT*,'Flux IR vers le bas au sol sollwdown:', xmin, xmax 328 329 c 277 330 c Lecture du rayonnement net au sol: 278 331 c -
trunk/LMDZ.VENUS/libf/phyvenus/start2archive.F
r1055 r1301 18 18 USE infotrac 19 19 USE control_mod 20 use cpdet_mod, only: tpot2t 20 use cpdet_mod, only: tpot2t,ini_cpdet 21 21 22 22 implicit none … … 42 42 c ----------------------------- 43 43 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 44 REAL teta(ip1jmp1,llm) 44 REAL teta(ip1jmp1,llm) ! temperature potentielle 45 45 REAL, ALLOCATABLE, DIMENSION(:,:,:):: q! champs advectes 46 46 REAL pks(ip1jmp1) ! exner (f pour filtre) … … 51 51 REAL masse(ip1jmp1,llm) ! masse de l'atmosphere 52 52 REAL ps(ip1jmp1) ! pression au sol 53 REAL p3d(iip1, jjp1, llm+1)! pression aux interfaces53 REAL p3d(iip1,jjp1,llm+1) ! pression aux interfaces 54 54 55 55 c Variable Physiques (grille physique) … … 62 62 REAL tsurf(ngridmx),tsoil(ngridmx,nsoilmx) 63 63 REAL albe(ngridmx),radsol(ngridmx),sollw(ngridmx) 64 real solsw(ngridmx),dlw(ngridmx) 64 real solsw(ngridmx),fder(ngridmx) 65 real sollwdown(ngridmx),dlw(ngridmx) 65 66 REAL zmea(ngridmx), zstd(ngridmx) 66 67 REAL zsig(ngridmx), zgam(ngridmx), zthe(ngridmx) … … 69 70 INTEGER start,length 70 71 PARAMETER (length = 100) 71 REAL tab_cntrl_fi(length) ! tableau des parametres de startfi72 REAL tab_cntrl_fi(length) ! tableau des parametres de startfi 72 73 REAL tab_cntrl_dyn(length) ! tableau des parametres de start 73 74 INTEGER*4 day_ini_fi … … 79 80 real rlatS(ip1jmp1),rlonS(ip1jmp1) 80 81 real albeS(ip1jmp1),radsolS(ip1jmp1),sollwS(ip1jmp1) 81 real solswS(ip1jmp1),dlwS(ip1jmp1) 82 real solswS(ip1jmp1),fderS(ip1jmp1) 83 real dlwS(ip1jmp1),sollwdownS(ip1jmp1) 82 84 real zmeaS(ip1jmp1),zstdS(ip1jmp1),zsigS(ip1jmp1) 83 85 real zgamS(ip1jmp1),ztheS(ip1jmp1),zpicS(ip1jmp1) … … 132 134 . rlat,rlon,tsurf,tsoil, 133 135 . albe, solsw, sollw, 134 . dlw,radsol,136 . fder,dlw,sollwdown,radsol, 135 137 . zmea,zstd,zsig,zgam,zthe,zpic,zval, 136 138 . tab_cntrl_fi) … … 140 142 c----------------------------------------------------------------------- 141 143 144 CALL conf_gcm( 99, .TRUE. ) 142 145 call iniconst 143 146 call inigeom 144 147 call inifilr 148 call ini_cpdet 149 145 150 CALL pression(ip1jmp1, ap, bp, ps, p3d) 146 151 if (disvert_type==1) then … … 198 203 call gr_fi_dyn(1,ngridmx,iip1,jjp1,sollw,sollwS) 199 204 call gr_fi_dyn(1,ngridmx,iip1,jjp1,solsw,solswS) 205 call gr_fi_dyn(1,ngridmx,iip1,jjp1,fder,fderS) 200 206 call gr_fi_dyn(1,ngridmx,iip1,jjp1,dlw,dlwS) 207 call gr_fi_dyn(1,ngridmx,iip1,jjp1,sollwdown,sollwdownS) 201 208 call gr_fi_dyn(1,ngridmx,iip1,jjp1,zmea,zmeaS) 202 209 call gr_fi_dyn(1,ngridmx,iip1,jjp1,zstd,zstdS) … … 295 302 call write_archive(nid,'solsw', 296 303 . 'SW flux at surface','W m-2',2,solswS) 304 call write_archive(nid,'fder','derive','?',2,fderS) 297 305 call write_archive(nid,'dlw','LW derive','?',2,dlwS) 306 call write_archive(nid,'sollwdown', 307 . 'LW dwn flux at surface','?',2,sollwdownS) 298 308 call write_archive(nid,'zmea','param oro sous-maille','m',2,zmeaS) 299 309 call write_archive(nid,'zstd','param oro sous-maille','m',2,zstdS) -
trunk/LMDZ.VENUS/libf/phyvenus/sw_venus_dc.F
r1017 r1301 40 40 c output 41 41 42 REAL PHEAT(klev) ! SHORTWAVE HEATING (K/VENUSDAY) within each layer42 REAL PHEAT(klev) ! SHORTWAVE HEATING (K/s) within each layer 43 43 REAL PTOPSW ! SHORTWAVE FLUX AT T.O.A. (net) 44 44 REAL PSOLSW ! SHORTWAVE FLUX AT SURFACE (net) … … 49 49 C 50 50 integer nldc,nszadc 51 real dureejour52 51 parameter (nldc=49) ! fichiers Crisp 53 52 parameter (nszadc=8) ! fichiers Crisp 54 parameter (dureejour=10.087e6)55 53 56 54 integer i,j,nsza,nsza0,nl0 … … 234 232 PHEAT(j) = (ZFSNET(j+1)-ZFSNET(j)) 235 233 . *RG/cpdet(pt(j)) / ((PPB(j)-PPB(j+1))*1.e5) 236 PHEAT(j) = PHEAT(j)*dureejour ! K/venus_day237 234 enddo 238 235 -
trunk/LMDZ.VENUS/libf/phyvenus/write_histday.h
r902 r1301 86 86 c en K/s 87 87 call histwrite_phy(nid_day,.false.,"dtajs",itau_w,d_t_ajs) 88 c K/day ==> K/s89 call histwrite_phy(nid_day,.false.,"dtswr",itau_w,heat /RDAY)90 c K/day ==>K/s91 call histwrite_phy(nid_day,.false.,"dtlwr",itau_w,-1.*cool /RDAY)88 c en K/s 89 call histwrite_phy(nid_day,.false.,"dtswr",itau_w,heat) 90 c en K/s 91 call histwrite_phy(nid_day,.false.,"dtlwr",itau_w,-1.*cool) 92 92 c en K/s 93 93 c call histwrite_phy(nid_day,.false.,"dtec",itau_w,d_t_ec) -
trunk/LMDZ.VENUS/libf/phyvenus/write_histins.h
r902 r1301 86 86 c en K/s 87 87 call histwrite_phy(nid_ins,.false.,"dtajs",itau_w,d_t_ajs) 88 c K/day ==> K/s89 call histwrite_phy(nid_ins,.false.,"dtswr",itau_w,heat /RDAY)90 c K/day ==>K/s91 call histwrite_phy(nid_ins,.false.,"dtlwr",itau_w,-1.*cool /RDAY)88 c en K/s 89 call histwrite_phy(nid_ins,.false.,"dtswr",itau_w,heat) 90 c en K/s 91 call histwrite_phy(nid_ins,.false.,"dtlwr",itau_w,-1.*cool) 92 92 c en K/s 93 93 c call histwrite_phy(nid_ins,.false.,"dtec",itau_w,d_t_ec) -
trunk/LMDZ.VENUS/libf/phyvenus/write_histmth.h
r902 r1301 86 86 c en K/s 87 87 call histwrite_phy(nid_mth,.false.,"dtajs",itau_w,d_t_ajs) 88 c K/day ==> K/s89 call histwrite_phy(nid_mth,.false.,"dtswr",itau_w,heat /RDAY)90 c K/day ==>K/s91 call histwrite_phy(nid_mth,.false.,"dtlwr",itau_w,-1.*cool /RDAY)88 c en K/s 89 call histwrite_phy(nid_mth,.false.,"dtswr",itau_w,heat) 90 c en K/s 91 call histwrite_phy(nid_mth,.false.,"dtlwr",itau_w,-1.*cool) 92 92 c en K/s 93 93 c call histwrite_phy(nid_mth,.false.,"dtec",itau_w,d_t_ec) -
trunk/LMDZ.VENUS/libf/phyvenus/writerestartphy.F
r808 r1301 2 2 . rlat,rlon, tsol,tsoil, 3 3 . albedo, 4 . solsw, sollw,fder, 5 . radsol,4 . solsw, sollw,fder,dlw, 5 . sollwdown,radsol, 6 6 . zmea, zstd, zsig, zgam, zthe, zpic, zval, 7 7 . t_ancien) … … 27 27 real sollw(klon) 28 28 real fder(klon) 29 real dlw(klon) 30 real sollwdown(klon) 29 31 REAL radsol(klon) 30 32 REAL zmea(klon), zstd(klon) … … 182 184 #endif 183 185 ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 27, 184 . "Rayonnement I Fa la surface")186 . "Rayonnement IR a la surface") 185 187 ierr = NF_ENDDEF(nid) 186 188 #ifdef NC_DOUBLE … … 207 209 ierr = NF_REDEF (nid) 208 210 #ifdef NC_DOUBLE 211 ierr = NF_DEF_VAR (nid, "dlw", NF_DOUBLE, 1, idim2,nvarid) 212 #else 213 ierr = NF_DEF_VAR (nid, "dlw", NF_FLOAT, 1, idim2,nvarid) 214 #endif 215 ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 14, 216 . "Derivee flux IR") 217 ierr = NF_ENDDEF(nid) 218 #ifdef NC_DOUBLE 219 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,dlw) 220 #else 221 ierr = NF_PUT_VAR_REAL (nid,nvarid,dlw) 222 #endif 223 c 224 ierr = NF_REDEF (nid) 225 #ifdef NC_DOUBLE 226 ierr = NF_DEF_VAR (nid, "sollwdown", NF_DOUBLE, 1, idim2,nvarid) 227 #else 228 ierr = NF_DEF_VAR (nid, "sollwdown", NF_FLOAT, 1, idim2,nvarid) 229 #endif 230 ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 14, 231 . "Flux IR vers le bas a la surface") 232 ierr = NF_ENDDEF(nid) 233 #ifdef NC_DOUBLE 234 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,sollwdown) 235 #else 236 ierr = NF_PUT_VAR_REAL (nid,nvarid,sollwdown) 237 #endif 238 c 239 ierr = NF_REDEF (nid) 240 #ifdef NC_DOUBLE 209 241 ierr = NF_DEF_VAR (nid, "RADS", NF_DOUBLE, 1, idim2,nvarid) 210 242 #else -
trunk/LMDZ.VENUS/libf/phyvenus/zenang.F
r892 r1301 21 21 c lat------INPUT : latitude en degres 22 22 c long-----INPUT : longitude en degres 23 c pmu0-----OUTPUT: angle zenithal moyen entre gmtime et gmtime+pdtrad 24 c frac-----OUTPUT: ensoleillement moyen entre gmtime et gmtime+pdtrad 23 c pmu0-----OUTPUT: angle zenithal moyen entre gmtime et gmtime+pdtrad/RDAY 24 c frac-----OUTPUT: ensoleillement moyen entre gmtime et gmtime+pdtrad/RDAY 25 25 c================================================================ 26 26 use dimphy … … 98 98 IF (omega1.LE.omega2) THEN !--on est dans la meme journee locale 99 99 c 100 IF (omega2.LE.-omega .OR. omega1.GE.omega 101 . .OR. omega.LT.1e-5) THEN !--nuit 102 frac(i)=0.0 103 pmu0(i)=0.0 104 ELSE !--jour+nuit/jour 100 IF (omega2.LE.-omega .OR. omega1.GE.omega !--nuit 101 . .OR. omega.LT.1e-5) THEN !--nuit polaire 102 frac(i)=0.0 103 pmu0(i)=SIN(latr)*SIN(lat_sun) + 104 . COS(latr)*COS(lat_sun)* 105 . (SIN(omega2)-SIN(omega1))/ 106 . (omega2-omega1) 107 ELSE !--jour+nuit/jour 105 108 omegadeb=MAX(-omega,omega1) 106 109 omegafin=MIN(omega,omega2) … … 117 120 IF (omega1.GE.omega) THEN !--nuit 118 121 zfrac1=0.0 119 z1_mu =0.0 122 z1_mu =SIN(latr)*SIN(lat_sun) + 123 . COS(latr)*COS(lat_sun)* 124 . (-SIN(omega1))/ 125 . (RPI-omega1) 120 126 ELSE !--jour+nuit 121 127 omegadeb=MAX(-omega,omega1) … … 130 136 IF (omega2.LE.-omega) THEN !--nuit 131 137 zfrac2=0.0 132 z2_mu =0.0 138 z2_mu =SIN(latr)*SIN(lat_sun) + 139 . COS(latr)*COS(lat_sun)* 140 . (SIN(omega2))/ 141 . (omega2+RPI) 133 142 ELSE !--jour+nuit 134 143 omegadeb=-omega … … 143 152 c-----------------------moyenne 144 153 frac(i)=(zfrac1+zfrac2)/(omega2+2*RPI-omega1) 145 pmu0(i)=(zfrac1*z1_mu+zfrac2*z2_mu)/MAX(zfrac1+zfrac2,1.E-10) 154 if (frac(i).ne.0.) then 155 pmu0(i)=(zfrac1*z1_mu+zfrac2*z2_mu)/MAX(zfrac1+zfrac2,1.E-10) 156 else 157 pmu0(i)=((RPI-omega1)*z1_mu+(omega2+RPI)*z2_mu)/ 158 . (omega2+2*RPI-omega1) 159 endif 146 160 c 147 161 ENDIF !---comparaison omega1 et omega2
Note: See TracChangeset
for help on using the changeset viewer.