Changeset 4367 for LMDZ6/trunk/libf/phylmd
- Timestamp:
- Dec 5, 2022, 9:44:54 PM (3 years ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified LMDZ6/trunk/libf/phylmd/phyetat0_mod.F90 ¶
r4359 r4367 4 4 5 5 PRIVATE 6 PUBLIC :: phyetat0, phyetat0_get, phyetat0_srf 7 8 INTERFACE phyetat0_get 9 MODULE PROCEDURE phyetat0_get10, phyetat0_get20, phyetat0_get11, phyetat0_get21 10 END INTERFACE phyetat0_get 11 INTERFACE phyetat0_srf 12 MODULE PROCEDURE phyetat0_srf20, phyetat0_srf30, phyetat0_srf21, phyetat0_srf31 13 END INTERFACE phyetat0_srf 6 PUBLIC :: phyetat0 14 7 15 8 CONTAINS … … 23 16 USE pbl_surface_mod, ONLY : pbl_surface_init 24 17 USE surface_data, ONLY : type_ocean, version_ocean 18 USE phyetat0_get_mod, ONLY : phyetat0_get, phyetat0_srf 25 19 USE phys_state_var_mod, ONLY : ancien_ok, clwcon, detr_therm, phys_tstep, & 26 20 qsol, fevap, z0m, z0h, agesno, & … … 597 591 END SUBROUTINE phyetat0 598 592 599 !==============================================================================600 LOGICAL FUNCTION phyetat0_get10(field, name, descr, default) RESULT(lFound)601 ! Read a field. Check whether reading succeded and use default value if not.602 IMPLICIT NONE603 REAL, INTENT(INOUT) :: field(:) ! klon604 CHARACTER(LEN=*), INTENT(IN) :: name605 CHARACTER(LEN=*), INTENT(IN) :: descr606 REAL, INTENT(IN) :: default607 !------------------------------------------------------------------------------608 REAL :: fld(SIZE(field),1)609 lFound = phyetat0_get21(fld, [name], descr, default); field = fld(:,1)610 END FUNCTION phyetat0_get10611 !==============================================================================612 LOGICAL FUNCTION phyetat0_get20(field, name, descr, default) RESULT(lFound)613 ! Same as phyetat0_get11, field on multiple levels.614 IMPLICIT NONE615 REAL, INTENT(INOUT) :: field(:,:) ! klon, nlev616 CHARACTER(LEN=*), INTENT(IN) :: name617 CHARACTER(LEN=*), INTENT(IN) :: descr618 REAL, INTENT(IN) :: default619 !-----------------------------------------------------------------------------620 lFound = phyetat0_get21(field, [name], descr, default)621 END FUNCTION phyetat0_get20622 !==============================================================================623 LOGICAL FUNCTION phyetat0_get11(field, name, descr, default) RESULT(lFound)624 ! Same as phyetat0_get11, multiple names.625 IMPLICIT NONE626 REAL, INTENT(INOUT) :: field(:) ! klon627 CHARACTER(LEN=*), INTENT(IN) :: name(:)628 CHARACTER(LEN=*), INTENT(IN) :: descr629 REAL, INTENT(IN) :: default630 !-----------------------------------------------------------------------------631 REAL :: fld(SIZE(field),1)632 lFound = phyetat0_get21(fld, name, descr, default); field = fld(:,1)633 END FUNCTION phyetat0_get11634 !==============================================================================635 LOGICAL FUNCTION phyetat0_get21(field, name, descr, default, tname) RESULT(lFound)636 ! Same as phyetat0_get11, field on multiple levels, multiple names.637 USE iostart, ONLY: get_field638 USE print_control_mod, ONLY: lunout639 IMPLICIT NONE640 REAL, INTENT(INOUT) :: field(:,:) ! klon, nlev641 CHARACTER(LEN=*), INTENT(IN) :: name(:)642 CHARACTER(LEN=*), INTENT(IN) :: descr643 REAL, INTENT(IN) :: default644 CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: tname645 !-----------------------------------------------------------------------------646 CHARACTER(LEN=LEN(name)) :: tnam647 INTEGER :: i648 DO i = 1, SIZE(name)649 CALL get_field(TRIM(name(i)), field, lFound)650 IF(lFound) EXIT651 WRITE(lunout,*) "phyetat0: Missing field <",TRIM(name(i)),"> "652 END DO653 IF(.NOT.lFound) THEN654 WRITE(lunout,*) "Slightly distorted start ; continuing."655 field(:,:) = default656 tnam = name(1)657 ELSE658 tnam = name(i)659 END IF660 WRITE(lunout,'(2(a,ES14.7))') 'phyetat0: '//TRIM(tnam)//' ('//TRIM(descr)//') min/max=', &661 MINval(field),' ',MAXval(field)662 IF(PRESENT(tname)) tname = tnam663 END FUNCTION phyetat0_get21664 !==============================================================================665 LOGICAL FUNCTION phyetat0_srf20(field, name, descr, default) RESULT(lFound)666 ! Read a field per sub-surface.667 ! Check whether reading succeded and use default value if not.668 IMPLICIT NONE669 REAL, INTENT(INOUT) :: field(:,:)670 CHARACTER(LEN=*), INTENT(IN) :: name671 CHARACTER(LEN=*), INTENT(IN) :: descr672 REAL, INTENT(IN) :: default673 !-----------------------------------------------------------------------------674 REAL :: fld(SIZE(field,1),1,SIZE(field,2))675 lFound = phyetat0_srf31(fld, [name], descr, default); field = fld(:,1,:)676 END FUNCTION phyetat0_srf20677 678 !==============================================================================679 LOGICAL FUNCTION phyetat0_srf30(field, name, descr, default) RESULT(lFound)680 ! Same as phyetat0_sfr11, multiple names tested one after the other.681 IMPLICIT NONE682 REAL, INTENT(INOUT) :: field(:,:,:)683 CHARACTER(LEN=*), INTENT(IN) :: name684 CHARACTER(LEN=*), INTENT(IN) :: descr685 REAL, INTENT(IN) :: default686 !-----------------------------------------------------------------------------687 lFound = phyetat0_srf31(field, [name], descr, default)688 END FUNCTION phyetat0_srf30689 690 !==============================================================================691 LOGICAL FUNCTION phyetat0_srf21(field, name, descr, default) RESULT(lFound)692 ! Same as phyetat0_sfr11, field on multiple levels.693 IMPLICIT NONE694 REAL, INTENT(INOUT) :: field(:,:)695 CHARACTER(LEN=*), INTENT(IN) :: name(:)696 CHARACTER(LEN=*), INTENT(IN) :: descr697 REAL, INTENT(IN) :: default698 !-----------------------------------------------------------------------------699 REAL :: fld(SIZE(field,1),1,SIZE(field,2))700 lFound = phyetat0_srf31(fld, name, descr, default); field = fld(:,1,:)701 END FUNCTION phyetat0_srf21702 703 !==============================================================================704 LOGICAL FUNCTION phyetat0_srf31(field, name, descr, default) RESULT(lFound)705 ! Same as phyetat0_sfr11, field on multiple levels, multiple names tested one after the other.706 USE iostart, ONLY: get_field707 USE print_control_mod, ONLY: lunout708 USE strings_mod, ONLY: int2str, maxlen709 IMPLICIT NONE710 REAL, INTENT(INOUT) :: field(:,:,:)711 CHARACTER(LEN=*), INTENT(IN) :: name(:)712 CHARACTER(LEN=*), INTENT(IN) :: descr713 REAL, INTENT(IN) :: default714 !-----------------------------------------------------------------------------715 INTEGER :: nsrf, i716 CHARACTER(LEN=maxlen) :: nam(SIZE(name)), tname, des717 IF(SIZE(field,3)>99) CALL abort_physic("phyetat0", "Too much sub-cells", 1)718 DO nsrf = 1, SIZE(field,3)719 DO i = 1, SIZE(name); nam(i) = TRIM(name(i))//TRIM(int2str(nsrf,2)); END DO720 des = TRIM(descr)//" srf:"//int2str(nsrf,2)721 lFound = phyetat0_get21(field(:,:,nsrf), nam, TRIM(des), default, tname)722 END DO723 WRITE(lunout,'(2(a,ES14.7))') 'phyetat0: '//TRIM(tname)//' ('//TRIM(descr)//') min/max=', &724 MINval(field),' ',MAXval(field)725 END FUNCTION phyetat0_srf31726 727 593 END MODULE phyetat0_mod 728 594 -
TabularUnified LMDZ6/trunk/libf/phylmd/physiq_mod.F90 ¶
r4358 r4367 34 34 USE FLOTT_GWD_rando_m, only: FLOTT_GWD_rando 35 35 USE fonte_neige_mod, ONLY : fonte_neige_get_vars 36 USE geometry_mod, ONLY: cell_area, latitude_deg, longitude_deg, longitude,latitude, & 37 boundslon,boundslat, dx, dy, ind_cell_glo 36 USE geometry_mod, ONLY: cell_area, latitude_deg, longitude_deg 38 37 USE ioipsl, only: histbeg, histvert, histdef, histend, histsync, & 39 38 histwrite, ju2ymds, ymds2ju, getin 40 39 USE ioipsl_getin_p_mod, ONLY : getin_p 41 40 USE indice_sol_mod 42 USE infotrac_phy, ONLY: nqtot, nbtr, nqo, tracers, types_trac , nqCO241 USE infotrac_phy, ONLY: nqtot, nbtr, nqo, tracers, types_trac 43 42 USE readTracFiles_mod, ONLY: addPhase 44 43 USE strings_mod, ONLY: strIdx … … 70 69 USE regr_horiz_time_climoz_m, ONLY: regr_horiz_time_climoz 71 70 USE regr_pr_time_av_m, only: regr_pr_time_av 72 USE surface_data, ONLY : type_ocean, ok_veget, landice_opt 73 USE time_phylmdz_mod, only: annee_ref, current_time, day_ini, day_ref, & 74 day_step_phy, itau_phy, pdtphys, raz_date, start_time, update_time, ndays 71 USE surface_data, ONLY : type_ocean, ok_veget 72 USE time_phylmdz_mod, only: current_time, itau_phy, pdtphys, raz_date, update_time 75 73 USE tracinca_mod, ONLY: config_inca 76 74 USE tropopause_m, ONLY: dyn_tropopause 77 75 USE ice_sursat_mod, ONLY: flight_init, airplane 78 76 USE vampir 79 USE VERTICAL_LAYERS_MOD, ONLY: aps,bps, ap, bp80 77 USE write_field_phy 81 78 #ifdef CPP_XIOS … … 102 99 103 100 101 #ifdef INCA 102 USE geometry_mod, ONLY: longitude, latitude, boundslon, boundslat, ind_cell_glo 103 USE time_phylmdz_mod, ONLY: ndays 104 USE infotrac_phy, ONLY: nqCO2 105 #endif 104 106 #ifdef REPROBUS 105 USE CHEM_REP, ONLY : Init_chem_rep_xjour, & 106 d_q_rep,d_ql_rep,d_qi_rep,ptrop,ttrop, & 107 ztrop, gravit,itroprep, Z1,Z2,fac,B 107 USE chem_rep, ONLY: Init_chem_rep_xjour, d_q_rep, d_ql_rep, d_qi_rep, & 108 ptrop, ttrop, ztrop, gravit, itroprep, Z1, Z2, fac, B 109 #endif 110 #if defined INCA || defined REPROBUS 111 USE time_phylmdz_mod, ONLY: annee_ref, day_ini, day_ref, start_time 112 USE vertical_layers_mod, ONLY: aps, bps, ap, bp 108 113 #endif 109 114 … … 111 116 #ifdef CPP_RRTM 112 117 USE YOERAD, ONLY : NRADLP 113 USE YOESW, ONLY : RSUN118 ! USE YOESW, ONLY : RSUN 114 119 #endif 115 120 … … 147 152 d_t_ajsb,d_q_ajsb, & 148 153 d_t_ajs,d_q_ajs,d_u_ajs,d_v_ajs, & 149 d_t_ajs_w,d_q_ajs_w, &150 d_t_ajs_x,d_q_ajs_x, &154 ! d_t_ajs_w,d_q_ajs_w, & 155 ! d_t_ajs_x,d_q_ajs_x, & 151 156 ! 152 157 d_t_eva,d_q_eva,d_ql_eva,d_qi_eva, & … … 161 166 d_ts, & 162 167 ! 163 d_t_oli,d_u_oli,d_v_oli, &168 ! d_t_oli,d_u_oli,d_v_oli, & 164 169 d_t_oro,d_u_oro,d_v_oro, & 165 170 d_t_oro_gw,d_u_oro_gw,d_v_oro_gw, & … … 492 497 REAL dtadd(klon,klev) 493 498 494 !#ifdef CPP_XIOS495 ! TYPE(xios_context), SAVE :: g_ctx496 !#endif497 498 499 #ifndef CPP_XIOS 499 500 REAL, SAVE :: missing_val=nf90_fill_real … … 522 523 ! 523 524 ! 524 INTEGER debug525 525 INTEGER n 526 526 !ym INTEGER npoints … … 579 579 ! Upmost level reached by deep convection and related variable (jyg) 580 580 ! 581 INTEGER izero581 ! INTEGER izero 582 582 INTEGER k_upper_cv 583 583 !------------------------------------------------------------------ … … 749 749 REAL beta_prec_fisrt(klon,klev) ! taux de conv de l'eau cond (fisrt) 750 750 ! RomP <<< 751 REAL :: calday752 751 753 752 !IM cf FH pour Tiedtke 080604 … … 846 845 REAL conv_t(klon,klev) ! convergence de la temperature(K/s) 847 846 ! 848 #ifdef INCA849 REAL zxsnow_dummy(klon)850 #endif851 847 REAL zsav_tsol(klon) 852 848 ! … … 863 859 real zqsat(klon,klev) 864 860 ! 865 INTEGER i, k, iq, j, nsrf, ll, l, itr861 INTEGER i, k, iq, nsrf, l, itr 866 862 ! 867 863 REAL t_coup … … 1179 1175 1180 1176 #ifdef INCA 1177 REAL :: calday, zxsnow_dummy(klon) 1181 1178 ! set de variables utilisees pour l'initialisation des valeurs provenant de INCA 1182 1179 REAL, DIMENSION(klon,klev,naero_grp,nbands) :: init_tauinca … … 1225 1222 #ifdef CPP_XIOS 1226 1223 ! switch to XIOS LMDZ physics context 1227 !!!!$OMP MASTER1228 !!!! WRITE(*,*)'PHYSICS XIOS Context :', g_ctx1229 !!!! CALL wxios_set_context()1230 !!!!$OMP END MASTER1231 1224 IF (.NOT. debut .AND. is_omp_master) THEN 1232 1225 CALL wxios_set_context() … … 1302 1295 CALL strataer_init 1303 1296 #endif 1304 1305 !!CALL flight_init1306 1297 1307 1298 print*, '=================================================' … … 2221 2212 ENDIF 2222 2213 ENDIF 2223 ! switch to XIOS LMDZ physics context just in case2224 !$OMP MASTER2225 !!!!#ifdef CPP_XIOS2226 !!!! WRITE(*,*)'PHYSICS XIOS Context :', g_ctx2227 !!!! CALL xios_set_current_context(g_ctx)2228 !!!!#endif2229 !$OMP END MASTER2230 2231 2214 ! 2232 2215 ! … … 5189 5172 ENDDO 5190 5173 ! 5191 IF (nqtot > nqo) THEN 5192 itr = 0 5193 DO iq = 1, nqtot 5194 IF(.NOT.tracers(iq)%isInPhysics) CYCLE 5195 itr = itr+1 5196 DO k = 1, klev 5197 DO i = 1, klon 5198 d_qx(i,k,iq) = ( tr_seri(i,k,itr) - qx(i,k,iq) ) / phys_tstep 5199 ENDDO 5174 ! DC: All iterations are cycled if nqtot==nqo, so no nqtot>nqo condition required 5175 itr = 0 5176 DO iq = 1, nqtot 5177 IF(.NOT.tracers(iq)%isInPhysics) CYCLE 5178 itr = itr+1 5179 DO k = 1, klev 5180 DO i = 1, klon 5181 d_qx(i,k,iq) = ( tr_seri(i,k,itr) - qx(i,k,iq) ) / phys_tstep 5200 5182 ENDDO 5201 5183 ENDDO 5202 END IF5184 ENDDO 5203 5185 ! 5204 5186 !IM rajout diagnostiques bilan KP pour analyse MJO par Jun-Ichi Yano
Note: See TracChangeset
for help on using the changeset viewer.