How to add qndrop to the output variable?

This post was from a previous version of the WRF&MPAS-A Support Forum. New replies have been disabled and if you have follow up questions related to this post, then please start a new thread from the forum home page.

cxyiyh

Member
Hi, friends,

When I set progn==0 in Morrison microphysics scheme, I want to kown how to add qndrop to the output variable.
And I did some code modifications in Rregistry of WRF model.
Here is the modifications.
2864 package noprogn progn==0 - -
2865 package progndrop progn==1 - scalar:qndrop;dfi_scalar:dfi_qndrop;state:qndropsource

changed to:

2864 package noprogn progn==0 - scalar:qndrop;dfi_scalar:dfi_qndrop
2865 package progndrop progn==1 - scalar:qndrop;dfi_scalar:dfi_qndrop;state:qndropsource

After running the integration for 12 hours, WRF model collapsed and the display is as follows.
Code:
==> rsl.error.0008 <==
newnucbb avgs   2.58E+02  4.22E-01  1.56E-10  8.19E-13  7.36E-11  2.25E+02
newnucbb hinuc  2.33E+02  3.34E-01  9.07E-11  4.54E-13  3.60E-13  8.48E+05
newnucbb dtnuc  9.00E+01
newnucbb ncnt      22572        11         0         0         0         0         0
coagbb ncntaa      22572         0       628      1280      3163         0         0         0         0         0
-------------- FATAL CALLED ---------------
FATAL CALLED FROM FILE:  module_sf_ruclsm.b  LINE:    6481
  Crash in surface energy budget
-------------------------------------------
Abort(1) on node 8 (rank 8 in comm 0): application called MPI_Abort(MPI_COMM_WORLD, 1) - process 8



And I noticed this procedure called module_sf_ruclsm have a subroutine issued this error instruction. Here is the VILKA subroutine.
Code:
 SUBROUTINE VILKA(TN,D1,D2,PP,QS,TS,TT,NSTEP,ii,j,iland,isoil)
!--------------------------------------------------------------
!--- VILKA finds the solution of energy budget at the surface
!--- using table T,QS computed from Clausius-Klapeiron
!--------------------------------------------------------------
   REAL,     DIMENSION(1:5001),  INTENT(IN   )   ::  TT
   REAL,     INTENT(IN  )   ::  TN,D1,D2,PP
   INTEGER,  INTENT(IN  )   ::  NSTEP,ii,j,iland,isoil

   REAL,     INTENT(OUT  )  ::  QS, TS

   REAL    ::  F1,T1,T2,RN
   INTEGER ::  I,I1
       I=(TN-1.7315E2)/.05+1
       T1=173.1+FLOAT(I)*.05
       F1=T1+D1*TT(I)-D2
       I1=I-F1/(.05+D1*(TT(I+1)-TT(I)))
       I=I1
       IF(I.GT.5000.OR.I.LT.1) GOTO 1
  10   I1=I
       T1=173.1+FLOAT(I)*.05
       F1=T1+D1*TT(I)-D2
       RN=F1/(.05+D1*(TT(I+1)-TT(I)))
       I=I-INT(RN)                      
       IF(I.GT.5000.OR.I.LT.1) GOTO 1
       IF(I1.NE.I) GOTO 10
       TS=T1-.05*RN
       QS=(TT(I)+(TT(I)-TT(I+1))*RN)/PP
       GOTO 20
!   1   PRINT *,'Crash in surface energy budget - STOP'
   1   PRINT *,'     AVOST IN VILKA     Table index= ',I
!       PRINT *,TN,D1,D2,PP,NSTEP,I,TT(i),ii,j,iland,isoil
       print *,'I,J=',ii,j,'LU_index = ',iland, 'Psfc[hPa] = ',pp, 'Tsfc = ',tn
       CALL wrf_error_fatal ('  Crash in surface energy budget  ' )
   20  CONTINUE
!-----------------------------------------------------------------------
   END SUBROUTINE VILKA
Is the modification I made inappropriate?
How should I modify it to get the qndrop variable in the case of progn=0?

Best Regards!

yours sicerely,
Cxyiyh.
 
Hi,
If you'd like to output qndrop, you should only need to add it to the packaged info for the Morrison scheme in the Registry.EM_COMMON file. So look for this line:
Code:
package   morr_two_moment mp_physics==10               -             moist:qv,qc,qr,qi,qs,qg;scalar:qni,qns,qnr,qng;state:rqrcuten,rqscuten,rqicuten

and since it's a scalar, just add it to that list.
Code:
package   morr_two_moment mp_physics==10               -             moist:qv,qc,qr,qi,qs,qg;scalar:qni,qns,qnr,qng,qndrop;state:rqrcuten,rqscuten,rqicuten

After that, of course you'll need to do a "./clean -a" and then reconfigure and recompile the code.
 
Back
Top