Changeset 2720 for LMDZ5/branches/testing/libf/phylmd/dyn1d/1DUTILS.h
- Timestamp:
- Nov 30, 2016, 1:28:41 PM (8 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 2665-2668,2670-2674,2677-2681,2683-2684,2686,2690-2719
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/phylmd/dyn1d/1DUTILS.h
r2641 r2720 55 55 56 56 !Config Key = prt_level 57 !Config Desc = niveau d'impressions de d ébogage57 !Config Desc = niveau d'impressions de debogage 58 58 !Config Def = 0 59 !Config Help = Niveau d'impression pour le d ébogage59 !Config Help = Niveau d'impression pour le debogage 60 60 !Config (0 = minimum d'impression) 61 61 ! prt_level = 0 … … 118 118 ! use geostrophic wind ug=10m/s vg=0m/s. Duration of the case 53100s 119 119 ! Radiation to be switched off 120 ! > 100 ==> forcing_case = .true. or forcing_case2 = .true. 121 ! initial profiles from case.nc file 120 122 ! 121 123 forcing_type = 0 … … 134 136 ENDIF 135 137 136 !Param ètres de forçage138 !Parametres de forcage 137 139 !Config Key = tend_t 138 140 !Config Desc = forcage ou non par advection de T … … 303 305 CALL getin('rugos',rugos) 304 306 307 !Config Key = rugosh 308 !Config Desc = coefficient de frottement 309 !Config Def = rugos 310 !Config Help = calcul du Cdrag 311 rugosh = rugos 312 CALL getin('rugosh',rugosh) 313 314 315 316 !Config Key = snowmass 317 !Config Desc = mass de neige de la surface en kg/m2 318 !Config Def = 0.0000 319 !Config Help = snowmass 320 snowmass = 0.0000 321 CALL getin('snowmass',snowmass) 322 305 323 !Config Key = wtsurf et wqsurf 306 324 !Config Desc = ??? … … 342 360 !Config Key = zpicinp 343 361 !Config Desc = denivellation orographie 344 !Config Def = 300.362 !Config Def = 0. 345 363 !Config Help = input brise 346 zpicinp = 300.364 zpicinp = 0. 347 365 CALL getin('zpicinp',zpicinp) 348 366 !Config key = nudge_tsoil … … 378 396 CALL getin('tau_soil_nudge',tau_soil_nudge) 379 397 398 !---------------------------------------------------------- 399 ! Param??tres de for??age pour les forcages communs: 400 ! Pour les forcages communs: ces entiers valent 0 ou 1 401 ! tadv= advection tempe, tadvv= adv tempe verticale, tadvh= adv tempe horizontale 402 ! qadv= advection q, qadvv= adv q verticale, qadvh= adv q horizontale 403 ! trad= 0 (rayonnement actif) ou 1 (prescrit par tend_rad) ou adv (prescir et contenu dans les tadv) 404 ! forcages en omega, w, vent geostrophique ou ustar 405 ! Parametres de nudging en u,v,t,q valent 0 ou 1 ou le temps de nudging 406 !---------------------------------------------------------- 407 408 !Config Key = tadv 409 !Config Desc = forcage ou non par advection totale de T 410 !Config Def = false 411 !Config Help = forcage ou non par advection totale de T 412 tadv =0 413 CALL getin('tadv',tadv) 414 415 !Config Key = tadvv 416 !Config Desc = forcage ou non par advection verticale de T 417 !Config Def = false 418 !Config Help = forcage ou non par advection verticale de T 419 tadvv =0 420 CALL getin('tadvv',tadvv) 421 422 !Config Key = tadvh 423 !Config Desc = forcage ou non par advection horizontale de T 424 !Config Def = false 425 !Config Help = forcage ou non par advection horizontale de T 426 tadvh =0 427 CALL getin('tadvh',tadvh) 428 429 !Config Key = thadv 430 !Config Desc = forcage ou non par advection totale de Theta 431 !Config Def = false 432 !Config Help = forcage ou non par advection totale de Theta 433 thadv =0 434 CALL getin('thadv',thadv) 435 436 !Config Key = thadvv 437 !Config Desc = forcage ou non par advection verticale de Theta 438 !Config Def = false 439 !Config Help = forcage ou non par advection verticale de Theta 440 thadvv =0 441 CALL getin('thadvv',thadvv) 442 443 !Config Key = thadvh 444 !Config Desc = forcage ou non par advection horizontale de Theta 445 !Config Def = false 446 !Config Help = forcage ou non par advection horizontale de Theta 447 thadvh =0 448 CALL getin('thadvh',thadvh) 449 450 !Config Key = qadv 451 !Config Desc = forcage ou non par advection totale de Q 452 !Config Def = false 453 !Config Help = forcage ou non par advection totale de Q 454 qadv =0 455 CALL getin('qadv',qadv) 456 457 !Config Key = qadvv 458 !Config Desc = forcage ou non par advection verticale de Q 459 !Config Def = false 460 !Config Help = forcage ou non par advection verticale de Q 461 qadvv =0 462 CALL getin('qadvv',qadvv) 463 464 !Config Key = qadvh 465 !Config Desc = forcage ou non par advection horizontale de Q 466 !Config Def = false 467 !Config Help = forcage ou non par advection horizontale de Q 468 qadvh =0 469 CALL getin('qadvh',qadvh) 470 471 !Config Key = trad 472 !Config Desc = forcage ou non par tendance radiative 473 !Config Def = false 474 !Config Help = forcage ou non par tendance radiative 475 trad =0 476 CALL getin('trad',trad) 477 478 !Config Key = forc_omega 479 !Config Desc = forcage ou non par omega 480 !Config Def = false 481 !Config Help = forcage ou non par omega 482 forc_omega =0 483 CALL getin('forc_omega',forc_omega) 484 485 !Config Key = forc_w 486 !Config Desc = forcage ou non par w 487 !Config Def = false 488 !Config Help = forcage ou non par w 489 forc_w =0 490 CALL getin('forc_w',forc_w) 491 492 !Config Key = forc_geo 493 !Config Desc = forcage ou non par geo 494 !Config Def = false 495 !Config Help = forcage ou non par geo 496 forc_geo =0 497 CALL getin('forc_geo',forc_geo) 498 499 ! Meme chose que ok_precr_ust 500 !Config Key = forc_ustar 501 !Config Desc = forcage ou non par ustar 502 !Config Def = false 503 !Config Help = forcage ou non par ustar 504 forc_ustar =0 505 CALL getin('forc_ustar',forc_ustar) 506 IF (forc_ustar .EQ. 1) ok_prescr_ust=.true. 507 508 !Config Key = nudging_u 509 !Config Desc = forcage ou non par nudging sur u 510 !Config Def = false 511 !Config Help = forcage ou non par nudging sur u 512 nudging_u =0 513 CALL getin('nudging_u',nudging_u) 514 515 !Config Key = nudging_v 516 !Config Desc = forcage ou non par nudging sur v 517 !Config Def = false 518 !Config Help = forcage ou non par nudging sur v 519 nudging_v =0 520 CALL getin('nudging_v',nudging_v) 521 522 !Config Key = nudging_w 523 !Config Desc = forcage ou non par nudging sur w 524 !Config Def = false 525 !Config Help = forcage ou non par nudging sur w 526 nudging_w =0 527 CALL getin('nudging_w',nudging_w) 528 529 !Config Key = nudging_q 530 !Config Desc = forcage ou non par nudging sur q 531 !Config Def = false 532 !Config Help = forcage ou non par nudging sur q 533 nudging_q =0 534 CALL getin('nudging_q',nudging_q) 535 536 !Config Key = nudging_t 537 !Config Desc = forcage ou non par nudging sur t 538 !Config Def = false 539 !Config Help = forcage ou non par nudging sur t 540 nudging_t =0 541 CALL getin('nudging_t',nudging_t) 380 542 381 543 … … 395 557 write(lunout,*)' zsurf = ', zsurf 396 558 write(lunout,*)' rugos = ', rugos 559 write(lunout,*)' snowmass=', snowmass 397 560 write(lunout,*)' wtsurf = ', wtsurf 398 561 write(lunout,*)' wqsurf = ', wqsurf … … 406 569 write(lunout,*)' Tsoil_nudge = ', Tsoil_nudge 407 570 write(lunout,*)' tau_soil_nudge = ', tau_soil_nudge 571 write(lunout,*)' tadv = ', tadv 572 write(lunout,*)' tadvv = ', tadvv 573 write(lunout,*)' tadvh = ', tadvh 574 write(lunout,*)' thadv = ', thadv 575 write(lunout,*)' thadvv = ', thadvv 576 write(lunout,*)' thadvh = ', thadvh 577 write(lunout,*)' qadv = ', qadv 578 write(lunout,*)' qadvv = ', qadvv 579 write(lunout,*)' qadvh = ', qadvh 580 write(lunout,*)' trad = ', trad 581 write(lunout,*)' forc_omega = ', forc_omega 582 write(lunout,*)' forc_w = ', forc_w 583 write(lunout,*)' forc_geo = ', forc_geo 584 write(lunout,*)' forc_ustar = ', forc_ustar 585 write(lunout,*)' nudging_u = ', nudging_u 586 write(lunout,*)' nudging_v = ', nudging_v 587 write(lunout,*)' nudging_t = ', nudging_t 588 write(lunout,*)' nudging_q = ', nudging_q 408 589 IF (forcing_type .eq.40) THEN 409 590 write(lunout,*) '--- Forcing type GCSS Old --- with:' … … 1106 1287 !---------------------------------------------------------------------- 1107 1288 ! Calcul de l'advection verticale (ascendance et subsidence) de 1108 ! temp érature et d'humidité. Hypothèse : ce qui rentre de l'extérieur1109 ! a les m êmes caractéristiques que l'air de la colonne 1D (WTG) ou1289 ! temperature et d'humidite. Hypothese : ce qui rentre de l'exterieur 1290 ! a les memes caracteristiques que l'air de la colonne 1D (WTG) ou 1110 1291 ! sans WTG rajouter une advection horizontale 1111 1292 !---------------------------------------------------------------------- … … 1180 1361 !---------------------------------------------------------------------- 1181 1362 ! Calcul de l'advection verticale (ascendance et subsidence) de 1182 ! temp érature et d'humidité. Hypothèse : ce qui rentre de l'extérieur1183 ! a les m êmes caractéristiques que l'air de la colonne 1D (WTG) ou1363 ! temperature et d'humidite. Hypothese : ce qui rentre de l'exterieur 1364 ! a les memes caracteristiques que l'air de la colonne 1D (WTG) ou 1184 1365 ! sans WTG rajouter une advection horizontale 1185 1366 !---------------------------------------------------------------------- … … 2934 3115 endif 2935 3116 if (annee_ref.eq.1992 .and. day1.lt.day_ini_toga) then 2936 print*,'TOGA-COARE a d ébutéle 1er Nov 1992 (jour julien=306)'3117 print*,'TOGA-COARE a debute le 1er Nov 1992 (jour julien=306)' 2937 3118 print*,'Changer dayref dans run.def' 2938 3119 stop … … 3141 3322 3142 3323 !====================================================================== 3324 SUBROUTINE interp_gabls4_time(day,day1,annee_ref & 3325 & ,year_ini_gabls4,day_ini_gabls4,nt_gabls4,dt_gabls4,nlev_gabls4 & 3326 & ,ug_gabls4,vg_gabls4,ht_gabls4,hq_gabls4,tg_gabls4 & 3327 & ,ug_prof,vg_prof,ht_prof,hq_prof,tg_prof) 3328 implicit none 3329 3330 !--------------------------------------------------------------------------------------- 3331 ! Time interpolation of a 2D field to the timestep corresponding to day 3332 ! 3333 ! day: current julian day 3334 ! day1: first day of the simulation 3335 ! nt_gabls4: total nb of data in the forcing (e.g. 37 for gabls4) 3336 ! dt_gabls4: total time interval (in sec) between 2 forcing data (e.g. 60min. for gabls4) 3337 !--------------------------------------------------------------------------------------- 3338 3339 #include "compar1d.h" 3340 3341 ! inputs: 3342 integer annee_ref 3343 integer nt_gabls4,nlev_gabls4 3344 integer year_ini_gabls4 3345 real day, day1,day_ini_gabls4,dt_gabls4 3346 real ug_gabls4(nlev_gabls4,nt_gabls4),vg_gabls4(nlev_gabls4,nt_gabls4) 3347 real ht_gabls4(nlev_gabls4,nt_gabls4),hq_gabls4(nlev_gabls4,nt_gabls4) 3348 real tg_gabls4(nt_gabls4), tg_prof 3349 ! outputs: 3350 real ug_prof(nlev_gabls4),vg_prof(nlev_gabls4) 3351 real ht_prof(nlev_gabls4),hq_prof(nlev_gabls4) 3352 ! local: 3353 integer it_gabls41, it_gabls42,k 3354 real timeit,time_gabls41,time_gabls42,frac 3355 3356 3357 3358 ! Check that initial day of the simulation consistent with gabls4 period: 3359 if (forcing_type.eq.8 ) then 3360 print *,'annee_ref=',annee_ref 3361 print *,'day1=',day1 3362 print *,'day_ini_gabls4=',day_ini_gabls4 3363 if (annee_ref.ne.2009) then 3364 print*,'Pour gabls4, annee_ref doit etre 2009' 3365 print*,'Changer annee_ref dans run.def' 3366 stop 3367 endif 3368 if (annee_ref.eq.2009 .and. day1.gt.day_ini_gabls4) then 3369 print*,'gabls4 a debute le 11 dec 2009 (jour julien=345)' 3370 print*,'Changer dayref dans run.def',day1,day_ini_gabls4 3371 stop 3372 endif 3373 if (annee_ref.eq.2009 .and. day1.gt.day_ini_gabls4+2) then 3374 print*,'gabls4 a fini le 12 dec 2009 (jour julien=346)' 3375 print*,'Changer dayref ou nday dans run.def',day1,day_ini_gabls4 3376 stop 3377 endif 3378 endif 3379 3380 timeit=(day-day_ini_gabls4)*86400 3381 print *,'day,day_ini_gabls4=',day,day_ini_gabls4 3382 print *,'nt_gabls4,dt,timeit=',nt_gabls4,dt_gabls4,timeit 3383 3384 ! Determine the closest observation times: 3385 it_gabls41=INT(timeit/dt_gabls4)+1 3386 it_gabls42=it_gabls41 + 1 3387 time_gabls41=(it_gabls41-1)*dt_gabls4 3388 time_gabls42=(it_gabls42-1)*dt_gabls4 3389 3390 if (it_gabls41 .ge. nt_gabls4) then 3391 write(*,*) 'PB-stop: day, it_gabls41, it_gabls42, timeit: ',day,it_gabls41,it_gabls42,timeit/86400. 3392 stop 3393 endif 3394 3395 ! time interpolation: 3396 frac=(time_gabls42-timeit)/(time_gabls42-time_gabls41) 3397 frac=max(frac,0.0) 3398 3399 3400 do k=1,nlev_gabls4 3401 ug_prof(k) = ug_gabls4(k,it_gabls42)-frac*(ug_gabls4(k,it_gabls42)-ug_gabls4(k,it_gabls41)) 3402 vg_prof(k) = vg_gabls4(k,it_gabls42)-frac*(vg_gabls4(k,it_gabls42)-vg_gabls4(k,it_gabls41)) 3403 ht_prof(k) = ht_gabls4(k,it_gabls42)-frac*(ht_gabls4(k,it_gabls42)-ht_gabls4(k,it_gabls41)) 3404 hq_prof(k) = hq_gabls4(k,it_gabls42)-frac*(hq_gabls4(k,it_gabls42)-hq_gabls4(k,it_gabls41)) 3405 enddo 3406 tg_prof=tg_gabls4(it_gabls42)-frac*(tg_gabls4(it_gabls42)-tg_gabls4(it_gabls41)) 3407 return 3408 END 3409 3410 !====================================================================== 3143 3411 SUBROUTINE interp_armcu_time(day,day1,annee_ref & 3144 3412 & ,year_ini_armcu,day_ini_armcu,nt_armcu,dt_armcu & … … 3679 3947 !===================================================================== 3680 3948 subroutine read_dice(fich_dice,nlevel,ntime & 3681 & ,zz,pres,t h,qv,u,v,o3 &3949 & ,zz,pres,t,qv,u,v,o3 & 3682 3950 & ,shf,lhf,lwup,swup,tg,ustar,psurf,ug,vg & 3683 3951 & ,hadvt,hadvq,hadvu,hadvv,w,omega) … … 3689 3957 3690 3958 #include "netcdf.inc" 3959 #include "YOMCST.h" 3691 3960 3692 3961 integer ntime,nlevel … … 3696 3965 real*8 zz(nlevel) 3697 3966 3698 real*8 th(nlevel),pres(nlevel) 3967 real*8 th(nlevel),pres(nlevel),t(nlevel) 3699 3968 real*8 qv(nlevel),u(nlevel),v(nlevel),o3(nlevel) 3700 3969 real*8 shf(ntime),lhf(ntime),lwup(ntime),swup(ntime),tg(ntime) … … 3702 3971 real*8 hadvt(nlevel,ntime),hadvq(nlevel,ntime),hadvu(nlevel,ntime) 3703 3972 real*8 hadvv(nlevel,ntime),w(nlevel,ntime),omega(nlevel,ntime) 3973 real*8 pzero 3704 3974 3705 3975 integer nid, ierr … … 3708 3978 integer var3didin(nbvar3d) 3709 3979 3980 pzero=100000. 3710 3981 ierr = NF_OPEN(fich_dice,NF_NOWRITE,nid) 3711 3982 if (ierr.NE.NF_NOERR) then … … 3882 4153 endif 3883 4154 ! write(*,*)'lecture th ok',th 4155 do k=1,nlevel 4156 t(k)=th(k)*(pres(k)/pzero)**rkappa 4157 enddo 3884 4158 3885 4159 #ifdef NC_DOUBLE … … 4095 4369 end subroutine read_dice 4096 4370 !===================================================================== 4371 subroutine read_gabls4(fich_gabls4,nlevel,ntime,nsol & 4372 & ,zz,depth_sn,ug,vg,pf,th,t,qv,u,v,hadvt,hadvq,tg,tsnow,snow_dens) 4373 4374 !program reading initial profils and forcings of the Gabls4 case study 4375 4376 4377 implicit none 4378 4379 #include "netcdf.inc" 4380 4381 integer ntime,nlevel,nsol 4382 integer l,k 4383 character*80 :: fich_gabls4 4384 real*8 time(ntime) 4385 4386 ! ATTENTION: visiblement quand on lit gabls4_driver.nc on recupere les donnees 4387 ! dans un ordre inverse par rapport a la convention LMDZ 4388 ! ==> il faut tout inverser (MPL 20141024) 4389 ! les variables indexees "_i" sont celles qui sont lues dans gabls4_driver.nc 4390 real*8 zz_i(nlevel),th_i(nlevel),pf_i(nlevel),t_i(nlevel) 4391 real*8 qv_i(nlevel),u_i(nlevel),v_i(nlevel),ug_i(nlevel,ntime),vg_i(nlevel,ntime) 4392 real*8 hadvt_i(nlevel,ntime),hadvq_i(nlevel,ntime) 4393 4394 real*8 zz(nlevel),th(nlevel),pf(nlevel),t(nlevel) 4395 real*8 qv(nlevel),u(nlevel),v(nlevel),ug(nlevel,ntime),vg(nlevel,ntime) 4396 real*8 hadvt(nlevel,ntime),hadvq(nlevel,ntime) 4397 4398 real*8 depth_sn(nsol),tsnow(nsol),snow_dens(nsol) 4399 real*8 tg(ntime) 4400 integer nid, ierr 4401 integer nbvar3d 4402 parameter(nbvar3d=30) 4403 integer var3didin(nbvar3d) 4404 4405 ierr = NF_OPEN(fich_gabls4,NF_NOWRITE,nid) 4406 if (ierr.NE.NF_NOERR) then 4407 write(*,*) 'ERROR: Pb opening forcings nc file ' 4408 write(*,*) NF_STRERROR(ierr) 4409 stop "" 4410 endif 4411 4412 4413 ierr=NF_INQ_VARID(nid,"height",var3didin(1)) 4414 if(ierr/=NF_NOERR) then 4415 write(*,*) NF_STRERROR(ierr) 4416 stop 'height' 4417 endif 4418 4419 ierr=NF_INQ_VARID(nid,"depth_sn",var3didin(2)) 4420 if(ierr/=NF_NOERR) then 4421 write(*,*) NF_STRERROR(ierr) 4422 stop 'depth_sn' 4423 endif 4424 4425 ierr=NF_INQ_VARID(nid,"Ug",var3didin(3)) 4426 if(ierr/=NF_NOERR) then 4427 write(*,*) NF_STRERROR(ierr) 4428 stop 'Ug' 4429 endif 4430 4431 ierr=NF_INQ_VARID(nid,"Vg",var3didin(4)) 4432 if(ierr/=NF_NOERR) then 4433 write(*,*) NF_STRERROR(ierr) 4434 stop 'Vg' 4435 endif 4436 ierr=NF_INQ_VARID(nid,"pf",var3didin(5)) 4437 if(ierr/=NF_NOERR) then 4438 write(*,*) NF_STRERROR(ierr) 4439 stop 'pf' 4440 endif 4441 4442 ierr=NF_INQ_VARID(nid,"theta",var3didin(6)) 4443 if(ierr/=NF_NOERR) then 4444 write(*,*) NF_STRERROR(ierr) 4445 stop 'theta' 4446 endif 4447 4448 ierr=NF_INQ_VARID(nid,"tempe",var3didin(7)) 4449 if(ierr/=NF_NOERR) then 4450 write(*,*) NF_STRERROR(ierr) 4451 stop 'tempe' 4452 endif 4453 4454 ierr=NF_INQ_VARID(nid,"qv",var3didin(8)) 4455 if(ierr/=NF_NOERR) then 4456 write(*,*) NF_STRERROR(ierr) 4457 stop 'qv' 4458 endif 4459 4460 ierr=NF_INQ_VARID(nid,"u",var3didin(9)) 4461 if(ierr/=NF_NOERR) then 4462 write(*,*) NF_STRERROR(ierr) 4463 stop 'u' 4464 endif 4465 4466 ierr=NF_INQ_VARID(nid,"v",var3didin(10)) 4467 if(ierr/=NF_NOERR) then 4468 write(*,*) NF_STRERROR(ierr) 4469 stop 'v' 4470 endif 4471 4472 ierr=NF_INQ_VARID(nid,"hadvT",var3didin(11)) 4473 if(ierr/=NF_NOERR) then 4474 write(*,*) NF_STRERROR(ierr) 4475 stop 'hadvt' 4476 endif 4477 4478 ierr=NF_INQ_VARID(nid,"hadvQ",var3didin(12)) 4479 if(ierr/=NF_NOERR) then 4480 write(*,*) NF_STRERROR(ierr) 4481 stop 'hadvq' 4482 endif 4483 4484 ierr=NF_INQ_VARID(nid,"Tsnow",var3didin(14)) 4485 if(ierr/=NF_NOERR) then 4486 write(*,*) NF_STRERROR(ierr) 4487 stop 'tsnow' 4488 endif 4489 4490 ierr=NF_INQ_VARID(nid,"snow_density",var3didin(15)) 4491 if(ierr/=NF_NOERR) then 4492 write(*,*) NF_STRERROR(ierr) 4493 stop 'snow_density' 4494 endif 4495 4496 ierr=NF_INQ_VARID(nid,"Tg",var3didin(16)) 4497 if(ierr/=NF_NOERR) then 4498 write(*,*) NF_STRERROR(ierr) 4499 stop 'Tg' 4500 endif 4501 4502 4503 !dimensions lecture 4504 ! call catchaxis(nid,ntime,nlevel,time,z,ierr) 4505 4506 #ifdef NC_DOUBLE 4507 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(1),zz_i) 4508 #else 4509 ierr = NF_GET_VAR_REAL(nid,var3didin(1),zz_i) 4510 #endif 4511 if(ierr/=NF_NOERR) then 4512 write(*,*) NF_STRERROR(ierr) 4513 stop "getvarup" 4514 endif 4515 4516 #ifdef NC_DOUBLE 4517 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(2),depth_sn) 4518 #else 4519 ierr = NF_GET_VAR_REAL(nid,var3didin(2),depth_sn) 4520 #endif 4521 if(ierr/=NF_NOERR) then 4522 write(*,*) NF_STRERROR(ierr) 4523 stop "getvarup" 4524 endif 4525 4526 #ifdef NC_DOUBLE 4527 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(3),ug_i) 4528 #else 4529 ierr = NF_GET_VAR_REAL(nid,var3didin(3),ug_i) 4530 #endif 4531 if(ierr/=NF_NOERR) then 4532 write(*,*) NF_STRERROR(ierr) 4533 stop "getvarup" 4534 endif 4535 4536 #ifdef NC_DOUBLE 4537 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(4),vg_i) 4538 #else 4539 ierr = NF_GET_VAR_REAL(nid,var3didin(4),vg_i) 4540 #endif 4541 if(ierr/=NF_NOERR) then 4542 write(*,*) NF_STRERROR(ierr) 4543 stop "getvarup" 4544 endif 4545 4546 #ifdef NC_DOUBLE 4547 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(5),pf_i) 4548 #else 4549 ierr = NF_GET_VAR_REAL(nid,var3didin(5),pf_i) 4550 #endif 4551 if(ierr/=NF_NOERR) then 4552 write(*,*) NF_STRERROR(ierr) 4553 stop "getvarup" 4554 endif 4555 4556 #ifdef NC_DOUBLE 4557 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(6),th_i) 4558 #else 4559 ierr = NF_GET_VAR_REAL(nid,var3didin(6),th_i) 4560 #endif 4561 if(ierr/=NF_NOERR) then 4562 write(*,*) NF_STRERROR(ierr) 4563 stop "getvarup" 4564 endif 4565 4566 #ifdef NC_DOUBLE 4567 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(7),t_i) 4568 #else 4569 ierr = NF_GET_VAR_REAL(nid,var3didin(7),t_i) 4570 #endif 4571 if(ierr/=NF_NOERR) then 4572 write(*,*) NF_STRERROR(ierr) 4573 stop "getvarup" 4574 endif 4575 4576 #ifdef NC_DOUBLE 4577 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(8),qv_i) 4578 #else 4579 ierr = NF_GET_VAR_REAL(nid,var3didin(8),qv_i) 4580 #endif 4581 if(ierr/=NF_NOERR) then 4582 write(*,*) NF_STRERROR(ierr) 4583 stop "getvarup" 4584 endif 4585 4586 #ifdef NC_DOUBLE 4587 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(9),u_i) 4588 #else 4589 ierr = NF_GET_VAR_REAL(nid,var3didin(9),u_i) 4590 #endif 4591 if(ierr/=NF_NOERR) then 4592 write(*,*) NF_STRERROR(ierr) 4593 stop "getvarup" 4594 endif 4595 4596 #ifdef NC_DOUBLE 4597 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(10),v_i) 4598 #else 4599 ierr = NF_GET_VAR_REAL(nid,var3didin(10),v_i) 4600 #endif 4601 if(ierr/=NF_NOERR) then 4602 write(*,*) NF_STRERROR(ierr) 4603 stop "getvarup" 4604 endif 4605 4606 #ifdef NC_DOUBLE 4607 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(11),hadvt_i) 4608 #else 4609 ierr = NF_GET_VAR_REAL(nid,var3didin(11),hadvt_i) 4610 #endif 4611 if(ierr/=NF_NOERR) then 4612 write(*,*) NF_STRERROR(ierr) 4613 stop "getvarup" 4614 endif 4615 4616 #ifdef NC_DOUBLE 4617 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(12),hadvq_i) 4618 #else 4619 ierr = NF_GET_VAR_REAL(nid,var3didin(12),hadvq_i) 4620 #endif 4621 if(ierr/=NF_NOERR) then 4622 write(*,*) NF_STRERROR(ierr) 4623 stop "getvarup" 4624 endif 4625 4626 #ifdef NC_DOUBLE 4627 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(14),tsnow) 4628 #else 4629 ierr = NF_GET_VAR_REAL(nid,var3didin(14),tsnow) 4630 #endif 4631 if(ierr/=NF_NOERR) then 4632 write(*,*) NF_STRERROR(ierr) 4633 stop "getvarup" 4634 endif 4635 4636 #ifdef NC_DOUBLE 4637 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(15),snow_dens) 4638 #else 4639 ierr = NF_GET_VAR_REAL(nid,var3didin(15),snow_dens) 4640 #endif 4641 if(ierr/=NF_NOERR) then 4642 write(*,*) NF_STRERROR(ierr) 4643 stop "getvarup" 4644 endif 4645 4646 #ifdef NC_DOUBLE 4647 ierr = NF_GET_VAR_DOUBLE(nid,var3didin(16),tg) 4648 #else 4649 ierr = NF_GET_VAR_REAL(nid,var3didin(16),tg) 4650 #endif 4651 if(ierr/=NF_NOERR) then 4652 write(*,*) NF_STRERROR(ierr) 4653 stop "getvarup" 4654 endif 4655 4656 ! On remet les variables lues dans le bon ordre des niveaux (MPL 20141024) 4657 do k=1,nlevel 4658 zz(k)=zz_i(nlevel+1-k) 4659 ug(k,:)=ug_i(nlevel+1-k,:) 4660 vg(k,:)=vg_i(nlevel+1-k,:) 4661 pf(k)=pf_i(nlevel+1-k) 4662 print *,'pf=',pf(k) 4663 th(k)=th_i(nlevel+1-k) 4664 t(k)=t_i(nlevel+1-k) 4665 qv(k)=qv_i(nlevel+1-k) 4666 u(k)=u_i(nlevel+1-k) 4667 v(k)=v_i(nlevel+1-k) 4668 hadvt(k,:)=hadvt_i(nlevel+1-k,:) 4669 hadvq(k,:)=hadvq_i(nlevel+1-k,:) 4670 enddo 4671 return 4672 end subroutine read_gabls4 4673 !===================================================================== 4674 4097 4675 ! Reads CIRC input files 4098 4676 … … 4390 4968 ! 4391 4969 ! Cette formule remplace d_q = (1/tau) [rh_targ - rh] qsat(T_new) 4392 ! qui n' était pas correcte.4970 ! qui n'etait pas correcte. 4393 4971 ! 4394 4972 IF (tnew.LT.RTT) THEN … … 4465 5043 END 4466 5044 5045 !===================================================================== 5046 SUBROUTINE interp2_case_vertical(play,nlev_cas,plev_prof_cas & 5047 & ,t_prof_cas,th_prof_cas,thv_prof_cas,thl_prof_cas & 5048 & ,qv_prof_cas,ql_prof_cas,qi_prof_cas,u_prof_cas,v_prof_cas & 5049 & ,ug_prof_cas,vg_prof_cas,vitw_prof_cas,omega_prof_cas & 5050 & ,du_prof_cas,hu_prof_cas,vu_prof_cas,dv_prof_cas,hv_prof_cas,vv_prof_cas & 5051 & ,dt_prof_cas,ht_prof_cas,vt_prof_cas,dtrad_prof_cas,dq_prof_cas,hq_prof_cas,vq_prof_cas & 5052 & ,dth_prof_cas,hth_prof_cas,vth_prof_cas & 5053 ! 5054 & ,t_mod_cas,theta_mod_cas,thv_mod_cas,thl_mod_cas & 5055 & ,qv_mod_cas,ql_mod_cas,qi_mod_cas,u_mod_cas,v_mod_cas & 5056 & ,ug_mod_cas,vg_mod_cas,w_mod_cas,omega_mod_cas & 5057 & ,du_mod_cas,hu_mod_cas,vu_mod_cas,dv_mod_cas,hv_mod_cas,vv_mod_cas & 5058 & ,dt_mod_cas,ht_mod_cas,vt_mod_cas,dtrad_mod_cas,dq_mod_cas,hq_mod_cas,vq_mod_cas & 5059 & ,dth_mod_cas,hth_mod_cas,vth_mod_cas,mxcalc) 5060 5061 implicit none 5062 5063 #include "dimensions.h" 5064 5065 !------------------------------------------------------------------------- 5066 ! Vertical interpolation of generic case forcing data onto mod_casel levels 5067 !------------------------------------------------------------------------- 5068 5069 integer nlevmax 5070 parameter (nlevmax=41) 5071 integer nlev_cas,mxcalc 5072 ! real play(llm), plev_prof(nlevmax) 5073 ! real t_prof(nlevmax),q_prof(nlevmax) 5074 ! real u_prof(nlevmax),v_prof(nlevmax), w_prof(nlevmax) 5075 ! real ht_prof(nlevmax),vt_prof(nlevmax) 5076 ! real hq_prof(nlevmax),vq_prof(nlevmax) 5077 5078 real play(llm), plev_prof_cas(nlev_cas) 5079 real t_prof_cas(nlev_cas),th_prof_cas(nlev_cas),thv_prof_cas(nlev_cas),thl_prof_cas(nlev_cas) 5080 real qv_prof_cas(nlev_cas),ql_prof_cas(nlev_cas),qi_prof_cas(nlev_cas) 5081 real u_prof_cas(nlev_cas),v_prof_cas(nlev_cas) 5082 real ug_prof_cas(nlev_cas),vg_prof_cas(nlev_cas), vitw_prof_cas(nlev_cas),omega_prof_cas(nlev_cas) 5083 real du_prof_cas(nlev_cas),hu_prof_cas(nlev_cas),vu_prof_cas(nlev_cas) 5084 real dv_prof_cas(nlev_cas),hv_prof_cas(nlev_cas),vv_prof_cas(nlev_cas) 5085 real dt_prof_cas(nlev_cas),ht_prof_cas(nlev_cas),vt_prof_cas(nlev_cas),dtrad_prof_cas(nlev_cas) 5086 real dth_prof_cas(nlev_cas),hth_prof_cas(nlev_cas),vth_prof_cas(nlev_cas) 5087 real dq_prof_cas(nlev_cas),hq_prof_cas(nlev_cas),vq_prof_cas(nlev_cas) 5088 5089 real t_mod_cas(llm),theta_mod_cas(llm),thv_mod_cas(llm),thl_mod_cas(llm) 5090 real qv_mod_cas(llm),ql_mod_cas(llm),qi_mod_cas(llm) 5091 real u_mod_cas(llm),v_mod_cas(llm) 5092 real ug_mod_cas(llm),vg_mod_cas(llm), w_mod_cas(llm),omega_mod_cas(llm) 5093 real du_mod_cas(llm),hu_mod_cas(llm),vu_mod_cas(llm) 5094 real dv_mod_cas(llm),hv_mod_cas(llm),vv_mod_cas(llm) 5095 real dt_mod_cas(llm),ht_mod_cas(llm),vt_mod_cas(llm),dtrad_mod_cas(llm) 5096 real dth_mod_cas(llm),hth_mod_cas(llm),vth_mod_cas(llm) 5097 real dq_mod_cas(llm),hq_mod_cas(llm),vq_mod_cas(llm) 5098 5099 integer l,k,k1,k2 5100 real frac,frac1,frac2,fact 5101 5102 do l = 1, llm 5103 print *,'debut interp2, play=',l,play(l) 5104 enddo 5105 ! do l = 1, nlev_cas 5106 ! print *,'debut interp2, plev_prof_cas=',l,play(l),plev_prof_cas(l) 5107 ! enddo 5108 5109 do l = 1, llm 5110 5111 if (play(l).ge.plev_prof_cas(nlev_cas)) then 5112 5113 mxcalc=l 5114 print *,'debut interp2, mxcalc=',mxcalc 5115 k1=0 5116 k2=0 5117 5118 if (play(l).le.plev_prof_cas(1)) then 5119 5120 do k = 1, nlev_cas-1 5121 if (play(l).le.plev_prof_cas(k).and. play(l).gt.plev_prof_cas(k+1)) then 5122 k1=k 5123 k2=k+1 5124 endif 5125 enddo 5126 5127 if (k1.eq.0 .or. k2.eq.0) then 5128 write(*,*) 'PB! k1, k2 = ',k1,k2 5129 write(*,*) 'l,play(l) = ',l,play(l)/100 5130 do k = 1, nlev_cas-1 5131 write(*,*) 'k,plev_prof_cas(k) = ',k,plev_prof_cas(k)/100 5132 enddo 5133 endif 5134 5135 frac = (plev_prof_cas(k2)-play(l))/(plev_prof_cas(k2)-plev_prof_cas(k1)) 5136 t_mod_cas(l)= t_prof_cas(k2) - frac*(t_prof_cas(k2)-t_prof_cas(k1)) 5137 theta_mod_cas(l)= th_prof_cas(k2) - frac*(th_prof_cas(k2)-th_prof_cas(k1)) 5138 thv_mod_cas(l)= thv_prof_cas(k2) - frac*(thv_prof_cas(k2)-thv_prof_cas(k1)) 5139 thl_mod_cas(l)= thl_prof_cas(k2) - frac*(thl_prof_cas(k2)-thl_prof_cas(k1)) 5140 qv_mod_cas(l)= qv_prof_cas(k2) - frac*(qv_prof_cas(k2)-qv_prof_cas(k1)) 5141 ql_mod_cas(l)= ql_prof_cas(k2) - frac*(ql_prof_cas(k2)-ql_prof_cas(k1)) 5142 qi_mod_cas(l)= qi_prof_cas(k2) - frac*(qi_prof_cas(k2)-qi_prof_cas(k1)) 5143 u_mod_cas(l)= u_prof_cas(k2) - frac*(u_prof_cas(k2)-u_prof_cas(k1)) 5144 v_mod_cas(l)= v_prof_cas(k2) - frac*(v_prof_cas(k2)-v_prof_cas(k1)) 5145 ug_mod_cas(l)= ug_prof_cas(k2) - frac*(ug_prof_cas(k2)-ug_prof_cas(k1)) 5146 vg_mod_cas(l)= vg_prof_cas(k2) - frac*(vg_prof_cas(k2)-vg_prof_cas(k1)) 5147 w_mod_cas(l)= vitw_prof_cas(k2) - frac*(vitw_prof_cas(k2)-vitw_prof_cas(k1)) 5148 omega_mod_cas(l)= omega_prof_cas(k2) - frac*(omega_prof_cas(k2)-omega_prof_cas(k1)) 5149 du_mod_cas(l)= du_prof_cas(k2) - frac*(du_prof_cas(k2)-du_prof_cas(k1)) 5150 hu_mod_cas(l)= hu_prof_cas(k2) - frac*(hu_prof_cas(k2)-hu_prof_cas(k1)) 5151 vu_mod_cas(l)= vu_prof_cas(k2) - frac*(vu_prof_cas(k2)-vu_prof_cas(k1)) 5152 dv_mod_cas(l)= dv_prof_cas(k2) - frac*(dv_prof_cas(k2)-dv_prof_cas(k1)) 5153 hv_mod_cas(l)= hv_prof_cas(k2) - frac*(hv_prof_cas(k2)-hv_prof_cas(k1)) 5154 vv_mod_cas(l)= vv_prof_cas(k2) - frac*(vv_prof_cas(k2)-vv_prof_cas(k1)) 5155 dt_mod_cas(l)= dt_prof_cas(k2) - frac*(dt_prof_cas(k2)-dt_prof_cas(k1)) 5156 ht_mod_cas(l)= ht_prof_cas(k2) - frac*(ht_prof_cas(k2)-ht_prof_cas(k1)) 5157 vt_mod_cas(l)= vt_prof_cas(k2) - frac*(vt_prof_cas(k2)-vt_prof_cas(k1)) 5158 dth_mod_cas(l)= dth_prof_cas(k2) - frac*(dth_prof_cas(k2)-dth_prof_cas(k1)) 5159 hth_mod_cas(l)= hth_prof_cas(k2) - frac*(hth_prof_cas(k2)-hth_prof_cas(k1)) 5160 vth_mod_cas(l)= vth_prof_cas(k2) - frac*(vth_prof_cas(k2)-vth_prof_cas(k1)) 5161 dq_mod_cas(l)= dq_prof_cas(k2) - frac*(dq_prof_cas(k2)-dq_prof_cas(k1)) 5162 hq_mod_cas(l)= hq_prof_cas(k2) - frac*(hq_prof_cas(k2)-hq_prof_cas(k1)) 5163 vq_mod_cas(l)= vq_prof_cas(k2) - frac*(vq_prof_cas(k2)-vq_prof_cas(k1)) 5164 5165 else !play>plev_prof_cas(1) 5166 5167 k1=1 5168 k2=2 5169 print *,'interp2_vert, k1,k2=',plev_prof_cas(k1),plev_prof_cas(k2) 5170 frac1 = (play(l)-plev_prof_cas(k2))/(plev_prof_cas(k1)-plev_prof_cas(k2)) 5171 frac2 = (play(l)-plev_prof_cas(k1))/(plev_prof_cas(k1)-plev_prof_cas(k2)) 5172 t_mod_cas(l)= frac1*t_prof_cas(k1) - frac2*t_prof_cas(k2) 5173 theta_mod_cas(l)= frac1*th_prof_cas(k1) - frac2*th_prof_cas(k2) 5174 thv_mod_cas(l)= frac1*thv_prof_cas(k1) - frac2*thv_prof_cas(k2) 5175 thl_mod_cas(l)= frac1*thl_prof_cas(k1) - frac2*thl_prof_cas(k2) 5176 qv_mod_cas(l)= frac1*qv_prof_cas(k1) - frac2*qv_prof_cas(k2) 5177 ql_mod_cas(l)= frac1*ql_prof_cas(k1) - frac2*ql_prof_cas(k2) 5178 qi_mod_cas(l)= frac1*qi_prof_cas(k1) - frac2*qi_prof_cas(k2) 5179 u_mod_cas(l)= frac1*u_prof_cas(k1) - frac2*u_prof_cas(k2) 5180 v_mod_cas(l)= frac1*v_prof_cas(k1) - frac2*v_prof_cas(k2) 5181 ug_mod_cas(l)= frac1*ug_prof_cas(k1) - frac2*ug_prof_cas(k2) 5182 vg_mod_cas(l)= frac1*vg_prof_cas(k1) - frac2*vg_prof_cas(k2) 5183 w_mod_cas(l)= frac1*vitw_prof_cas(k1) - frac2*vitw_prof_cas(k2) 5184 omega_mod_cas(l)= frac1*omega_prof_cas(k1) - frac2*omega_prof_cas(k2) 5185 du_mod_cas(l)= frac1*du_prof_cas(k1) - frac2*du_prof_cas(k2) 5186 hu_mod_cas(l)= frac1*hu_prof_cas(k1) - frac2*hu_prof_cas(k2) 5187 vu_mod_cas(l)= frac1*vu_prof_cas(k1) - frac2*vu_prof_cas(k2) 5188 dv_mod_cas(l)= frac1*dv_prof_cas(k1) - frac2*dv_prof_cas(k2) 5189 hv_mod_cas(l)= frac1*hv_prof_cas(k1) - frac2*hv_prof_cas(k2) 5190 vv_mod_cas(l)= frac1*vv_prof_cas(k1) - frac2*vv_prof_cas(k2) 5191 dt_mod_cas(l)= frac1*dt_prof_cas(k1) - frac2*dt_prof_cas(k2) 5192 ht_mod_cas(l)= frac1*ht_prof_cas(k1) - frac2*ht_prof_cas(k2) 5193 vt_mod_cas(l)= frac1*vt_prof_cas(k1) - frac2*vt_prof_cas(k2) 5194 dth_mod_cas(l)= frac1*dth_prof_cas(k1) - frac2*dth_prof_cas(k2) 5195 hth_mod_cas(l)= frac1*hth_prof_cas(k1) - frac2*hth_prof_cas(k2) 5196 vth_mod_cas(l)= frac1*vth_prof_cas(k1) - frac2*vth_prof_cas(k2) 5197 dq_mod_cas(l)= frac1*dq_prof_cas(k1) - frac2*dq_prof_cas(k2) 5198 hq_mod_cas(l)= frac1*hq_prof_cas(k1) - frac2*hq_prof_cas(k2) 5199 vq_mod_cas(l)= frac1*vq_prof_cas(k1) - frac2*vq_prof_cas(k2) 5200 5201 endif ! play.le.plev_prof_cas(1) 5202 5203 else ! above max altitude of forcing file 5204 5205 !jyg 5206 fact=20.*(plev_prof_cas(nlev_cas)-play(l))/plev_prof_cas(nlev_cas) !jyg 5207 fact = max(fact,0.) !jyg 5208 fact = exp(-fact) !jyg 5209 t_mod_cas(l)= t_prof_cas(nlev_cas) !jyg 5210 theta_mod_cas(l)= th_prof_cas(nlev_cas) !jyg 5211 thv_mod_cas(l)= thv_prof_cas(nlev_cas) !jyg 5212 thl_mod_cas(l)= thl_prof_cas(nlev_cas) !jyg 5213 qv_mod_cas(l)= qv_prof_cas(nlev_cas)*fact !jyg 5214 ql_mod_cas(l)= ql_prof_cas(nlev_cas)*fact !jyg 5215 qi_mod_cas(l)= qi_prof_cas(nlev_cas)*fact !jyg 5216 u_mod_cas(l)= u_prof_cas(nlev_cas)*fact !jyg 5217 v_mod_cas(l)= v_prof_cas(nlev_cas)*fact !jyg 5218 ug_mod_cas(l)= ug_prof_cas(nlev_cas)*fact !jyg 5219 vg_mod_cas(l)= vg_prof_cas(nlev_cas)*fact !jyg 5220 w_mod_cas(l)= 0.0 !jyg 5221 du_mod_cas(l)= du_prof_cas(nlev_cas)*fact 5222 hu_mod_cas(l)= hu_prof_cas(nlev_cas)*fact !jyg 5223 vu_mod_cas(l)= vu_prof_cas(nlev_cas)*fact !jyg 5224 dv_mod_cas(l)= dv_prof_cas(nlev_cas)*fact 5225 hv_mod_cas(l)= hv_prof_cas(nlev_cas)*fact !jyg 5226 vv_mod_cas(l)= vv_prof_cas(nlev_cas)*fact !jyg 5227 dt_mod_cas(l)= dt_prof_cas(nlev_cas) 5228 ht_mod_cas(l)= ht_prof_cas(nlev_cas) !jyg 5229 vt_mod_cas(l)= vt_prof_cas(nlev_cas) !jyg 5230 dth_mod_cas(l)= dth_prof_cas(nlev_cas) 5231 hth_mod_cas(l)= hth_prof_cas(nlev_cas) !jyg 5232 vth_mod_cas(l)= vth_prof_cas(nlev_cas) !jyg 5233 dq_mod_cas(l)= dq_prof_cas(nlev_cas)*fact 5234 hq_mod_cas(l)= hq_prof_cas(nlev_cas)*fact !jyg 5235 vq_mod_cas(l)= vq_prof_cas(nlev_cas)*fact !jyg 5236 5237 endif ! play 5238 5239 enddo ! l 5240 5241 ! do l = 1,llm 5242 ! print *,'t_mod_cas(l),q_mod_cas(l),ht_mod_cas(l),hq_mod_cas(l) ', 5243 ! $ l,t_mod_cas(l),q_mod_cas(l),ht_mod_cas(l),hq_mod_cas(l) 5244 ! enddo 5245 5246 return 5247 end 5248 !***************************************************************************** 5249 5250
Note: See TracChangeset
for help on using the changeset viewer.