Changeset 4369 for LMDZ6/branches/Ocean_skin/libf/phylmd
- Timestamp:
- Dec 6, 2022, 1:01:47 PM (19 months ago)
- Location:
- LMDZ6/branches/Ocean_skin
- Files:
-
- 3 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Ocean_skin
- Property svn:mergeinfo changed
/LMDZ6/trunk merged: 4367
- Property svn:mergeinfo changed
-
LMDZ6/branches/Ocean_skin/libf/phylmd/phyetat0_mod.F90
r4368 r4369 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, & … … 611 605 END SUBROUTINE phyetat0 612 606 613 !==============================================================================614 LOGICAL FUNCTION phyetat0_get10(field, name, descr, default) RESULT(lFound)615 ! Read a field. Check whether reading succeded and use default value if not.616 IMPLICIT NONE617 REAL, INTENT(INOUT) :: field(:) ! klon618 CHARACTER(LEN=*), INTENT(IN) :: name619 CHARACTER(LEN=*), INTENT(IN) :: descr620 REAL, INTENT(IN) :: default621 !------------------------------------------------------------------------------622 REAL :: fld(SIZE(field),1)623 lFound = phyetat0_get21(fld, [name], descr, default); field = fld(:,1)624 END FUNCTION phyetat0_get10625 !==============================================================================626 LOGICAL FUNCTION phyetat0_get20(field, name, descr, default) RESULT(lFound)627 ! Same as phyetat0_get11, field on multiple levels.628 IMPLICIT NONE629 REAL, INTENT(INOUT) :: field(:,:) ! klon, nlev630 CHARACTER(LEN=*), INTENT(IN) :: name631 CHARACTER(LEN=*), INTENT(IN) :: descr632 REAL, INTENT(IN) :: default633 !-----------------------------------------------------------------------------634 lFound = phyetat0_get21(field, [name], descr, default)635 END FUNCTION phyetat0_get20636 !==============================================================================637 LOGICAL FUNCTION phyetat0_get11(field, name, descr, default) RESULT(lFound)638 ! Same as phyetat0_get11, multiple names.639 IMPLICIT NONE640 REAL, INTENT(INOUT) :: field(:) ! klon641 CHARACTER(LEN=*), INTENT(IN) :: name(:)642 CHARACTER(LEN=*), INTENT(IN) :: descr643 REAL, INTENT(IN) :: default644 !-----------------------------------------------------------------------------645 REAL :: fld(SIZE(field),1)646 lFound = phyetat0_get21(fld, name, descr, default); field = fld(:,1)647 END FUNCTION phyetat0_get11648 !==============================================================================649 LOGICAL FUNCTION phyetat0_get21(field, name, descr, default, tname) RESULT(lFound)650 ! Same as phyetat0_get11, field on multiple levels, multiple names.651 USE iostart, ONLY: get_field652 USE print_control_mod, ONLY: lunout653 IMPLICIT NONE654 REAL, INTENT(INOUT) :: field(:,:) ! klon, nlev655 CHARACTER(LEN=*), INTENT(IN) :: name(:)656 CHARACTER(LEN=*), INTENT(IN) :: descr657 REAL, INTENT(IN) :: default658 CHARACTER(LEN=*), OPTIONAL, INTENT(OUT) :: tname659 !-----------------------------------------------------------------------------660 CHARACTER(LEN=LEN(name)) :: tnam661 INTEGER :: i662 DO i = 1, SIZE(name)663 CALL get_field(TRIM(name(i)), field, lFound)664 IF(lFound) EXIT665 WRITE(lunout,*) "phyetat0: Missing field <",TRIM(name(i)),"> "666 END DO667 IF(.NOT.lFound) THEN668 WRITE(lunout,*) "Slightly distorted start ; continuing."669 field(:,:) = default670 tnam = name(1)671 ELSE672 tnam = name(i)673 END IF674 WRITE(lunout,'(2(a,ES14.7))') 'phyetat0: '//TRIM(tnam)//' ('//TRIM(descr)//') min/max=', &675 MINval(field),' ',MAXval(field)676 IF(PRESENT(tname)) tname = tnam677 END FUNCTION phyetat0_get21678 !==============================================================================679 LOGICAL FUNCTION phyetat0_srf20(field, name, descr, default) RESULT(lFound)680 ! Read a field per sub-surface.681 ! Check whether reading succeded and use default value if not.682 IMPLICIT NONE683 REAL, INTENT(INOUT) :: field(:,:)684 CHARACTER(LEN=*), INTENT(IN) :: name685 CHARACTER(LEN=*), INTENT(IN) :: descr686 REAL, INTENT(IN) :: default687 !-----------------------------------------------------------------------------688 REAL :: fld(SIZE(field,1),1,SIZE(field,2))689 lFound = phyetat0_srf31(fld, [name], descr, default); field = fld(:,1,:)690 END FUNCTION phyetat0_srf20691 692 !==============================================================================693 LOGICAL FUNCTION phyetat0_srf30(field, name, descr, default) RESULT(lFound)694 ! Same as phyetat0_sfr11, multiple names tested one after the other.695 IMPLICIT NONE696 REAL, INTENT(INOUT) :: field(:,:,:)697 CHARACTER(LEN=*), INTENT(IN) :: name698 CHARACTER(LEN=*), INTENT(IN) :: descr699 REAL, INTENT(IN) :: default700 !-----------------------------------------------------------------------------701 lFound = phyetat0_srf31(field, [name], descr, default)702 END FUNCTION phyetat0_srf30703 704 !==============================================================================705 LOGICAL FUNCTION phyetat0_srf21(field, name, descr, default) RESULT(lFound)706 ! Same as phyetat0_sfr11, field on multiple levels.707 IMPLICIT NONE708 REAL, INTENT(INOUT) :: field(:,:)709 CHARACTER(LEN=*), INTENT(IN) :: name(:)710 CHARACTER(LEN=*), INTENT(IN) :: descr711 REAL, INTENT(IN) :: default712 !-----------------------------------------------------------------------------713 REAL :: fld(SIZE(field,1),1,SIZE(field,2))714 lFound = phyetat0_srf31(fld, name, descr, default); field = fld(:,1,:)715 END FUNCTION phyetat0_srf21716 717 !==============================================================================718 LOGICAL FUNCTION phyetat0_srf31(field, name, descr, default) RESULT(lFound)719 ! Same as phyetat0_sfr11, field on multiple levels, multiple names tested one after the other.720 USE iostart, ONLY: get_field721 USE print_control_mod, ONLY: lunout722 USE strings_mod, ONLY: int2str, maxlen723 IMPLICIT NONE724 REAL, INTENT(INOUT) :: field(:,:,:)725 CHARACTER(LEN=*), INTENT(IN) :: name(:)726 CHARACTER(LEN=*), INTENT(IN) :: descr727 REAL, INTENT(IN) :: default728 !-----------------------------------------------------------------------------729 INTEGER :: nsrf, i730 CHARACTER(LEN=maxlen) :: nam(SIZE(name)), tname, des731 IF(SIZE(field,3)>99) CALL abort_physic("phyetat0", "Too much sub-cells", 1)732 DO nsrf = 1, SIZE(field,3)733 DO i = 1, SIZE(name); nam(i) = TRIM(name(i))//TRIM(int2str(nsrf,2)); END DO734 des = TRIM(descr)//" srf:"//int2str(nsrf,2)735 lFound = phyetat0_get21(field(:,:,nsrf), nam, TRIM(des), default, tname)736 END DO737 WRITE(lunout,'(2(a,ES14.7))') 'phyetat0: '//TRIM(tname)//' ('//TRIM(descr)//') min/max=', &738 MINval(field),' ',MAXval(field)739 END FUNCTION phyetat0_srf31740 741 607 END MODULE phyetat0_mod 742 608 -
LMDZ6/branches/Ocean_skin/libf/phylmd/physiq_mod.F90
r4368 r4369 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.