Changeset 552
- Timestamp:
- Mar 2, 2012, 9:53:27 AM (13 years ago)
- Location:
- trunk/LMDZ.MARS
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/README
r544 r552 1426 1426 ... Syntax for use is to add "tke_heat_flux = ..." in callphys.def 1427 1427 >> Corrected some stuff with tke transport in thermals (which is anyway deactivated but one day maybe...) 1428 1429 == 02/03/12 == EM 1430 >> bug fix in "aeronomars/moldiff_red.F90" (wrong mmol array size in included 1431 subroutine) + adapted extreme limit test for H to altitudes of ~4000km 1432 (compatble with 50 layer model). 1433 >> bug fix in "nirco2abs.F" index of "co2" and "o" tracers were hard coded as 1434 1 and 3! 1435 >> updates from FGG of euvheat.F, callkeys.h and inifis.F to have the 1436 "euveff" parameter read from callphys.def 1437 1438 -
trunk/LMDZ.MARS/libf/aeronomars/euvheat.F
r38 r552 193 193 194 194 do l=1,nlayermx 195 pdteuv(ig,l)= 0.16*jtot(l)/10.195 pdteuv(ig,l)=euveff*jtot(l)/10. 196 196 & /(cpnew(ig,l)*pplay(ig,l)/(rnew(ig,l)*zt(ig,l))) 197 197 & *(1.52/dist_sol)**2 -
trunk/LMDZ.MARS/libf/aeronomars/inichim_newstart.F
r460 r552 72 72 & 1.,17.,33.,18.,34.,16.,48./ ! minors 73 73 character*3 tmp ! temporary variable 74 integer ierr,lnblnk 75 external lnblnk 74 integer ierr 76 75 77 76 logical :: oldnames ! =.true. if old tracer naming convention (q01,...) … … 476 475 c---------------------------------------------------------------------- 477 476 open(210, iostat=ierr,file= 478 & datafile(1:lnblnk(datafile))//'/atmosfera_LMD_may.dat')477 & trim(datafile)//'/atmosfera_LMD_may.dat') 479 478 if (ierr.ne.0) then 480 479 write(*,*)'Error : cannot open file atmosfera_LMD_may.dat ' 481 480 write(*,*)'(in aeronomars/inichim.F)' 482 write(*,*)'It should be in :', datafile(1:lnblnk(datafile)),'/'483 write(*,*)'1) You can change this directory address in'484 write(*,*)' file phymars/datafile.h'481 write(*,*)'It should be in :', trim(datafile),'/' 482 write(*,*)'1) You can change this path in callphys.def with' 483 write(*,*)' datadir=/path/to/datafiles/' 485 484 write(*,*)'2) If necessary atmosfera_LMD_may.dat (and others)' 486 485 write(*,*)' can be obtained online on:' … … 489 488 endif 490 489 open(220, iostat=ierr,file= 491 & datafile(1:lnblnk(datafile))//'/atmosfera_LMD_min.dat')490 & trim(datafile)//'/atmosfera_LMD_min.dat') 492 491 if (ierr.ne.0) then 493 492 write(*,*)'Error : cannot open file atmosfera_LMD_min.dat ' 494 493 write(*,*)'(in aeronomars/inichim.F)' 495 write(*,*)'It should be in :', datafile(1:lnblnk(datafile)),'/'496 write(*,*)'1) You can change this directory address in'497 write(*,*)' file phymars/datafile.h'494 write(*,*)'It should be in :', trim(datafile),'/' 495 write(*,*)'1) You can change this path in callphys.def with' 496 write(*,*)' datadir=/path/to/datafiles/' 498 497 write(*,*)'2) If necessary atmosfera_LMD_min.dat (and others)' 499 498 write(*,*)' can be obtained online on:' -
trunk/LMDZ.MARS/libf/aeronomars/moldiff_red.F90
r517 r552 314 314 315 315 316 ! If Zmax > 2000 km there is a problem / stop317 318 if (Zmax .gt. 2000000.) then316 ! If Zmax > 4000 km there is a problem / stop 317 318 if (Zmax .gt. 4000000.) then 319 319 Print*,'Zmax too high',ig,zmax,zmin 320 320 do l=1,nlayermx … … 918 918 SUBROUTINE QMNEW(Q1,DQ,Q2,dtime,nl,nq,gc,ig) 919 919 IMPLICIT NONE 920 #include "dimensions.h" 920 921 921 922 INTEGER :: nl,nq 922 923 INTEGER :: l,iq,ig 923 924 INTEGER,dimension(nq) :: gc 924 REAL,DIMENSION(nl,nq ) :: Q1,DQ925 REAL,DIMENSION(nl,nqmx) :: Q1,DQ 925 926 REAL*8,DIMENSION(nl,nq) :: Q2 926 927 REAL :: dtime … … 951 952 SUBROUTINE MMOY(massemoy,mmol,qq,gc,nl,nq) 952 953 IMPLICIT NONE 954 #include "dimensions.h" 953 955 954 956 INTEGER :: nl,nq,l … … 956 958 REAL*8,DIMENSION(nl,nq) :: qq 957 959 REAL*8,DIMENSION(nl) :: massemoy 958 REAL,DIMENSION(nq ) :: MMOL960 REAL,DIMENSION(nqmx) :: MMOL 959 961 960 962 … … 1034 1036 & Nraf,Nrafk,Rraf,Rrafk,il,nl,nq,nlx,ig) 1035 1037 IMPLICIT NONE 1038 #include "dimensions.h" 1036 1039 1037 1040 INTEGER :: nl,nq,il,l,i,iq,nlx,iz,ig … … 1044 1047 REAL*8, DIMENSION(nl,nq) :: Qraf,Rrafk,Nrafk 1045 1048 REAL*8 :: facZ,dZ,H 1046 REAL,DIMENSION(nq ) :: mmol1049 REAL,DIMENSION(nqmx) :: mmol 1047 1050 masseU=1.660538782d-27 1048 1051 kbolt=1.3806504d-23 … … 1354 1357 & pp,M,gc,nl,nq,nlx) 1355 1358 IMPLICIT NONE 1359 #include "dimensions.h" 1356 1360 INTEGER :: nl,nq,nlx,il,nn,iP 1357 1361 INTEGER,DIMENSION(1) :: indP … … 1359 1363 REAL*8,DIMENSION(nl) :: Z,P,T 1360 1364 REAL*8,DIMENSION(nl,nq) :: Q,Nk,Rk 1361 REAL,DIMENSION(nq ) :: M1365 REAL,DIMENSION(nqmx) :: M 1362 1366 REAL*8,DIMENSION(nq) :: nNew 1363 1367 REAL*8,DIMENSION(nlx) :: pp,tt,tnew … … 1447 1451 & ,pp,M,gc,nl,nq,nlx,facM) 1448 1452 IMPLICIT NONE 1453 #include "dimensions.h" 1449 1454 INTEGER :: nl,nq,nlx,il,nn,iP 1450 1455 INTEGER,DIMENSION(1) :: indP … … 1452 1457 REAL*8,DIMENSION(nl) :: Z,P,T 1453 1458 REAL*8,DIMENSION(nl,nq) :: Q,Nk,Rk 1454 REAL,DIMENSION(nq ) :: M1459 REAL,DIMENSION(nqmx) :: M 1455 1460 REAL*8,DIMENSION(nq) :: nNew 1456 1461 REAL*8,DIMENSION(nlx) :: pp,rhonew,tt,tnew -
trunk/LMDZ.MARS/libf/phymars/callkeys.h
r544 r552 18 18 & ,dustbin,nqchem_min,nltemodel,nircorr 19 19 20 COMMON/callkeys_r/topdustref,solarcondate,semi,alphan, 20 COMMON/callkeys_r/topdustref,solarcondate,semi,alphan,euveff, & 21 21 & tke_heat_flux 22 22 … … 37 37 real alphan 38 38 real solarcondate 39 real euveff 39 40 real tke_heat_flux 40 41 -
trunk/LMDZ.MARS/libf/phymars/inifis.F
r551 r552 249 249 $ "1-> new correction", 250 250 $ "(matters only if callnirco2=T)" 251 nircorr= 0251 nircorr=1 !default value 252 252 call getin("nircorr",nircorr) 253 253 write(*,*) " nircorr = ",nircorr … … 594 594 write(*,*) " solarcondate = ",solarcondate 595 595 596 write(*,*) "UV heating efficiency:", 597 & "measured values between 0.19 and 0.23 (Fox et al. 1996)", 598 & "lower values may be used to compensate low 15 um cooling" 599 euveff=0.21 !default value 600 call getin("euveff",euveff) 601 write(*,*) " euveff = ", euveff 596 602 597 603 if (.not.callthermos) then -
trunk/LMDZ.MARS/libf/phymars/nirco2abs.F
r498 r552 50 50 #include "comdiurn.h" 51 51 #include "nirdata.h" 52 #include "tracer.h" 52 53 53 54 c----------------------------------------------------------------------- 54 55 c Input/Output 55 56 c ------------ 56 INTEGER ngrid,nlayer 57 58 REAL pplay(ngrid,nlayer) 59 REAL dist_sol,mu0(ngridmx),fract(ngridmx),declin 60 61 REAL pdtnirco2(ngrid,nlayer) 57 integer,intent(in) :: ngrid ! number of (horizontal) grid points 58 integer,intent(in) :: nlayer ! number of atmospheric layers 59 real,intent(in) :: pplay(ngrid,nlayer) ! Pressure 60 real,intent(in) :: dist_sol ! Sun-Mars distance (in AU) 61 integer,intent(in) :: nq ! number of tracers 62 real,intent(in) :: pq(ngrid,nlayer,nq) ! tracers 63 real,intent(in) :: mu0(ngridmx) ! solar angle 64 real,intent(in) :: fract(ngridmx) ! day fraction of the time interval 65 real,intent(in) :: declin ! latitude of sub-solar point 66 67 real,intent(out) :: pdtnirco2(ngrid,nlayer) ! heating rate (K/s) 62 68 c 63 69 c Local variables : … … 73 79 c local saved variables 74 80 c --------------------- 75 81 logical,save :: firstcall=.true. 82 real,save :: ico2=0 ! index of "co2" tracer 83 real,save :: io=0 ! index of "o" tracer 76 84 c p0noonlte is a pressure below which non LTE effects are significant. 77 85 c REAL p0nonlte … … 90 98 real p2011,cociente1,merge 91 99 real cor0,oco2gcm 92 integer nq93 real pq(ngrid,nlayer,nq)94 100 95 101 c---------------------------------------------------------------------- … … 97 103 c Initialisation 98 104 c -------------- 105 if (firstcall) then 106 if (nircorr.eq.1) then 107 ! we will need co2 and o tracers 108 ico2=igcm_co2 109 if (ico2==0) then 110 write(*,*) "nirco2abs error: I need a CO2 tracer" 111 write(*,*) " when running with nircorr==1" 112 stop 113 endif 114 io=igcm_o 115 if (io==0) then 116 write(*,*) "nirco2abs error: I need an O tracer" 117 write(*,*) " when running with nircorr==1" 118 stop 119 endif 120 endif 121 firstcall=.false. 122 endif 123 124 99 125 c co2heat is the heating by CO2 at 700Pa for a zero zenithal angle. 100 126 co2heat0=n_a*(1.52/dist_sol)**2/daysec … … 121 147 if(nircorr.eq.1) then 122 148 cor0=1./(1.+n_p0/pplay(ig,l))**n_b 123 if(pq(ig,l, 1).gt.1.e-6) then124 oco2gcm=pq(ig,l, 3)/pq(ig,l,1)149 if(pq(ig,l,ico2).gt.1.e-6) then 150 oco2gcm=pq(ig,l,io)/pq(ig,l,ico2) 125 151 else 126 152 oco2gcm=1.e6 … … 179 205 if(nircorr.eq.1) then 180 206 cor0=1./(1.+n_p0/pplay(ig,l))**n_b 181 oco2gcm=pq(ig,l, 3)/pq(ig,l,1)207 oco2gcm=pq(ig,l,io)/pq(ig,l,ico2) 182 208 cociente1=oco2gcm/oldoco2(l) 183 209 merge=alog10(cociente1)*alfa2(l)+alog10(cor0)* -
trunk/LMDZ.MARS/libf/phymars/tabfi.F
r224 r552 81 81 c ----------------------- 82 82 INTEGER setname, cluvdb, getdat 83 84 INTEGER lnblnk85 83 86 84 c----------------------------------------------------------------------- … … 296 294 297 295 298 do while(modif(1:1).ne.'hello')296 do ! neverending loop 299 297 write(*,*) 300 298 write(*,*) … … 306 304 307 305 write(*,*) 308 write(*,*) modif(1:lnblnk(modif)) , ' : '309 310 if ( modif(1:lnblnk(modif)) .eq. 'day_ini') then306 write(*,*) trim(modif) , ' : ' 307 308 if (trim(modif) .eq. 'day_ini') then 311 309 write(*,*) 'current value:',day_ini 312 310 write(*,*) 'enter new value:' … … 316 314 write(*,*) 'day_ini (new value):',day_ini 317 315 318 else if ( modif(1:lnblnk(modif)) .eq. 'z0') then316 else if (trim(modif) .eq. 'z0') then 319 317 write(*,*) 'current value (m):',z0_default 320 318 write(*,*) 'enter new value (m):' … … 324 322 write(*,*) ' z0 (new value):',z0_default 325 323 326 else if ( modif(1:lnblnk(modif)) .eq. 'emin_turb') then324 else if (trim(modif) .eq. 'emin_turb') then 327 325 write(*,*) 'current value:',emin_turb 328 326 write(*,*) 'enter new value:' … … 332 330 write(*,*) ' emin_turb (new value):',emin_turb 333 331 334 else if ( modif(1:lnblnk(modif)) .eq. 'lmixmin') then332 else if (trim(modif) .eq. 'lmixmin') then 335 333 write(*,*) 'current value:',lmixmin 336 334 write(*,*) 'enter new value:' … … 340 338 write(*,*) ' lmixmin (new value):',lmixmin 341 339 342 else if ( modif(1:lnblnk(modif)) .eq. 'emissiv') then340 else if (trim(modif) .eq. 'emissiv') then 343 341 write(*,*) 'current value:',emissiv 344 342 write(*,*) 'enter new value:' … … 348 346 write(*,*) ' emissiv (new value):',emissiv 349 347 350 else if ( modif(1:lnblnk(modif)) .eq. 'emisice') then348 else if (trim(modif) .eq. 'emisice') then 351 349 write(*,*) 'current value emisice(1) North:',emisice(1) 352 350 write(*,*) 'enter new value:' … … 364 362 write(*,*) ' emisice(2) (new value):',emisice(2) 365 363 366 else if ( modif(1:lnblnk(modif)) .eq. 'albedice') then364 else if (trim(modif) .eq. 'albedice') then 367 365 write(*,*) 'current value albedice(1) North:',albedice(1) 368 366 write(*,*) 'enter new value:' … … 380 378 write(*,*) ' albedice(2) (new value):',albedice(2) 381 379 382 else if ( modif(1:lnblnk(modif)) .eq. 'iceradius') then380 else if (trim(modif) .eq. 'iceradius') then 383 381 write(*,*) 'current value iceradius(1) North:',iceradius(1) 384 382 write(*,*) 'enter new value:' … … 396 394 write(*,*) ' iceradius(2) (new value):',iceradius(2) 397 395 398 else if ( modif(1:lnblnk(modif)) .eq. 'dtemisice') then396 else if (trim(modif) .eq. 'dtemisice') then 399 397 write(*,*) 'current value dtemisice(1) North:',dtemisice(1) 400 398 write(*,*) 'enter new value:' … … 412 410 write(*,*) ' dtemisice(2) (new value):',dtemisice(2) 413 411 414 else if ( modif(1:lnblnk(modif)) .eq. 'tauvis') then412 else if (trim(modif) .eq. 'tauvis') then 415 413 write(*,*) 'current value:',tauvis 416 414 write(*,*) 'enter new value:' … … 420 418 write(*,*) ' tauvis (new value):',tauvis 421 419 422 else if ( modif(1:lnblnk(modif)) .eq. 'obliquit') then420 else if (trim(modif) .eq. 'obliquit') then 423 421 write(*,*) 'current value:',obliquit 424 422 write(*,*) 'obliquit should be 25.19 on current Mars' … … 429 427 write(*,*) ' obliquit (new value):',obliquit 430 428 431 else if ( modif(1:lnblnk(modif)) .eq. 'peri_day') then429 else if (trim(modif) .eq. 'peri_day') then 432 430 write(*,*) 'current value:',peri_day 433 431 write(*,*) 'peri_day should be 485 on current Mars' … … 438 436 write(*,*) ' peri_day (new value):',peri_day 439 437 440 else if ( modif(1:lnblnk(modif)) .eq. 'periheli') then438 else if (trim(modif) .eq. 'periheli') then 441 439 write(*,*) 'current value:',periheli 442 440 write(*,*) 'perihelion should be 206.66 on current Mars' … … 447 445 write(*,*) ' periheli (new value):',periheli 448 446 449 else if ( modif(1:lnblnk(modif)) .eq. 'aphelie') then447 else if (trim(modif) .eq. 'aphelie') then 450 448 write(*,*) 'current value:',aphelie 451 449 write(*,*) 'aphelion should be 249.22 on current Mars' … … 456 454 write(*,*) ' aphelie (new value):',aphelie 457 455 458 else if ( modif(1:lnblnk(modif)) .eq. 'volcapa') then456 else if (trim(modif) .eq. 'volcapa') then 459 457 write(*,*) 'current value:',volcapa 460 458 write(*,*) 'enter new value:' … … 465 463 466 464 endif 467 enddo ! of do while(modif(1:1).ne.'hello')465 enddo ! of do ! neverending loop 468 466 469 467 999 continue
Note: See TracChangeset
for help on using the changeset viewer.