Ignore:
Timestamp:
Sep 23, 2024, 4:45:12 PM (7 weeks ago)
Author:
abarral
Message:

Merge r5200

Location:
LMDZ6/branches/Amaury_dev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev

  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/iso_verif_dyn.f90

    r5182 r5223  
    1   function iso_verif_noNaN_nostop(x,err_msg)
    2     IMPLICIT NONE
    3     ! si x est NaN, on affiche message
    4     ! d'erreur et return 1 si erreur
     1function iso_verif_noNaN_nostop(x, err_msg)
     2  IMPLICIT NONE
     3  ! si x est NaN, on affiche message
     4  ! d'erreur et return 1 si erreur
    55
    6     ! input:
    7     REAL :: x
    8     CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher
     6  ! input:
     7  REAL :: x
     8  CHARACTER(LEN = *) :: err_msg ! message d''erreur à afficher
    99
    10     ! output
    11     REAL :: borne
    12     parameter (borne=1e19)
    13     INTEGER :: iso_verif_noNaN_nostop
     10  ! output
     11  REAL :: borne
     12  parameter (borne = 1e19)
     13  INTEGER :: iso_verif_noNaN_nostop
    1414
    15     IF ((x>-borne).AND.(x<borne)) THEN
    16             iso_verif_noNAN_nostop=0
    17     else
    18         WRITE(*,*) 'erreur detectee par iso_verif_nonNaN:'
    19         WRITE(*,*) err_msg
    20         WRITE(*,*) 'x=',x
    21         iso_verif_noNaN_nostop=1
    22     endif
     15  IF ((x>-borne).AND.(x<borne)) THEN
     16    iso_verif_noNAN_nostop = 0
     17  else
     18    WRITE(*, *) 'erreur detectee par iso_verif_nonNaN:'
     19    WRITE(*, *) err_msg
     20    WRITE(*, *) 'x=', x
     21    iso_verif_noNaN_nostop = 1
     22  endif
    2323
    24     RETURN
     24  RETURN
    2525END FUNCTION iso_verif_nonan_nostop
    2626
    27   function iso_verif_egalite_nostop &
    28           (a,b,err_msg)
    29     IMPLICIT NONE
    30     ! compare a et b. Si pas egal, on affiche message
    31     ! d'erreur et stoppe
    32     ! pour egalite, on verifie erreur absolue et arreur relative
     27function iso_verif_egalite_nostop &
     28        (a, b, err_msg)
     29  IMPLICIT NONE
     30  ! compare a et b. Si pas egal, on affiche message
     31  ! d'erreur et stoppe
     32  ! pour egalite, on verifie erreur absolue et arreur relative
    3333
    34     ! input:
    35     REAL :: a, b
    36     CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher
     34  ! input:
     35  REAL :: a, b
     36  CHARACTER(LEN = *) :: err_msg ! message d''erreur à afficher
    3737
    38     ! locals
    39     REAL :: errmax ! erreur maximale en absolu.
    40     REAL :: errmaxrel ! erreur maximale en relatif autorisée
    41     parameter (errmax=1e-8)
    42     parameter (errmaxrel=1e-3)
     38  ! locals
     39  REAL :: errmax ! erreur maximale en absolu.
     40  REAL :: errmaxrel ! erreur maximale en relatif autorisée
     41  parameter (errmax = 1e-8)
     42  parameter (errmaxrel = 1e-3)
    4343
    44     ! output
    45     INTEGER :: iso_verif_egalite_nostop
     44  ! output
     45  INTEGER :: iso_verif_egalite_nostop
    4646
    47     iso_verif_egalite_nostop=0
     47  iso_verif_egalite_nostop = 0
    4848
    49     IF (abs(a-b)>errmax) THEN
    50       IF (abs((a-b)/max(max(abs(b),abs(a)),1e-18)) &
     49  IF (abs(a - b)>errmax) THEN
     50    IF (abs((a - b) / max(max(abs(b), abs(a)), 1e-18)) &
    5151            >errmaxrel) THEN
    52         WRITE(*,*) 'erreur detectee par iso_verif_egalite:'
    53         WRITE(*,*) err_msg
    54         WRITE(*,*) 'a=',a
    55         WRITE(*,*) 'b=',b
    56         iso_verif_egalite_nostop=1
    57       endif
     52      WRITE(*, *) 'erreur detectee par iso_verif_egalite:'
     53      WRITE(*, *) err_msg
     54      WRITE(*, *) 'a=', a
     55      WRITE(*, *) 'b=', b
     56      iso_verif_egalite_nostop = 1
    5857    endif
     58  endif
    5959
    60     RETURN
     60  RETURN
    6161END FUNCTION iso_verif_egalite_nostop
    6262
    6363
    64   function iso_verif_aberrant_nostop &
    65           (x,iso,q,err_msg)
    66     USE lmdz_infotrac, ONLY: isoName, getKey
    67     IMPLICIT NONE
     64function iso_verif_aberrant_nostop &
     65        (x, iso, q, err_msg)
     66  USE lmdz_infotrac, ONLY: isoName, getKey
     67  IMPLICIT NONE
    6868
    69     ! input:
    70     REAL :: x,q
    71     INTEGER :: iso ! 2=HDO, 1=O18
    72     CHARACTER(LEN=*) :: err_msg ! message d''erreur à afficher
     69  ! input:
     70  REAL :: x, q
     71  INTEGER :: iso ! 2=HDO, 1=O18
     72  CHARACTER(LEN = *) :: err_msg ! message d''erreur à afficher
    7373
    74     ! locals
    75     REAL :: qmin,deltaD
    76     REAL :: deltaDmax,deltaDmin,tnat
    77     parameter (qmin=1e-11)
    78     parameter (deltaDmax=200.0,deltaDmin=-999.9)
     74  ! locals
     75  REAL :: qmin, deltaD
     76  REAL :: deltaDmax, deltaDmin, tnat
     77  parameter (qmin = 1e-11)
     78  parameter (deltaDmax = 200.0, deltaDmin = -999.9)
     79  LOGICAL, SAVE :: ltnat1
     80  LOGICAL, SAVE :: lFirst = .TRUE.
    7981
    80     ! output
    81     INTEGER :: iso_verif_aberrant_nostop
     82  ! output
     83  INTEGER :: iso_verif_aberrant_nostop
    8284
    83     iso_verif_aberrant_nostop=0
     85  IF(lFirst) THEN
     86    ltnat1 = .TRUE.; CALL getin('tnateq1', ltnat1)
     87    lFirst = .FALSE.
     88  END IF
     89  iso_verif_aberrant_nostop = 0
    8490
    85     ! verifier que HDO est raisonable
    86      IF (q>qmin) THEN
    87          IF(getKey('tnat', tnat, isoName(iso))) THEN
    88               err_msg = 'Missing isotopic parameter "tnat"'
    89               iso_verif_aberrant_nostop=1
    90               RETURN
    91          END IF
    92          deltaD=(x/q/tnat-1)*1000
    93          IF ((deltaD>deltaDmax).OR.(deltaD<deltaDmin)) THEN
    94               WRITE(*,*) 'erreur detectee par iso_verif_aberrant:'
    95               WRITE(*,*) err_msg
    96               WRITE(*,*) 'q=',q
    97               WRITE(*,*) 'deltaD=',deltaD
    98               WRITE(*,*) 'iso=',iso
    99               iso_verif_aberrant_nostop=1
    100          endif !if ((deltaD.gt.deltaDmax).OR.(deltaD.lt.deltaDmin)) THEN
    101       endif !if (q(i,k,iq).gt.qmin) THEN
    102     RETURN
     91  ! verifier que HDO est raisonable
     92  IF (q>qmin) THEN
     93    IF(ltnat1) THEN
     94      tnat = 1.0
     95    ELSE IF(getKey('tnat', tnat, isoName(iso))) THEN
     96      err_msg = 'Missing isotopic parameter "tnat"'
     97      iso_verif_aberrant_nostop = 1
     98      RETURN
     99    END IF
     100    deltaD = (x / q / tnat - 1) * 1000
     101    IF ((deltaD>deltaDmax).OR.(deltaD<deltaDmin)) THEN
     102      WRITE(*, *) 'erreur detectee par iso_verif_aberrant:'
     103      WRITE(*, *) err_msg
     104      WRITE(*, *) 'q=', q
     105      WRITE(*, *) 'deltaD=', deltaD
     106      WRITE(*, *) 'iso=', iso
     107      iso_verif_aberrant_nostop = 1
     108    endif !if ((deltaD.gt.deltaDmax).OR.(deltaD.lt.deltaDmin)) THEN
     109  endif !if (q(i,k,iq).gt.qmin) THEN
     110  RETURN
    103111END FUNCTION iso_verif_aberrant_nostop
    104112
Note: See TracChangeset for help on using the changeset viewer.