MODULE update_inputs_physiq_mod CONTAINS !SUBROUTINE update_inputs_physiq_time !SUBROUTINE update_inputs_physiq_tracers !SUBROUTINE update_inputs_physiq_constants !SUBROUTINE update_inputs_physiq_geom !SUBROUTINE update_inputs_physiq_surf !SUBROUTINE update_inputs_physiq_soil !SUBROUTINE update_inputs_physiq_turb !SUBROUTINE update_inputs_physiq_rad !SUBROUTINE update_inputs_physiq_slope !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE update_inputs_physiq_time(& JULYR,JULDAY,GMT,& elaps,& lct_input,lon_input,ls_input,& MY) USE variables_mod, only: JD_cur,JH_cur_split,phour_ini use callkeys_mod, only : tlocked INTEGER, INTENT(IN) :: JULDAY, JULYR REAL, INTENT(IN) :: GMT,elaps,lon_input,ls_input,lct_input REAL,INTENT(OUT) :: MY REAL :: sec,nsec IF (JULYR .ne. 9999) THEN if (tlocked .eqv. .false.) THEN JH_cur_split = (GMT + elaps/3600.) !! universal time (0 correct interpolation / smoothing of z0 in WPS' ! PRINT *, ' -- or check the constant value set in namelist.input' ! STOP !ENDIF !-----------------------------------------------! ! Ground temperature, emissivity, CO2 ice cover ! !-----------------------------------------------! tsurf(subs) = M_TSURF(i,j) emis(subs) = M_EMISS(i,j) !do i=1,noceanmx tslab(subs,:)=tsurf(subs) !enddo !-------------------! ! Tracer at surface ! !-------------------! qsurf(subs,:)=0. ! default case SELECT CASE (MARS_MODE) CASE(1) qsurf(subs,2)=M_H2OICE(i,j) !! logique avec noms(2) = 'h2o_ice' defini ci-dessus !! ----- retrocompatible ancienne physique !! ----- [H2O ice is last tracer in qsurf in LMD physics] CASE(2) qsurf(subs,1)=0. !! not coupled with lifting for the moment [non remobilise] !CASE(3) !qsurf(subs,1)=q_prof(1,1) !!! temporaire, a definir !qsurf(subs,2)=q_prof(1,2) CASE(11) qsurf(subs,2)=M_H2OICE(i,j) !! logique avec noms(2) = 'h2o_ice' defini ci-dessus qsurf(subs,3)=0. !! not coupled with lifting for the moment [non remobilise] CASE(12) qsurf(subs,2)=M_H2OICE(i,j) !! logique avec noms(2) = 'h2o_ice' defini ci-dessus qsurf(subs,3)=0. !! not coupled with lifting for the moment [non remobilise] END SELECT ENDDO ENDDO !!---------------------!! !! OUTPUT FOR CHECKING !! !!---------------------!! nlast = (ipe-ips+1)*(jpe-jps+1) print*,"check: phisfi",phisfi(1),phisfi(nlast) print*,"check: albedodat",albedodat(1),albedodat(nlast) print*,"check: zmea",zmea(1),zmea(nlast) print*,"check: zstd",zstd(1),zstd(nlast) print*,"check: zsig",zsig(1),zsig(nlast) print*,"check: zgam",zgam(1),zgam(nlast) print*,"check: zthe",zthe(1),zthe(nlast) print*,"check: z0",z0 print*,"check: tsurf",tsurf(1),tsurf(nlast) print*,"check: emis",emis(1),emis(nlast) print*,"check: qsurf",qsurf(1,:),qsurf(nlast,:) END SUBROUTINE update_inputs_physiq_surf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE update_inputs_physiq_soil( & ims,ime,jms,jme,& ips,ipe,jps,jpe,& JULYR,nsoil,& M_TI,CST_TI,& M_ISOIL,M_DSOIL,& M_TSOIL,M_TSURF) use comsoil_h, only: inertiedat,mlayer,layer,volcapa use phys_state_var_mod, only: tsoil INTEGER, INTENT(IN) :: ims,ime,jms,jme INTEGER, INTENT(IN) :: ips,ipe,jps,jpe,JULYR,nsoil INTEGER :: i,j,subs,nlast REAL, INTENT(IN ) :: CST_TI REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: & M_TI, M_TSURF REAL, DIMENSION( ims:ime, nsoil, jms:jme ), INTENT(IN) :: & M_TSOIL, M_ISOIL, M_DSOIL REAL :: inertiedat_val REAL :: lay1,alpha DO j = jps,jpe DO i = ips,ipe !-----------------------------------! ! 1D subscript for physics "cursor" ! !-----------------------------------! subs = (j-jps)*(ipe-ips+1)+(i-ips+1) !-----------------! ! Thermal Inertia ! !-----------------! IF (JULYR .ne. 9999) THEN IF (CST_TI == 0) THEN inertiedat_val=M_TI(i,j) ELSE inertiedat_val=CST_TI IF ( (i == ips) .AND. (j == jps) ) PRINT *,'** Mars ** SET CONSTANT THERMAL INERTIA ', inertiedat_val ENDIF ELSE IF ( (i == ips) .AND. (j == jps) ) PRINT *,'** Mars ** IDEALIZED SIMULATION inertia: ',CST_TI inertiedat_val=CST_TI ENDIF !inertiedat(subs) = inertiedat_val !--pb de dimensions???!!??? IF (JULYR .ne. 9999) THEN inertiedat(subs,:)=M_ISOIL(i,:,j) !! verifier que cest bien hires TI en surface mlayer(0:nsoil-1)=M_DSOIL(i,:,j) ELSE IF ( nsoil .lt. 18 ) THEN PRINT *,'** Mars ** WRONG NUMBER OF SOIL LAYERS. SHOULD BE 18 AND IT IS ',nsoil STOP ENDIF IF ( (i == ips) .AND. (j == jps) ) PRINT *,'** Mars ** IDEALIZED SIMULATION isoil and dsoil standard' do k=1,nsoil inertiedat(subs,k) = inertiedat_val !mlayer(k-1) = sqrt(887.75/3.14)*((2.**(k-0.5))-1.) * inertiedat_val / wvolcapa ! old setting mlayer(k-1) = 2.E-4 * (2.**(k-0.5-1.)) ! new gcm settings enddo ENDIF IF ( (i == ips) .AND. (j == jps) ) & PRINT *,'** Mars ** TI and depth profiles are',inertiedat(subs,:)!,mlayer(0:nsoil-1) !!!!!!!!!!!!!!!!! DONE in soil_setting.F ! 1.5 Build layer(); following the same law as mlayer() ! Assuming layer distribution follows mid-layer law: ! layer(k)=lay1*alpha**(k-1) lay1=sqrt(mlayer(0)*mlayer(1)) alpha=mlayer(1)/mlayer(0) do k=1,nsoil layer(k)=lay1*(alpha**(k-1)) enddo !------------------------! ! Deep soil temperatures ! !------------------------! IF (M_TSOIL(i,1,j) .gt. 0. .and. JULYR .ne. 9999) THEN tsoil(subs,:)=M_TSOIL(i,:,j) ELSE IF ( (i == ips) .AND. (j == jps) ) PRINT *,'** Mars ** no tsoil. set it to tsurf.' do k=1,nsoil !print*,'M_TSURF(i,j)',M_TSURF(1,:) !print*,'size M_TSURF',size(M_TSURF) !print*,'size tsoil',size(tsoil) tsoil(subs,k) = M_TSURF(i,j) !print*,'tsoil(subs,k)',tsoil(subs,k) enddo ENDIF ENDDO ENDDO volcapa=1.e6 print*,'zolbxs' !!---------------------!! !! OUTPUT FOR CHECKING !! !!---------------------!! nlast = (ipe-ips+1)*(jpe-jps+1) print*,"check: inertiedat",inertiedat(1,:),inertiedat(nlast,:) print*,"check: mlayer",mlayer(:) print*,"check: layer",layer(:) print*,"check: tsoil",tsoil(1,:),tsoil(nlast,:) END SUBROUTINE update_inputs_physiq_soil !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE update_inputs_physiq_turb( & ims,ime,jms,jme,kms,kme,& ips,ipe,jps,jpe,& RESTART,isles,& M_Q2,M_WSTAR) use turb_mod, only: q2,wstar,turb_resolved !use phys_state_var_mod, only : q2, INTEGER, INTENT(IN) :: ims,ime,jms,jme,kms,kme INTEGER, INTENT(IN) :: ips,ipe,jps,jpe INTEGER :: i,j,subs,nlast REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: M_WSTAR REAL, DIMENSION( ims:ime, kms:kme+1, jms:jme ), INTENT(IN) :: M_Q2 LOGICAL, INTENT(IN ) :: RESTART,isles !! to know if this is turbulence-resolving run or not turb_resolved = isles print*,'isles',isles DO j = jps,jpe DO i = ips,ipe !-----------------------------------! ! 1D subscript for physics "cursor" ! !-----------------------------------! subs = (j-jps)*(ipe-ips+1)+(i-ips+1) !PBL wind variance IF (.not. restart) THEN q2(subs,:) = 1.E-6 wstar(subs)=0. ELSE q2(subs,:)=M_Q2(i,:,j)! !q2(subs,:) = 1.e-3 wstar(subs)=M_WSTAR(i,j) ENDIF ENDDO ENDDO !!---------------------!! !! OUTPUT FOR CHECKING !! !!---------------------!! nlast = (ipe-ips+1)*(jpe-jps+1) print*,"check: q2",q2(1,1)!,q2(nlast,:) print*,"check: wstar",wstar(1),wstar(nlast) END SUBROUTINE update_inputs_physiq_turb !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE update_inputs_physiq_rad( & ims,ime,jms,jme,& ips,ipe,jps,jpe,& RESTART,& M_FLUXRAD) !use dimradmars_mod, only: fluxrad use phys_state_var_mod, only : fluxrad INTEGER, INTENT(IN) :: ims,ime,jms,jme INTEGER, INTENT(IN) :: ips,ipe,jps,jpe INTEGER :: i,j,subs,nlast REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: M_FLUXRAD LOGICAL, INTENT(IN ) :: RESTART DO j = jps,jpe DO i = ips,ipe !-----------------------------------! ! 1D subscript for physics "cursor" ! !-----------------------------------! subs = (j-jps)*(ipe-ips+1)+(i-ips+1) ! fluxrad_save IF (.not. restart) THEN fluxrad(subs)=0. ELSE fluxrad(subs)=M_FLUXRAD(i,j) ENDIF !! et fluxrad_sky ???!??? ENDDO ENDDO !!---------------------!! !! OUTPUT FOR CHECKING !! !!---------------------!! nlast = (ipe-ips+1)*(jpe-jps+1) print*,"check: fluxrad",fluxrad(1),fluxrad(nlast) END SUBROUTINE update_inputs_physiq_rad !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE update_inputs_physiq_slope( & ims,ime,jms,jme,& ips,ipe,jps,jpe,& JULYR,& SLPX,SLPY) !USE module_model_constants, only: DEGRAD !USE slope_mod, ONLY: theta_sl, psi_sl INTEGER, INTENT(IN) :: ims,ime,jms,jme INTEGER, INTENT(IN) :: ips,ipe,jps,jpe,JULYR REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: SLPX,SLPY INTEGER :: i,j,subs,nlast END SUBROUTINE update_inputs_physiq_slope END MODULE update_inputs_physiq_mod