Changeset 2187 for LMDZ5/branches/testing/libf/phylmd/1DUTILS.h
- Timestamp:
- Jan 30, 2015, 2:57:13 PM (10 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 2159,2162,2166-2167,2169-2171,2177-2186
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/phylmd/1DUTILS.h
r2160 r2187 133 133 ENDIF 134 134 135 !Config Key = iflag_nudge 136 !Config Desc = atmospheric nudging ttype (decimal code) 137 !Config Def = 0 138 !Config Help = 0 ==> no nudging 139 ! If digit number n of iflag_nudge is set, then nudging of type n is on 140 ! If digit number n of iflag_nudge is not set, then nudging of type n is off 141 ! (digits are numbered from the right) 142 iflag_nudge = 0 143 CALL getin('iflag_nudge',iflag_nudge) 144 135 145 !Config Key = ok_flux_surf 136 146 !Config Desc = forcage ou non par les flux de surface … … 3980 3990 !===================================================================== 3981 3991 3992 ! Subroutines for nudging 3993 3994 Subroutine Nudge_RHT_init (paprs,pplay,t,q,t_targ,rh_targ) 3995 ! ======================================================== 3996 USE dimphy 3997 3998 implicit none 3999 4000 ! ======================================================== 4001 REAL paprs(klon,klevp1) 4002 REAL pplay(klon,klev) 4003 ! 4004 ! Variables d'etat 4005 REAL t(klon,klev) 4006 REAL q(klon,klev) 4007 ! 4008 ! Profiles cible 4009 REAL t_targ(klon,klev) 4010 REAL rh_targ(klon,klev) 4011 ! 4012 INTEGER k,i 4013 REAL zx_qs 4014 4015 ! Declaration des constantes et des fonctions thermodynamiques 4016 ! 4017 include "YOMCST.h" 4018 include "YOETHF.h" 4019 ! 4020 ! ---------------------------------------- 4021 ! Statement functions 4022 include "FCTTRE.h" 4023 ! ---------------------------------------- 4024 ! 4025 DO k = 1,klev 4026 DO i = 1,klon 4027 t_targ(i,k) = t(i,k) 4028 IF (t(i,k).LT.RTT) THEN 4029 zx_qs = qsats(t(i,k))/(pplay(i,k)) 4030 ELSE 4031 zx_qs = qsatl(t(i,k))/(pplay(i,k)) 4032 ENDIF 4033 rh_targ(i,k) = q(i,k)/zx_qs 4034 ENDDO 4035 ENDDO 4036 print *, 't_targ',t_targ 4037 print *, 'rh_targ',rh_targ 4038 ! 4039 ! 4040 RETURN 4041 END 4042 4043 Subroutine Nudge_UV_init (paprs,pplay,u,v,u_targ,v_targ) 4044 ! ======================================================== 4045 USE dimphy 4046 4047 implicit none 4048 4049 ! ======================================================== 4050 REAL paprs(klon,klevp1) 4051 REAL pplay(klon,klev) 4052 ! 4053 ! Variables d'etat 4054 REAL u(klon,klev) 4055 REAL v(klon,klev) 4056 ! 4057 ! Profiles cible 4058 REAL u_targ(klon,klev) 4059 REAL v_targ(klon,klev) 4060 ! 4061 INTEGER k,i 4062 ! 4063 DO k = 1,klev 4064 DO i = 1,klon 4065 u_targ(i,k) = u(i,k) 4066 v_targ(i,k) = v(i,k) 4067 ENDDO 4068 ENDDO 4069 print *, 'u_targ',u_targ 4070 print *, 'v_targ',v_targ 4071 ! 4072 ! 4073 RETURN 4074 END 4075 4076 Subroutine Nudge_RHT (dtime,paprs,pplay,t_targ,rh_targ,t,q, & 4077 & d_t,d_q) 4078 ! ======================================================== 4079 USE dimphy 4080 4081 implicit none 4082 4083 ! ======================================================== 4084 REAL dtime 4085 REAL paprs(klon,klevp1) 4086 REAL pplay(klon,klev) 4087 ! 4088 ! Variables d'etat 4089 REAL t(klon,klev) 4090 REAL q(klon,klev) 4091 ! 4092 ! Tendances 4093 REAL d_t(klon,klev) 4094 REAL d_q(klon,klev) 4095 ! 4096 ! Profiles cible 4097 REAL t_targ(klon,klev) 4098 REAL rh_targ(klon,klev) 4099 ! 4100 ! Temps de relaxation 4101 REAL tau 4102 !c DATA tau /3600./ 4103 !! DATA tau /5400./ 4104 DATA tau /1800./ 4105 ! 4106 INTEGER k,i 4107 REAL zx_qs, rh, tnew, d_rh 4108 4109 ! Declaration des constantes et des fonctions thermodynamiques 4110 ! 4111 include "YOMCST.h" 4112 include "YOETHF.h" 4113 ! 4114 ! ---------------------------------------- 4115 ! Statement functions 4116 include "FCTTRE.h" 4117 ! ---------------------------------------- 4118 ! 4119 print *,'dtime, tau ',dtime,tau 4120 print *, 't_targ',t_targ 4121 print *, 'rh_targ',rh_targ 4122 print *,'temp ',t 4123 print *,'hum ',q 4124 DO k = 1,klev 4125 DO i = 1,klon 4126 !! IF (paprs(i,1)-pplay(i,k) .GT. 10000.) THEN 4127 IF (t(i,k).LT.RTT) THEN 4128 zx_qs = qsats(t(i,k))/(pplay(i,k)) 4129 ELSE 4130 zx_qs = qsatl(t(i,k))/(pplay(i,k)) 4131 ENDIF 4132 rh = q(i,k)/zx_qs 4133 ! 4134 d_t(i,k) = d_t(i,k) + 1./tau*(t_targ(i,k)-t(i,k)) 4135 d_rh = 1./tau*(rh_targ(i,k)-rh) 4136 ! 4137 tnew = t(i,k)+d_t(i,k) 4138 IF (tnew.LT.RTT) THEN 4139 zx_qs = qsats(tnew)/(pplay(i,k)) 4140 ELSE 4141 zx_qs = qsatl(tnew)/(pplay(i,k)) 4142 ENDIF 4143 d_q(i,k) = d_q(i,k) + d_rh*zx_qs 4144 ! 4145 print *,' k,d_t,rh,d_rh,d_q ', & 4146 k,d_t(i,k),rh,d_rh,d_q(i,k) 4147 !! ENDIF 4148 ! 4149 ENDDO 4150 ENDDO 4151 ! 4152 RETURN 4153 END 4154 4155 Subroutine Nudge_UV (dtime,paprs,pplay,u_targ,v_targ,u,v, & 4156 & d_u,d_v) 4157 ! ======================================================== 4158 USE dimphy 4159 4160 implicit none 4161 4162 ! ======================================================== 4163 REAL dtime 4164 REAL paprs(klon,klevp1) 4165 REAL pplay(klon,klev) 4166 ! 4167 ! Variables d'etat 4168 REAL u(klon,klev) 4169 REAL v(klon,klev) 4170 ! 4171 ! Tendances 4172 REAL d_u(klon,klev) 4173 REAL d_v(klon,klev) 4174 ! 4175 ! Profiles cible 4176 REAL u_targ(klon,klev) 4177 REAL v_targ(klon,klev) 4178 ! 4179 ! Temps de relaxation 4180 REAL tau 4181 !c DATA tau /3600./ 4182 DATA tau /5400./ 4183 ! 4184 INTEGER k,i 4185 4186 ! 4187 print *,'dtime, tau ',dtime,tau 4188 print *, 'u_targ',u_targ 4189 print *, 'v_targ',v_targ 4190 print *,'zonal velocity ',u 4191 print *,'meridional velocity ',v 4192 DO k = 1,klev 4193 DO i = 1,klon 4194 IF (paprs(i,1)-pplay(i,k) .GT. 10000.) THEN 4195 ! 4196 d_u(i,k) = d_u(i,k) + 1./tau*(u_targ(i,k)-u(i,k)) 4197 d_v(i,k) = d_v(i,k) + 1./tau*(v_targ(i,k)-v(i,k)) 4198 ! 4199 print *,' k,u,d_u,v,d_v ', & 4200 k,u(i,k),d_u(i,k),v(i,k),d_v(i,k) 4201 ENDIF 4202 ! 4203 ENDDO 4204 ENDDO 4205 ! 4206 RETURN 4207 END 4208
Note: See TracChangeset
for help on using the changeset viewer.