Changeset 2872
- Timestamp:
- Jan 16, 2023, 4:47:12 PM (2 years ago)
- Location:
- trunk/WRF.COMMON/INTERFACES_V4
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WRF.COMMON/INTERFACES_V4/dynphy_wrf_generic_lmd/update_inputs_physiq_mod.F
r2868 r2872 26 26 REAL,INTENT(OUT) :: MY 27 27 REAL :: sec,nsec 28 28 print*,'GMT, elaps/3600=',GMT,elaps/3600. 29 29 !IF (JULYR .le. 8999) THEN 30 !if (tlocked .eqv. .false.) THEN30 if (tlocked .eqv. .false.) THEN 31 31 JH_cur_split = (GMT + elaps/3600.) !! universal time (0<JH_cur_split<1): JH_cur_split=0.5 at 12:00 UT 32 32 JH_cur_split = MODULO(JH_cur_split,24.) !! the two arguments of MODULO must be of the same type … … 51 51 ! !ptime = lct_input - lon_input / 15. + elaps/3600. 52 52 ! !pday = INT((3600*(lct_input - lon_input / 15.) + elaps)/86400) 53 ! ELSE 54 ! JH_cur_split = lct_input - lon_input / 15. !+ elaps/1500.0 53 ELSE 54 JH_cur_split = 0. 55 JD_cur = 0. 55 56 ! !pday = INT((sec*(lct_input - lon_input / 15.)+ elaps)/36000) 56 57 ! JD_cur = INT((sec*(lct_input - lon_input / 15.))/3600) … … 63 64 ! MY = 2024 64 65 ! ENDIF 65 !ENDIF66 ENDIF 66 67 67 68 … … 86 87 noms(1)="h2o_vap" 87 88 noms(2)="h2o_ice" 88 else if (TRACER_MODE .eq. 22) then89 nqtot=290 IF (.not.ALLOCATED(noms)) ALLOCATE(noms(nqtot)) !! est fait dans initracer normalement91 noms(1)="co2_vap"92 noms(2)="co2_ice"93 89 else 94 90 nq=1 … … 325 321 SELECT CASE (TRACER_MODE) 326 322 CASE(1) 327 qsurf(subs,2)=M_H2OICE(i,j)!! logique avec noms(2) = 'h2o_ice' defini ci-dessus323 qsurf(subs,2)=M_H2OICE(i,j) !! logique avec noms(2) = 'h2o_ice' defini ci-dessus 328 324 !! ----- retrocompatible ancienne physique 329 325 !! ----- [H2O ice is last tracer in qsurf in LMD physics] 330 CASE(2)331 qsurf(subs,1)=0. !! not coupled with lifting for the moment [non remobilise]332 !CASE(3)333 !qsurf(subs,1)=q_prof(1,1) !!! temporaire, a definir334 !qsurf(subs,2)=q_prof(1,2)335 CASE(11)336 qsurf(subs,2)=M_H2OICE(i,j) !! logique avec noms(2) = 'h2o_ice' defini ci-dessus337 qsurf(subs,3)=0. !! not coupled with lifting for the moment [non remobilise]338 CASE(12)339 qsurf(subs,2)=M_H2OICE(i,j) !! logique avec noms(2) = 'h2o_ice' defini ci-dessus340 qsurf(subs,3)=0. !! not coupled with lifting for the moment [non remobilise]341 326 END SELECT 342 327 -
trunk/WRF.COMMON/INTERFACES_V4/dynphy_wrf_generic_lmd/update_outputs_physiq_mod.F
r2868 r2872 156 156 ims,ime,jms,jme,kms,kme,& 157 157 ips,ipe,jps,jpe,kps,kpe,& 158 SWDOWNZ,TAU_DUST,QSURFDUST,& 159 MTOT,ICETOT,TAU_ICE,& 160 HR_SW,HR_LW,HR_DYN,DT,DT_RAD,& 161 RDUST,VMR_ICE,RICE,& 158 HR_SW,HR_LW,HR_DYN,DT_RAD,& 162 159 CLOUDFRAC,TOTCLOUDFRAC,RH,& 163 160 DQICE,DQVAP,REEVAP,SURFRAIN,ALBEQ,FLUXTOP_DN,FLUXABS_SW,FLUXTOP_LW,FLUXSURF_SW,& … … 169 166 INTEGER, INTENT(IN) :: ips,ipe,jps,jpe,kps,kpe 170 167 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: & 171 SWDOWNZ,TAU_DUST,QSURFDUST,&172 MTOT,ICETOT,TAU_ICE,&173 168 TOTCLOUDFRAC,ALBEQ,FLUXTOP_DN,FLUXABS_SW,FLUXTOP_LW,FLUXSURF_SW,& 174 169 FLUXSURF_LW,FLXGRD,LATENT_HF,REEVAP,SURFRAIN 175 170 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT ) :: & 176 HR_SW,HR_LW, RDUST,VMR_ICE,RICE,CLOUDFRAC,HR_DYN,DT,DT_RAD,RH,DQICE,DQVAP,&171 HR_SW,HR_LW,CLOUDFRAC,HR_DYN,DT_RAD,RH,DQICE,DQVAP,& 177 172 DTLSC,DTRAIN,DT_MOIST,H2OICE_REFF 178 173 INTEGER :: i,j,subs -
trunk/WRF.COMMON/INTERFACES_V4/module_lmd_driver.F
r2869 r2872 42 42 CST_AL, CST_TI, & 43 43 isfflx, diff_opt, km_opt, & 44 HR_SW,HR_LW,HR_DYN,D DT,DT_RAD,DT_VDF,&44 HR_SW,HR_LW,HR_DYN,DT_RAD,& 45 45 CLOUDFRAC,TOTCLOUDFRAC,RH, & 46 46 DQICE,DQVAP,REEVAP,SURFRAIN,ALBEQ,FLUXTOP_DN,FLUXABS_SW,FLUXTOP_LW,FLUXSURF_SW,& 47 FLUXSURF_LW,FLXGRD,DTLSC,DTRAIN,DT_MOIST,H2OICE_REFF,LATENT_HF,SWDOWNZ,& 48 TAU_DUST,RDUST,QSURFDUST,& 49 MTOT,ICETOT,VMR_ICE,TAU_ICE,RICE,& 47 FLUXSURF_LW,FLXGRD,DTLSC,DTRAIN,DT_MOIST,H2OICE_REFF,LATENT_HF,& 50 48 HFMAX,ZMAX,& 51 49 USTM,HFX,& … … 106 104 PSFC,TSK 107 105 REAL, DIMENSION( ims:ime, jms:jme ), INTENT(OUT) :: & 108 SWDOWNZ,&109 TAU_DUST,QSURFDUST,&110 MTOT,ICETOT,TAU_ICE,&111 106 HFMAX,ZMAX,& 112 107 USTM,HFX,TOTCLOUDFRAC,ALBEQ,FLUXTOP_DN,FLUXABS_SW,FLUXTOP_LW,FLUXSURF_SW,& … … 118 113 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(OUT ) :: & 119 114 RTHPLATEN,RUPLATEN,RVPLATEN, & 120 HR_SW,HR_LW,HR_DYN,D DT,DT_RAD,DT_VDF,RDUST,VMR_ICE,RICE,&115 HR_SW,HR_LW,HR_DYN,DT_RAD,& 121 116 CLOUDFRAC,RH,DQICE,DQVAP,DTLSC,DTRAIN,DT_MOIST,H2OICE_REFF 122 117 REAL, DIMENSION( ims:ime, kms:kme+1, jms:jme ), INTENT(INOUT ) :: & … … 440 435 ! specific treatment for tracers ! 441 436 !--------------------------------! 442 IF (TRACER_MODE .EQ. 0) THEN 443 q_prof(:,1)=0.95 444 ELSE IF (TRACER_MODE .GE. 1) THEN 437 IF (TRACER_MODE == 1) THEN 445 438 ! to be clean we should have an automatized process that makes sure that moist is sent to igcm_h2o_vap and etc. 446 439 q_prof(:,1) = SCALAR(i,kps:kpe,j,P_QH2O) / (1.d0 + SCALAR(i,kps:kpe,j,P_QH2O)) !! P_xxx is the index for variable xxx. 447 440 q_prof(:,2) = SCALAR(i,kps:kpe,j,P_QH2O_ICE) / (1.d0 + SCALAR(i,kps:kpe,j,P_QH2O)) 448 441 ! conversion from mass mixing ratio in WRF to specific concentration in Physiq 449 ELSE IF (TRACER_MODE .GE. 42) THEN 442 ELSE IF ((TRACER_MODE == 42).OR.(TRACER_MODE == 43)) THEN 443 ! to be clean we should have an automatized process that makes sure that moist is sent to igcm_h2o_vap and etc. 444 q_prof(:,1) = moist(i,kps:kpe,j,P_QV) / (1.d0 + moist(i,kps:kpe,j,P_QV)) !! P_xxx is the index for variable xxx. 445 q_prof(:,2) = moist(i,kps:kpe,j,P_QC) / (1.d0 + moist(i,kps:kpe,j,P_QV)) 446 ! conversion from mass mixing ratio in WRF to specific concentration in Physiq 447 ELSE IF ((TRACER_MODE == 44).OR.(TRACER_MODE == 45)) THEN 450 448 ! to be clean we should have an automatized process that makes sure that moist is sent to igcm_h2o_vap and etc. 451 449 q_prof(:,1) = moist(i,kps:kpe,j,P_QV) / (1.d0 + moist(i,kps:kpe,j,P_QV)) !! P_xxx is the index for variable xxx. … … 455 453 q_prof(:,1:nq) = SCALAR(i,kps:kpe,j,2:nq+1) !! the names were set above !! one dummy tracer in WRF 456 454 !JL22 cannot normalize to moist here as we do not know if it has been initialized. 457 ENDIF458 459 IF (TRACER_MODE .EQ. 20) THEN460 IF (firstcall .EQV. .true. .and. (.not. restart)) THEN461 q_prof(:,:) = 0.95462 ENDIF463 ENDIF464 465 IF (TRACER_MODE .EQ. 32) THEN466 IF (firstcall .EQV. .true. .and. (.not. restart)) THEN467 q_prof(:,7) = 0.95468 !! traceurs(7) = 'co2'469 ENDIF470 455 ENDIF 471 456 … … 667 652 ims,ime,jms,jme,kms,kme,& 668 653 ips,ipe,jps,jpe,kps,kpe,& 669 SWDOWNZ,TAU_DUST,QSURFDUST,& 670 MTOT,ICETOT,TAU_ICE,& 671 HR_SW,HR_LW,HR_DYN,DDT,DT_RAD,& 672 RDUST,VMR_ICE,RICE,& 654 HR_SW,HR_LW,HR_DYN,DT_RAD,& 673 655 CLOUDFRAC,TOTCLOUDFRAC,RH,& 674 656 DQICE,DQVAP,REEVAP,SURFRAIN,& … … 721 703 CASE(0) 722 704 SCALAR(i,kps:kpe,j,:)=0. 723 CASE(20)724 !! tracer mode 20 : add a passive tracer with radioactive-like decay725 IF ( (i == ips) .AND. (j == jps) ) print *, 'RADIOACTIVE-LIKE TRACER WITH SOURCE AT SURFACE LAYER.'726 tau_decay=60.*10. !! why not make it a namelist argument?727 SCALAR(i,kps:kpe,j,2) = SCALAR(i,kps:kpe,j,2)*exp(-dt/tau_decay)728 SCALAR(i,1,j,2) = SCALAR(i,1,j,2) + 1. !! this tracer is emitted in the surface layer729 705 CASE(1) 730 706 scalar(i,kps:kpe,j,P_QH2O)=scalar(i,kps:kpe,j,P_QH2O) & … … 737 713 moist(i,kps:kpe,j,P_QV)=moist(i,kps:kpe,j,P_QV) & 738 714 +zdqfi_omp(subs,kps:kpe,1)*dt * (1.d0+moist(i,kps:kpe,j,P_QV)) 739 scalar(i,kps:kpe,j,P_QH2O_ICE)=scalar(i,kps:kpe,j,P_QH2O_ICE) &715 moist(i,kps:kpe,j,P_QC)=moist(i,kps:kpe,j,P_QC) & 740 716 +zdqfi_omp(subs,kps:kpe,2)*dt * (1.d0+moist(i,kps:kpe,j,P_QV)) 741 ! if you want to use this mode, RTHPLATEN should be corrected as below. 742 ! we keep it like that for the moment for testing. 717 RTHPLATEN(i,kps:kpe,j) = RTHPLATEN(i,kps:kpe,j) & 718 * (1.d0+moist(i,kps:kpe,j,P_QV))/(1.d0+rvovrd*moist(i,kps:kpe,j,P_QV)) 719 ! correct dT/dt assuming a constant molar heat capacity. 720 ! Specific heat cappacity scales with molar mass. 743 721 CASE(43) 722 moist(i,kps:kpe,j,P_QV)=moist(i,kps:kpe,j,P_QV) & 723 +zdqfi_omp(subs,kps:kpe,1)*dt * (1.d0+moist(i,kps:kpe,j,P_QV)) 724 moist(i,kps:kpe,j,P_QC)=moist(i,kps:kpe,j,P_QC) & 725 +zdqfi_omp(subs,kps:kpe,2)*dt * (1.d0+moist(i,kps:kpe,j,P_QV)) 726 tau_decay=86400.*100. !! why not make it a namelist argument? 727 SCALAR(i,kps:kpe,j,P_MARKER) = SCALAR(i,kps:kpe,j,P_MARKER)*exp(-dt/tau_decay) 728 SCALAR(i,1,j,P_MARKER) = 1. !! this tracer is emitted in the surface layer 729 RTHPLATEN(i,kps:kpe,j) = RTHPLATEN(i,kps:kpe,j) & 730 * (1.d0+moist(i,kps:kpe,j,P_QV))/(1.d0+rvovrd*moist(i,kps:kpe,j,P_QV)) 731 ! correct dT/dt assuming a constant molar heat capacity. 732 ! Specific heat cappacity scales with molar mass. 733 CASE(44) 744 734 moist(i,kps:kpe,j,P_QV)=moist(i,kps:kpe,j,P_QV) & 745 735 +zdqfi_omp(subs,kps:kpe,1)*dt * (1.d0+moist(i,kps:kpe,j,P_QV)) 746 736 scalar(i,kps:kpe,j,P_QH2O_ICE)=scalar(i,kps:kpe,j,P_QH2O_ICE) & 747 737 +zdqfi_omp(subs,kps:kpe,2)*dt * (1.d0+moist(i,kps:kpe,j,P_QV)) 748 RTHPLATEN(i,kps:kpe,j) = RTHPLATEN(i,kps:kpe,j) & 749 * (1.d0+moist(i,kps:kpe,j,P_QV))/(1.d0+rvovrd*moist(i,kps:kpe,j,P_QV)) 750 ! correct dT/dt assuming a constant molar heat capacity. 751 ! Specific heat cappacity scales with molar mass. 738 CASE(45) 739 moist(i,kps:kpe,j,P_QV)=moist(i,kps:kpe,j,P_QV) & 740 +zdqfi_omp(subs,kps:kpe,1)*dt * (1.d0+moist(i,kps:kpe,j,P_QV)) 741 scalar(i,kps:kpe,j,P_QH2O_ICE)=scalar(i,kps:kpe,j,P_QH2O_ICE) & 742 +zdqfi_omp(subs,kps:kpe,2)*dt * (1.d0+moist(i,kps:kpe,j,P_QV)) 752 743 tau_decay=86400.*100. !! why not make it a namelist argument? 753 744 SCALAR(i,kps:kpe,j,P_MARKER) = SCALAR(i,kps:kpe,j,P_MARKER)*exp(-dt/tau_decay) -
trunk/WRF.COMMON/INTERFACES_V4/module_model_constants.F
r2866 r2872 312 312 rfcp =0.25/cp 313 313 p608 =rvovrd-1. 314 z_scale =(r_d*t0/g) *1e-3314 z_scale =(r_d*t0/g) 315 315 write(*,*) "planet : ", planet 316 316 write(*,*) "g = ", g
Note: See TracChangeset
for help on using the changeset viewer.