Ignore:
Timestamp:
Jan 30, 2015, 2:57:13 PM (10 years ago)
Author:
Laurent Fairhead
Message:

Merged trunk changes -r2158:2186 into testing branch.

Location:
LMDZ5/branches/testing
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing

  • LMDZ5/branches/testing/libf/phylmd/1DUTILS.h

    r2160 r2187  
    133133        ENDIF
    134134
     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
    135145!Config  Key  = ok_flux_surf
    136146!Config  Desc = forcage ou non par les flux de surface
     
    39803990!=====================================================================
    39813991
     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!
     4017include "YOMCST.h"
     4018include "YOETHF.h"
     4019!
     4020!  ----------------------------------------
     4021!  Statement functions
     4022include "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!
     4111include "YOMCST.h"
     4112include "YOETHF.h"
     4113!
     4114!  ----------------------------------------
     4115!  Statement functions
     4116include "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.