Changeset 52 in lmdz_wrf


Ignore:
Timestamp:
Jul 23, 2014, 5:21:24 PM (10 years ago)
Author:
lfita
Message:

Adding 'check_vars3D' for LMDZ 3D variables (klon,klev) !

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/LMDZ_WRFmeas/WRFV3/lmdz/diagphy_mod.F90

    r51 r52  
    306306    PRINT *,TRIM(errmsg)
    307307    PRINT *,"  at '" // TRIM(funcn) // "' variable '" //TRIM(varn)//                 &
    308       "' is wrong at i value___"
     308      "' is wrong in Nvalues= ",wrongi,' at i value___"
    309309    DO i=1,wrongi
    310310      PRINT *,wronggridpt(i), wrongvalues(i)
     
    318318
    319319END SUBROUTINE check_var
     320
     321SUBROUTINE check_var3D(funcn, varn, var, sizev, zsize, bigvalue, stoprun)
     322!  Subroutine to check the consistency of a 3D LMDSZ - variable (klon, klev) !
     323!    * NaN value: by definition is variable /= variable
     324!    * bigvalue: threshold for the variable
     325
     326  IMPLICIT NONE
     327
     328  INTEGER, INTENT(IN)                                    :: sizev, zsize
     329  CHARACTER(LEN=50), INTENT(IN)                          :: funcn, varn
     330  REAL, DIMENSION(sizev), INTENT(IN)                     :: var
     331  REAL, INTENT(IN)                                       :: bigvalue
     332  LOGICAL, INTENT(IN)                                    :: stoprun
     333
     334! Local
     335  INTEGER                                                :: i, wrongi
     336  CHARACTER(LEN=50)                                      :: errmsg
     337  LOGICAL                                                :: found
     338  REAL, DIMENSION(sizev,zsize)                           :: wrongvalues
     339  INTEGER, DIMENSION(sizev,2)                            :: wronggridpt
     340
     341!!!!!!! Variables
     342! funcn: at which functino of part of the program variable is checked
     343! varn: name of the variable
     344! var: variable to check
     345! sizev: size of the variable
     346! zsize: vertical size of the variable
     347! bigvalue: biggest attenaible value for the variable
     348! stoprun: Should the run stop if it founds a problem?
     349
     350  errmsg = 'ERROR -- error -- ERROR -- error'
     351
     352  found = .FALSE.
     353  wrongi = 0
     354  DO i=1,sizev
     355    DO k=1,zsize
     356      IF (var(i,k) /= var(i,k) .OR. ABS(var(i,k)) > bigvalue ) THEN
     357        IF (wrongi == 0) found = .TRUE.
     358        wrongi = wrongi + 1
     359        wrongvalues(wrongi) = var(i,k)
     360        wronggridpt(wrongi,1) = i
     361        wronggridpt(wrongi,2) = k
     362      END IF
     363    END DO
     364  END DO
     365
     366  IF (found) THEN
     367    PRINT *,TRIM(errmsg)
     368    PRINT *,"  at '" // TRIM(funcn) // "' variable '" //TRIM(varn)//                 &
     369      "' is wrong in Nvalues= ",wrongi,' at i k value___"
     370    DO i=1,wrongi
     371      PRINT *,wronggridpt(i,:), wrongvalues(i)
     372    END DO
     373    IF (stoprun) THEN
     374      STOP
     375    END IF
     376  END IF
     377
     378  RETURN
     379
     380END SUBROUTINE check_var3D
     381
    320382
    321383!C======================================================================
     
    611673            varname = 'zh_dair_col'
    612674            CALL check_var(fname, varname, zh_dair_col, klon, largest*10.e6, .FALSE.)
     675            PRINT *,'      zh_dair_col = func(q,ql,qs,paprs)'
     676            varname = 'q'
     677            CALL check_var3D(fname, varname, q, klon, klev, largest, .FALSE.)
     678            varname = 'ql'
     679            CALL check_var3D(fname, varname, ql, klon, klev, largest, .FALSE.)
     680            varname = 'qs'
     681            CALL check_var3D(fname, varname, qs, klon, klev, largest, .FALSE.)
     682            varname = 'paprs'
     683            CALL check_var3D(fname, varname, paprs, klon, klev, largest*10.e6, .FALSE.)
    613684          END IF
    614685          PRINT *,'    h_qw_tot= ',h_qw_tot
     
    631702      END IF
    632703
     704      IF (qs_tot .NE. qs_tot .OR. ABS(qs_tot) > largest) THEN
     705        PRINT *,TRIM(errmsg)
     706        PRINT *,'  ' // TRIM(fname) // ': Wrong qs_tot= ',qs_tot,' !!!'
     707        PRINT *,'    qs: total mass of solid watter (kg/m2)'
     708        PRINT *,'    qs = zqs_col(i)*airephy(i)'
     709        varname = 'airephy'
     710        CALL check_var(fname, varname, airephy, klon, largest*10.e5, .FALSE.)
     711        varname = 'zqs_col'
     712        CALL check_var(fname, varname, zqs_col, klon, largest*10.e5, .FALSE.)
     713        STOP
     714      END IF
    633715      RETURN
    634716      END SUBROUTINE diagetpq
Note: See TracChangeset for help on using the changeset viewer.